1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273
|
PyTone
MP3 Jukebox redux
_________________________________________________________________
Summary
PyTone is a music jukebox written in Python with a curses based GUI.
While providing advanced features like crossfading and multiple
players, special emphasis is put on ease of use, turning PyTone into
an ideal jukebox system for use at parties.
Features
* concise curses based GUI
* simple song selection
+ using an arbitrary number of music databases with hierarchical
(artist/album/songs, some tags/artist/album/songs) navigation,
+ from list of top and last played songs,
+ from list of most recently added songs,
+ random song list,
+ stored playlists, or
+ alternatively from file system
* editable playlist:
+ deletion
+ move song up/down
+ delete played songs
+ shuffle
+ repetition and automatic addition of random songs, when the
playlist is empty
+ save to and load from .m3u file
* pluggable players, currently
+ internal MP3/Ogg Vorbis player with crossfading and/or
+ xmms based external player and/or
+ mpg321 or (the non-free) mpg123 based external player
* display of information for currently selected song:
+ ID3 tag
+ length, bitrate, sample rate, BPM, ReplayGain information, part
of a compilation, podcast
+ times played and skipped
+ last played
+ song rating (1 to 5 stars)
* plays currently selected song on second player (if your computer
has a second sound card or one card with more than one line out)
* search functionality:
+ quick search by first letter
+ incremental search by regular expression
* random song selection taking into account song rating and time at
which song was last played
* description of important key bindings in status bar and context
sensitive help
* random song suggestion
* logging of played songs
* execution of arbitrary command when playback of new song starts
* basic mixer functionality
* customizable key bindings
* customizable look
* English, French, German, Italian and Polish user interface
* external control, e.g. from the shell
* plugin system; currently plugins for the AudioScrobbler service and
for displaying the title in the terminal window and using xosd are
included
Software prerequisites
* Python 2.3 (available from [2]here);
* for the mad based internal player (optional):
+ Python header files,
+ pymad (available from [3]here) and
+ pyvorbis (optional, available from [4]here),
+ pyao (available from [4]here, please use version 0.82 or above) or
the new Python OSS module in Python 2.3.
+ libao header files (available from here, if you want to compile
the C version of the output ring-buffer.
* for the xmms based external player (optional):
+ xmms 1.2.6 or higher (available [5]here) and
+ pyxmms (available from [6]here)
* for the mpg321 or mpg123 based external player (optional):
+ mpg321 (available from [7]here) or
+ mpg123 (available from [8]here)
* for the mixer interface (optional):
+ Python OSS module (included in Python 2.3 or available from [9] here)
Download
The latest version of PyTone can be downloaded as gzipped tar archive
from [10]here.
Installation
If you want to use the internal libmad based player, you have to build
one C extension module located in the pcm subdirectory. This
can be done simply via
$ python setup.py build_ext -i
Note that by default this builds also a C extension module for the output
ring-buffer, which requires the libao header files (see above). If you are
happy with the Python version of the output buffer, you can disable
building the C module by setting "buildbufferedaoext = False" at the top of
the setup.py file before running the above command.
To enable support for transparent terminals (only needed for Python 2.3.x)
set "buildcursext = True" at the top of the setup.py file before running the
above command.
Configuration
All configuration options of PyTone can be found in the sample configuration
file conf/pytonerc. Side-wide configuration goes into /etc/pytonerc, user
specific changes can be put into ~/.pytone/pytonerc. Note that you only have
to supply options you want to change. Note that you only have to supply
options you want to change. Furthermore, while most of the standard settings
will probably fit your needs, you have to change the variable musicbasedir
in the section [database.main] of the main database, which specifies the
root of your primary MP3 collection. A minimal version of your configuration
file should thus contain
# minimal ~/.pytone/pytonerc defining the root of your music collection
[database.main]
musicbasedir=/root/of/your/music/collection
Usage
After having adjusted the basic configuration variables to your personal
needs, just start the program with
$ ./pytone
and look how the database is being rebuilt. The key bindings described
below should say all about the use of PyTone. A list of command line
options can be obtained by
$ ./pytone --help
Then let it rock...
The remote control of PyTone is possible using the pytonectl script.
For a list of available options use:
$ ./pytonectl --help
In order for the remote control to work, either the socketfile
or the enableserver option have to be set in the [network] section
of the pytonerc file. By default, the former is the case.
Key bindings
In database/filelist window (left half of screen)
ArrowUp move selection up
ArrowDown move selection down
PageUp/CTRL-P move selection one page up
PageDown/CTRL-N move selection one page down
Home/CTRL-A move selection to beginning
End/CTRL-E move selection to end
ArrowRight/Enter/Space enter directory / add song
ArrowLeft exit directory
i/ALT+ArrowRight add song or directory (recursively)
r insert random selection of selected directory
(including subdirs)
u update ID3 information for song/directory
D delete / undelete currently selected
song/directory
ALT+Enter immediately play song
TAB switch to playlist window
ALT+<character> Quicksearch: jump to next entry that begins
with character
CTRL-S// Search in list
In playlist window (lower right quarter half of screen)
ArrowUp move selection up
ArrowDown move selection down
PageUp/CTRL-P move selection one page up
PageDown/CTRL-N move selection one page down
Home/CTRL-A move selection to beginning
End/CTRL-E move selection to end
+ move selected song up
- move selected song down
d delete selected song
ALT+Enter immediately play song
r shuffle playlist
TAB/ArrowLeft/h switch to database/filelist window
ArrowRight/l jump to currently selected song in filelist window
Always active
p start/pause playing
S stop playing
n advance to next song in playlist
b go back to previous song in playlist
> fast forward in song
< rewind in song
BACKSPACE delete played songs
CTRL-D clear playlist
CTRL-W save playlist to file
CTRL-R load playlist from file
( decrease output volume
) increase output volume
{ decrease playback speed
} increase playback speed
~ reset playback speed to normal
1 - 5 change rating of selected item
ALT-1 - ALT-5 change rating of currently playing song
? show help
! show message log
% show statistical information about database(s)
= show information about selected item
CTRL-V toggle information shown in item info window
F10 toggle UI layout (one/two column)
CTRL-X CTRL-X exit program (the keypresses have to be
maximally one tenth of a second apart)
Mailing list
For discussions on PyTone, a mailing list has been created. For more
information on subscribing and for the list archive, see [11]here.
History
PyTone was written since my favourite MP3 Jukebox (KJukebox) wasn't
maintained anymore. Its simple user interface and good usability even
without a mouse combined with the crossfading ability of the player,
have not been reached by any other free program. Especially for the
use at a party, KJukebox was very well suited.
However, after looking around on the net for sometime, I found [11]mjs,
a curses based MP3 Jukebox system, which featured a really simple and
efficient GUI. Unfortunately, it was written in C and already the
first attempts to tailor it to my needs showed that probably a Python
version of this program would be a great win. That's how the
development of PyTone started...
After one week of intensive programming version 1.0 of what was then
called pyjuke was ready and was deployed during a three day long
party. It proved to be very usable (even on a 38400 baud serial
terminal) and astoundingly stable, even under extreme, Woodstock like
conditions (very heavy rain + deep mud :-) )
Subsequently, the internal mad based player was written, which
provides crossfading capabilities without using xmms, a new, more
imaginative name was found (kudos to Harry!) and PyTone was released.
Copyright and author
PyTone was written by Jrg Lehmann and is free software licensed under
the GNU GPL Version 2.
Please send comments, wishes, bug reports and patches to the
[11]mailing list or directly to me,
Jrg Lehmann <joerg@luga.de>
Of course, I always like to hear of happy users of PyTone.
Links
1. http://packages.debian.org/unstable/sound/pytone.html
2. http://www.python.org/
3. http://spacepants.org/src/pymad/
4. http://www.andrewchatham.com/pyogg/
5. http://www.xmms.org/
6. http://www.via.ecp.fr/~flo/index.en.html
7. http://mpg321.sourceforge.net/
8. http://www.mpg123.de/
9. http://indra.com/~tim/ossmodule/
10. http://www.luga.de/pytone/PyTone-latest.tar.gz
11. https://www.luga.de/mailman/listinfo/pytone-users/
12. http://mjs.sourceforge.net/
|