xfmusic4 alpha release
Brian J. Tarricone
bjt23 at cornell.edu
Mon Jul 12 07:18:50 CEST 2004
for the past few weeks i've been working on a simple music player for
xfce4, and it's come along much nicer than i thought it would. there
are still a lot of issues to work out, and some things that don't work
yet, but i think it's ready for a general alpha release.
you can grab a source tarball here:
if you want to see what it looks like first:
unfortunately (for some of you), at this time, xfmusic4 (the GUI at
least) requires gtk 2.4.0 or higher. you also need either ALSA, esd, or
libao for audio output. or you can just write out wave files ^_~.
PLEASE read the toplevel README before asking me why file format X
doesn't play. the end of the ./configure output will be useful too. i
know there are bugs, and i know some things aren't finished yet, but
please don't tell me about them unles it isn't listed in the toplevel
TODO file. otherwise, feedback would be much appreciated. a word of
warning: this is likely to change quite a bit, so i'd suggest installing
it to its own prefix (such as /opt/xfmusic4).
there's no public CVS for this yet, but if olivier and the others
approve, i'd like to import this into xfce CVS at some point.
enjoy - feel free to email questions and bug reports directly to me so
as to keep the list open for "real" xfce traffic.
p.s. here's the part most of you won't care about, but if you're
interested in how this thing is designed, read on.
the entire thing is based on a backend library (which contains no GUI
code), called libxfmusic4. the library can use 3 types of plugins -
input, filter, and output plugins.
input plugins are there to get data from... wherever... and decode it
depending on what format the data is (mp3, vorbis, wave, etc.). so far,
they can read data from files or streamed from stdin. i'm planning on
adding support for retrieving files via http, and maybe other network
filter plugins sit after the input plugins, and can modify the audio
data in whatever way they want - or they can just watch the data go by
and do something cool with it. the idea here is that they can be
activated and deactivated at will, and you can do things like
resampling, audio effects, visualisation, etc.
finally we have the output plugins, and their responsibility is simply
to get the data to your sound card. they also have to look at the
incoming audio format and possibly convert it to something else if the
selected output device can't handle it. i've also written a wave-out
plugin, which can write any stream it can decode into a wave file. the
GUI can't make use of this yet, however (but the cmdline frontend can).
the library itself is multithreaded, using Glib's threading primitives,
so all frontends must first call g_thread_init() (and g_type_init(), if
it isn't a gtk+ frontend). the design is relatively simple; there's the
main processing thread, and the audio thread. the audio thread just
sits in a loop and grabs data from the selected input plugin, pushes it
through any active filter plugins, and then sends it to the output
plugin. the main thread sends messages to the audio thread when it
needs it to do something other than that. the player engine itself
(XfMusic) is wrapped in a GObject and can be instantiated, controlled,
and destroyed like other glib or gtk objects. the library is (as far as
i know) thread-safe and reentrant, so you can have multiple XfMusic
instances active in the same process if you wanted to. theoretically,
that's about it, i think.
More information about the Xfce4-dev