The primary requirement is a Python interpreter that supports version 2.2 of
the language (or later) and also includes support for threads. The command-line
client also relies on the Unix find utility. The server relies
upon external command-line programs for actually playing the music files. The
default setup uses mpg123 for MP3, timidity for MIDI,
ogg123 for Ogg/Vorbis, mikmod for the whole range of
MOD formats, and sox for a wide variety of other (mostly
uncompressed) sound file formats. Moosic will only work on Unix systems, since
it uses a wide variety of Unix-only features. All of these portability issues
are noted within the source code.
After extracting the archive file (tarball) used to distribute Moosic, the
executables and manpages can be installed by using the "make
install" command from within the directory that contains Moosic's source
files. By default, this command installs Moosic within the
/usr/local directory, and thus requires the command to be run as
the root user to be effective. If you wish to install Moosic into another
directory, use the following command, replacing "[dest]" with the name of the
directory you wish to use: "make install INSTALL_PREFIX=[dest]".
moosic is the command-line program that provides the main
interface to the Moosic jukebox. It works by sending a command to the Moosic
server and returning the response, if any. The first non-option argument given
to moosic is the name of the command to be performed. Use "moosic
--showcommands" to get a list of all the different possible commands, or
read moosic's manual page. There are very many commands, so you
should start by just learning a few commonly used commands, and only learning
others as you feel the need. I recommend starting with the following short
command vocabulary: add, list, stop, play, and shuffle.
For example, "moosic add foo.mp3" adds the file
foo.mp3 (in the current directory) to the end of the song queue and
returns you immediately back to your shell prompt without printing any output
(unless an error occurs). Compare with "moosic list", which will
list the contents of the song queue. Note that if the song queue is empty,
"moosic list" will not display anything.
Any command which takes a list of files as an argument will also accept
directories, and doing so will cause every file below that directory to be
included in the file-list. Note that the default behavior of moosic is to
shuffle everything in a file-list before sending the list to the server, but
only after recursively expanding named directories. Use "moosic
--help" to learn about options for changing the shuffling behavior, as
well as other options.
When the Moosic server isn't already running, moosic will
automatically start it for you by launching the program named
"moosicd" (unless you specifically request otherwise).
moosicd creates a default configuration file for you in the
~/.moosic/ directory. This configuration file associates filename
patterns to player programs. Although the defaults should be sufficient for many
people, there is a very good chance that you will want to change this default
configuration. Simply open up the config file in your favorite text editor, and
follow the instructions. Note that you need to start moosicd at
least once for it to generate a configuration file for you.
Very rarely, performing "moosic next" will cause the currently
playing song to restart rather than causing the next song in the queue to start
playing. I have no idea why this happens, and it happens so infrequently that
I've not yet had the patience to monitor the server long enough and carefully
enough to reveal any clues.
This bug causes the "moosic current" command to output a string
of junk characters when moosicd is not playing anything. This is really a
manifestation of a bug in the Python standard library included with Python
version 2.2.2 (specifically, in the function for decoding base64 data in the
binascii module). This bug has been fixed in version 2.2.3, and is
not present in versions between 2.2 and 2.2.2, so you can fix this problem by
using these versions of Python instead of version 2.2.2.
The "moosic next" command can sometimes cause too many items to
be skipped when ogg123 is being used to play the current song. The problem is
that the Moosic server sends a "terminate" signal to ogg123 and starts
processing the next item in the queue as soon as ogg123 claims that it has
exited. But it seems to be possible for ogg123 to somehow keep the sound card
busy for a short period of time after it has exited (although I have no idea how
this is possible). This behavior interferes with any new player processes
spawned by moosicd. As long as ogg123 retains its wrongful strangle-hold over
the sound card, the player programs that moosicd tries to start will fail with
an error such as "Device or resource busy". This lingering lock on the sound
card generally won't continue for more than a fraction of a second after
ogg123's death, but that is long enough for moosicd to attempt to play a very
significant number of songs.
One way to work around this problem is to use a system such as aRts or EsounD, which allows multiple programs to access the sound device at the same time. It also seems possible to work around this bug in ogg123 by having moosicd artificially send it a "keyboard interrupt" signal instead of the more appropriate "terminate" signal. Versions of Moosic since 1.3.3 include a hack that does this, but I really do not like this hack. I really wish the maintainers of ogg123 would fix their program so that it responds properly to "terminate" signals.
Please report any bugs that you discover to Daniel Pearson <daniel@nanoo.org>.
This program is free software, and can be redistributed and/or modified under the terms of the GNU General Public License (GPL).
This web page is copyright (C) 2004 Daniel Pearson <daniel@nanoo.org>