FAQ

From XMMS2
Jump to: navigation, search
Notes
  • This FAQ exists as a complement to the README page.
  • PLEASE DON'T ADD NEW QUESTIONS HERE, ASK THEM ON THE MAILLIST OR ON IRC!

Contents

General

Why rewrite XMMS?

XMMS is an old project (started in 1997) and was not expected to become as popular as it did. The internal design of XMMS is somewhat ... troublesome, if not completely broken. Also, the frameworks around XMMS have changed a lot. The general opinion among the developers was that if ANYTHING should happen, it would be a complete rewrite.

Who is responsible for XMMS2?

Peter Alm (original author of XMMS) did the first designs and the initial code. Most of the code is written by Tobias Rundström and Anders Gustafsson. The project is being maintained by Tobias and Anders. A big thanks goes out to Thomas Nilsson too, he bitches well. (See also: People involved)

Those are not the same developers who maintain XMMS?

That's true. XMMS2 is a separate project. Rest assured, XMMS will live on for a long long time. XMMS2 will not be ready any time soon to take over from XMMS1.

What are the design goals of XMMS2?

XMMS2 is designed to be a kickass music-player. We wanted to rectify various problems with the XMMS APIs. For example, splitting the input-plugin into transport- and decoder-plugins. We also wanted the UI to be separate from the core engine, in order to allow for other interfaces than a Gtk+ GUI.

Why just a music player?

A lot of people ask us about video. But video will not be included, nor will it be supported in XMMS2 - in fact video-support is even less possible than in XMMS1. This choice has numerous reasons. Music and video are very separate things, despite what many people like to think. The architecture of XMMS2 is designed such that it handles audio wonderfully well - handling video is simply not part of this project's scope and will not be added. And we believe that we can make the best music player out there, but not the best video player, so we stick to what we are best at. There are other choices, if you wish to play video and audio via the same application.

But XMMS stands for X MultiMedia System, that includes video!

Wrong. In "XMMS2", XMMS stands for X(cross)platform Music Multiplexing System.

What platforms will you support?

Our aim is to be able to port XMMS basically everywhere, but development is mainly done on Linux/x86, Linux/PPC and Mac OSX. Support for other platforms is currently secondary, although it has been known to work on OpenBSD and Solaris. (See also: Platforms)

What about Windows?

We take great strides to keep our code as portable as possible and XMMS2 has been known to run on Windows. In theory, all our code should at least compile on a Windows system, being ANSI C. However with the finite number of developers and time on the project, support for certain operating systems, like Windows, can fall out of date. Some minimal patching may be necessary and as with all projects, support for a particular platform is directly related to the number of people interested in it. XMMS2 is most feature-packed when used in an open environment where it's easiest for most developers to work so expect a less robust feature set within Windows. (See also: Windows)

How do I get in contact with you guys?

See our Contact Us page.

When will XMMS2 be released As a non-Developer release?

We don't know. Probably "when it's done". RSN.

What is the difference between MPD (Music Player Daemon) and XMMS2?

See XMMS2 vs MPD

Why doesn't XMMS2 use GStreamer?

See XMMS2 vs GStreamer

Why doesn't XMMS2 use Dbus?

  • A: This is really just an implementation detail, everyone should use the clientlib and not have to care about how it talks to the server. It could be using xmlrpc or corba or black magic or smoke signals or jungle bongo drums or morse-over-sigusr1, it is all abstracted away in the client library.
  • A2: XMMS2 used to use Dbus for its client-server communication. It used the peer-to-peer functionality in Dbus, which didn't involve an indirection through a bus. When this mode of operation ceased to be supported, we decided to drop Dbus, as it had caused much trouble chasing an unstable api over which we had no control. There were many other problems as well, such as with the bindings for glib. If Dbus had been as stable as it is today, back then, we might not have switched. However, we would have then been stuck with this extra indirection through the Dbus that doesn't really fit the xmms2 client-server model.
  • A3: XMMS2 is developed with portability in mind. DBus doesn't exist for windows, and it is hard to justify depending on DBus on other unices than Linux too (such as *BSD, Solaris, Mac OS X).

Why does XMMS2 require SQLite3 and why is the db backend not selectable?

  • A: XMMS2 uses SQLite3 for its "medialib". It will store (cache) metadata from your media files. This will make adding a file to your playlist a lot faster since xmms2d will not have to open the file and re-read the tags. It also allows you to query the medialib in order to make a selection of songs.
  • A2: Before the collections concept, SQLite3 was very tightly connected to the internals of XMMS2. Clients wishing to get specific medialib information has to send a SQL query to the server, which passed it to the medialib and returned results. Now, with collections, medialib access has been abstracted behind an API, so all the SQL queries are in the server-side collections code. In theory, it's now possible to split out database-specific code into plugins, though it is a massive undertaking.

Usage

Hint: Also see the Getting Started page

How do I use XMMS2?

XMMS2 is based on the client-server model, where most of the logic resides inside the server (xmms2d). With a client, you can send commands to the daemon and manipulate your media. For now we only ship a command-line client (an official GUI client might ship in the future). To install, read the INSTALL file. For usage of XMMS2 CLI client see the included manpage and Using the application.

What other clients are in progress?

See XMMS2 Clients.

Does XMMS2 run on my favourite platform/operating system?

See the Platform support status table for an overview. For information about mobile platforms (Palm PDA, Sharp Zaurus, etc), see Mobile platforms.

How do I load a playlist?

Use the addpls command of the command line client, for example:
tru@darkangel:~/xmms2/xmms2$ xmms2 addpls http://www.digitalgunfire.com/playlist.pls
Added playlist http://www.digitalgunfire.com/playlist.pls
tru@darkangel:~/xmms2/xmms2$ xmms2 list
->[0/30] m - Digital Gunfire (Sweden Mirror) (00:00)
  [1/31]  - Digital Gunfire (Boston Mirror) (00:00)
  [2/32]  - Digital Gunfire (Indiana Mirror) (00:00)

Does XMMS2 do crossfading?

Not yet, this is a requested feature that might be added in the future.

How do I change the output?

XMMS2 tries to use sane defaults for its output plugins. That means ALSA on most linux machines, falling back to OSS; OSS on BSD; Core Audio on OSX; Sun audio on Solaris; etc. If, for some reason you don't like the default (e.g. you use Jack), then you can change it while xmms2d is running using the CLI config command:
xmms2 config output.plugin <plugin>

How do I use clients on remote machines?

XMMS2 can be configured to listen via local unix sockets, or TCP sockets (IPv6 is supported, too). You can change this with the CLI config command, too:
xmms2 config core.ipcsocket 'tcp://'

Example with IPv6 and non-default port:

xmms2 config core.ipcsocket 'tcp6://:5555'

Example with having both the default local unix socket and a TCP socket for remote clients:

xmms2 config core.ipcsocket 'unix:///tmp/xmms-ipc-'$USER';tcp://'

The seperator between different sockets here is ';'.

How do I bind hotkeys to xmms2 commands?

XMMS2 doesn't offer this natively, but you can try several hacks for this. One such example is this Hotkey setup using xbindkeys.

In alsa, how do I change from "default" to another audio device? "hw:1,0" and similar commands do not work!

Find the name of your devices with "aplay -L", then set the alsa.device config option:
$ aplay -L
 null
     Discard all samples (playback) or generate zero samples (capture)
 default:CARD=Headset
     Logitech USB Headset, USB Audio
     Default Audio Device
 front:CARD=Headset,DEV=0
     Logitech USB Headset, USB Audio
     Front speakers
 surround40:CARD=Headset,DEV=0
     Logitech USB Headset, USB Audio
     4.0 Surround output to Front and Rear speakers
 surround41:CARD=Headset,DEV=0
     Logitech USB Headset, USB Audio
     4.1 Surround output to Front, Rear and Subwoofer speakers
 surround50:CARD=Headset,DEV=0
     Logitech USB Headset, USB Audio
     5.0 Surround output to Front, Center and Rear speakers
 surround51:CARD=Headset,DEV=0
     Logitech USB Headset, USB Audio
     5.1 Surround output to Front, Center, Rear and Subwoofer speakers
 surround71:CARD=Headset,DEV=0
     Logitech USB Headset, USB Audio
     7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
 iec958:CARD=Headset,DEV=0
     Logitech USB Headset, USB Audio
     IEC958 (S/PDIF) Digital Audio Output
$ xmms2 config alsa.device default:CARD=Headset
Config value alsa.device set to default:CARD=Headset

Development

How do I contribute code to XMMS2?

Please see the Submitting code page.

Why git? What was wrong with cvs/svn?

That's like asking "Why icecream? What was wrong with meatloaf?" when you want a dessert. Do your homework.

Seems like you are using a non-standard buildsystem, why not Make?

Make is a really good buildsystem, although to get all functionality needed for a bigger project you'll need automake, autoconf and libtool. We had a lot of problems getting these tools to do what we wanted, so we evaluated the alternatives. SCons is a good alternative. If you do not want to install Python and SCons on your system, there will be binaries available for the most common platforms. See also: Build system requirements
We're in the process of switching to Waf, which is even better-suited to XMMS2. As a bonus, it's also more lightweight and a standalone version ships with XMMS2.

Why can't I use multiple output plugins at the same time? I want to listen to music and act as a stream source

The possibility of multiple outputs involves a nontrivial solution. The biggest problem is keeping all of the outputs in sync with each other. Each output must pull audio data from a buffer following the last decoder or effect plugin in the xform chain at a rate determined by the samplerate of the underlying device. For example, streaming audio will have an exact bitrate since no actual audio hardware is used for obtaining audio data, but a soundcard's samplerate may vary by a few Hertz with temperature, components, and voltage. We end up with an ever growing buffer (if the buffer holds data longer for slower outputs) or dropped samples (if the data is destroyed after the faster output has read it).
There are also smaller issues like that the xmms2 daemon takes into account the delays caused by the output plugin when showing the current playtime, but if there are multiple outputs these delays can vary. So one of them would have to be defined as a primary output to keep this feature in use.
Current plan to resolve the aforementioned problem with concurrent output and stream sourcing is to make it possible for effect plugins to keep a constant input format and stay alive through song changes. That way they can draw the data from the stream itself and it won't have synchronizing problems because the whole chain is still simple and one-dimensional.

Troubleshooting

XMMS2 is not working. What should I do?

You should do it right, of course. Stop doing it wrong, and it'll start working. No, seriously, see if your problem can be solved below, if not, try the mailing list or IRC. If you run xmms2-launcher or xmms2d, try using the -v option for more output. Remember that the xmms2-launcher program puts all output from the xmms2 daemon into a log file: /tmp/xmms2.log. This output will be very helpful in diagnosing your problems.

While trying to start xmms2, I get ERROR: Could not create default configfile!!

This can happen when you've installed XMMS2 for the first time. You need to run xmms2d or xmms2-launcher first, then run xmms2 to control the daemon. Running xmms2d will create the configuration directory as required, so that XMMS2 clients can then create their own configuration files. For more information, please see Using the application.

When trying to use the xmms2 command line client, I get error while loading shared libraries: libxmmsclient.so.0: cannot open shared object file: No such file or directory

Add /usr/local/lib to either your LD_LIBRARY_PATH environment variable, or as a new line in /etc/ld.so.conf. If you add the line to ld.so.conf, make sure you run ldconfig before trying to use xmms2 again. If you have installed XMMS2 using a non-default PREFIX, the path you'll have to add will be $PREFIX/lib.

When trying to use a Ruby or Python XMMS2 client, I get can't find xmmsclient

This means you're missing the Ruby or Python client library bindings. To build the Python module, you'll need to install Pyrex and Python dev headers. To build the Ruby module, you'll need to install the Ruby dev headers. Once you have those, run ./waf configure --nocache && ./waf build to reconfigure and rebuild XMMS2.

I can't play MP3s, what kind of media player is this?

XMMS2 only installs plugins for the libraries installed on your system. You're probably missing libmad. See the Install instructions for more information.

I have libmad installed, but I still can't play MP3s, what gives?

If you built your copy of xmms2 from source, and especially if you're on a binary distribution like ubuntu or debian, chances are you're missing needed header files. You need to install the -dev package for libmad on your system. This will install the requisite mad.h header file that xmms2 uses to link to the MAD library. Again, see the Install instructions for more information.

When I add my media collection to the playlist, x files don't show up.

  • A: One cause is that you're missing a plugin required to decode the file. If you notice a certain type of file is missing, such as all your MP3s or Oggs, you should read the Install instructions or read above for help. This is where your log can come in handy.
  • A2: Another possible cause is that your file has an uncommon mix of formats. If you notice that only certain files are missing, such as certain MP3s, this is likely the case. As of this writing, certain MP3s have a known bug which causes them to fail detection. This type of file is pretty rare, however, so you can probably just hang tight and you won't miss these MP3s too much.

When I start xmms2d or xmms2-launcher I get ERROR: Couldn't initialize IPC socket or startup failed!

There are a few possible causes for this. Check that the user running xmms2d has read/write permission on /tmp. Check that there is no currently-running xmms2d process (ps ax | grep xmms2d should do it). Finally, make sure the ipcsocket in your ~/.xmms2/xmms2.conf is read/writable if you've changed the default IPC socket (unix:///tmp/xmms-ipc-<user>).

Help, I found a bug!

So, you found a problem that couldn't be solved here. Please read the page on Reporting bugs then submit a bug report. If you want you can also use IRC or the mailing list to be more interactive with the developers. In either case, you should be sure to check your e-mail and changes on your bug report page regularly and submit any extra information required.

Snapshot tarball full of random files and things about 'paxheader'

The snapshot tarballs are generated using git-tar-tree and are pax format archives with pax extended attributes. If you see *.paxheader and *.data files instead of a normal source tree, you'll need to use a different version of tar or some other archive extraction utility, such as bsdtar, star, or GNU tar.

I added some music and started playing, but I can't hear anything!

"Did you try turning it off and on?" This checklist might help:
  1. Are you deaf? In the future, try to remember this when using media players.
  2. Do you have speakers plugged into your sound output device?
  3. Are the speakers turned on?
  4. Can other programs output sound properly?
  5. Do you have an onboard sound chip (or cheap/old sound card) and some other program is currently using the device?
  6. Check your device mixer settings (using alsamixer/kmixer/aumix/something appropriate). Do you have volume set to 0, or have some channels muted?
  7. Check the volume setting on the output plugin using xmms2 volume_list.
  8. Are you using an appropriate output plugin? (Diskwrite and Null will not output anything audible!)