Article Discussion Edit History


[edit] How to contribute

If you want to contribute to BMPx, may it be code or a translation, please file an enhancement request (RFE) on our bug tracking system. Attach your files to the RFE.

If you have more profound changes that don't fit into a single patch, especially ideas for restructuring large portions of code for soundness, elegance or some other reason, discuss with us on IRC! Our channel is #bmp on irc.freenode.net.

In any case, don't feel restricted. If you're unsure of what to do[1], or if you have any idea that can improve BMPx for everyone (well, most :), however vague, or simply want to laze around, just join us on IRC :)

[1] Be sure to read the on-site documentation first

[edit] Misc FAQ Items

[edit] Why is Item X or Feature X not implemented, even though it seems trivial?

[edit] The Answer (TM)

This is an often asked question and the answer is as simple as it might not meet your understanding at the same time (at least if you think short term).

As of this writing, features like shuffle, and repeat, for the playlist and album playback haven't been implemented. Now many people are asking why, even though they seem trivial, and would be, in fact, trivial to implement, if implemented directly. And now we're at one of the major keywords here. There are 2 aspects to why some very basic features are missing: Long term UI consistency and Complex Backend Implementations that superficially seem simple.

This means nothing else than, if we know that a particular feature will be implemented in a "bigger scheme" in the future, and will be accessible through the UI in a different way than it would be accessed right now (if we'd "just" implement it), then we rather don't implement it at all right now; the reason is that users would get used to the way this feature is used and where to find it in the UI right now. If this should then change once we implement the bigger plan that incorporates this feature, the usage and accessibility in the UI would (probably) change, and users would have to re-learn the UI. Because of that, we rather don't implement it at all currently, but only once we implement the facilities that will have this feature "for good" and (hopefully) forever, in that particular way. If we knew that this feature will work in the exact way even in the future, when it's going to be implemented in the bigger plan, we would do implement it already; but with most stuff, it's not _exactly_ clear how it will look like, and we don't want to restrict ourselves, in turn, to then (in the future) forging the feature to look and work the way it would look if we'd implement it now.

Now this sounds all very theoretical, so i'll give you a practical example. Our playback control (as in "what item is next", "what's the previous item", isn't controlled by linear progression to the next or previous item, or at least shouldn't be/wasn't so, until we switched to the Gtk+ GUI, but was rather controlled like described on the Playback Control page. These facilities (Flow plugins, History, etc.) haven't been reinstated yet, and they are what provides shuffle, and other playback options, etc.

We're _not_ going to implement e.g. shuffle right now, because we are not sure how it will look like when we re-instate the flow plugins and playback history; if we knew that now, we'd just implement it, and when we switch back to the internal use of flow plugins and the playback history, i'd just all work and look the same. However, we don't know that, and we don't want to put a wager upon the UI staying consistent and the user not having to re-learn something.

As of this writing (Nov 10 2006) it i not clear how this will look like in the future, so going by what i've described above, we can not implement it right now, period (sorry, but as patronizing as it sounds, it's in the end just for your good).

(Apply this to other "trivial" missing features as well, like being able to play a custom http:// or mms:// stream, etc. There will be docs on how sepecific features will look like in the future rather soon, as the Roadmap page will be revised.)

[edit] But you "just" dropped the Winamp 2.x skins. Wasn't that a radical change?

And yes we dropped the Winamp2.x GUI which was a radical change and users had to re-learn UI to some extent, but the reasons for this were different and certainly overriding the concern about the future consistency of the GUI because the Winamp2.x GUI, to sum it up in short, just had no future. It was nothing we could have based BMP 2 in the future upon, it just had to be dropped at some point, and that point was just now when we did it.

[edit] 'Downloads'

[edit] How do i use those "Downloads" seen on various screenshots and what is it?

You can use Soulseek P2P from within BMPx directly, using the packages mooseekd and Moodriver. Instead of mooseekd, you can install Museek+ and use 'museekd', the daemon which comes with the entire Museek+ package. Mooseekd is a standalone fork of the museek daemon with blessing from the official project. It works and behaves identically to the original museekd (and has a more humorous name).

[edit] How to build BMPx with Soulseek support and use it

First of all, download Moodriver using the link above or the Downloads page (see bottom), build and install it, and then build BMPx with the configure flag '--enable-moodriver'. (This does not require museekd/mooseekd yet). After this is done, install either mooseekd or Museek+, and then run, from a terminal, for Museek+ "musetup", or for mooseekd "moosetup". You need to set up a few basics in the configuration procedure for proper working of the daemon.

Run the daemon (e.g. enter 'museekd' or 'mooseekd' in a terminal). Then start BMPx and enter the hostname you specified during the setup (probably localhost unless the daemon runs on another machine), and the interface password you've specified This is not the server and password name for some "Soulseek server". It is merely the password and host the daemon runs on!

Once it has successfully connected to the daemon you're ready to go searching and downloading music.

[edit] Why is this all so complex and the downloads aren't just embedded into BMPx?

There are 2 main reasons for this:

1) There is an existing Soulseek protocol implementation in museekd, which is part of Museek (now Museek+). We didn't want and didn't need to reinvent the wheel, so we're making use of it to provide the connectivity to the Soulseek network.

2) We could have taken the code and embedded it all into BMPx, but this would effectively lead to BMPx being classified as a P2P app. Doing it indirectly through bridges frees us from possible legal issues in some jurisdictions. To use Soulseek, BMPx needs to be linked with Moodriver to communicate with a separate program (Museekd/Mooseekd) which will connect to the network and download files on BMPx's behalf. Therefore, it is entirely up to users to integrate downloads in accordance to the laws they are under (or incur the risk if they want to do it illegally).

[edit] Running with D-Bus

[edit] Run a D-Bus session daemon within your X session

Put this in your ~/.xinitrc file:

dbus-launch --auto-syntax --exit-with-session COMMAND

COMMAND is the command you use to start your windowmanager/desktop with, e.g. gnome-session for GNOME, startkde for KDE, wmaker for WindowMaker, fluxbox, etc.

This will make the D-BUS session available to the whole session and all apps once you have started X.

Is D-BUS already running?
On Linux distributions where this already happens in one way or another (the system starts a D-BUS session daemon for you after log-in), this isn't necessary. You can check for this by simply logging in without the above modifications and then running the command
from a terminal. If this outputs nothing, you have to proceed as described above, otherwise you don't need to do anything.

[edit] How do I use D-Bus from within the GNOME Desktop?

Excerpt from FreeBSD documentation: http://www.freebsd.org/gnome/docs/faq2.html#q25

The GNOME Desktop must be started with D-Bus support. To do this, launch gnome-session from within dbus-launch. For example, if you start GNOME using ~/.xinitrc or ~/.xsession, change the line that execs gnome-session to the following:

exec dbus-launch --exit-with-session gnome-session

If you use GDM to start GNOME, create a new GDM session with the following parameters:

[Desktop Entry]
Name=GNOME with D-BUS
Comment=GNOME Desktop with D-BUS support
Exec=/usr/bin/dbus-launch --exit-with-session /usr/bin/gnome-session

Call this new GDM session gnome-dbus.desktop.

[edit] Backwards compatibility with BMP

[edit] Can I use BMP plugins with BMPx?

Not at the moment. BMPx utilizes GStreamer for its audio backend. Unless someone develops GStreamer elements to adapt BMP plugins, this will not be possible.

[edit] Where is the web site for classic BMP that came with my Linux/*BSD distro?

It has been moved here: http://bmp.beep-media-player.org

[edit] Playback

[edit] Setting up GStreamer

[edit] What is GStreamer?

GStreamer is a multimedia framework used to drive BMP's audio backend. It has been chosen for its outstanding flexibility and extensibiliity so that we can focus on delivering you an easy-to-use application instead of having to care about the nitty-gritty details of audio codecs, playback sources and devices. Everything that is playable under GStreamer is automatically playable in BMPx as well (well, almost anyway).

[edit] Building GStreamer from source

You can get the following components from the GStreamer Source Downloads. You should build all of them to have the maximum amount of file types to play back.

  • gstreamer
  • gst-plugins-base
  • gst-plugins-good
  • gst-plugins-bad
  • gst-plugins-ugly
For MP3 playback; make sure you have mad/libmad and mad-devel/libmad-devel or whatever the appropriate package name on your system is installed before compiling gst-plugins-ugly
  • gst-ffmpeg
For additional filetypes like WMA

[edit] Using pre-packaged GStreamer packages

Various OSes and/or Linux Distributions package GStreamer really differently. There is no common way to tell how the packages are split up.

Gentoo users should be the most cautious ones probably as Gentoo has split up GStreamer 0.10 into a huge amount of sub-packages. The mad (mp3) plugin is normally part of gst-plugins-ugly, but Gentoo has made a separate ebuild for it, gst-plugins-mad, to cite just one example.

Debian might not have the packages in your allowed repositories. On enabling third-party repositories, see Apt Pinning. To get musepack (.mpc files) support, you need to install musepack-decoder from the Rarewares repository; download gstreamer0.10-plugins-bad from Ubuntu Dapper or gstreamer0.10-plugins-bad-multiverse (for AMD64) if the mentioned packages are still unavailable natively; then sudo dpkg -i <package> (which will report broken dependencies) and sudo apt-get -f install (which will fix the dependencies).

[edit] What can BMPx play?

The simple answer is: almost everything your GStreamer installation can play back.

More complicatedly, BMPx uses GStreamer as the playback backend and thus can play whatever GStreamer can play on your system. It can generally output [i]audio[/i] to whatever GStreamer can output to on your system. For the latter, there has to be explicit support added first, as we are taking care of every output possibility individually and want to have proper setup methods for it. Here is a general overview of what is supported, but they vary depending on your installation.

[edit] Audio Output Systems

  • ALSA
  • OSS
  • ESD (Enlightened Sound Daemon) (Not well tested yet and reported to be crashing)
  • SUN Audio (confirmed working)

[edit] Stream Types

  • Vorbis
  • WMA
  • M4A
  • AAC
  • FLAC
  • Speex
  • SHT (Shorten)
  • TTA (True Audio)
  • MOD-style file formats (vis libgstmodplug, pending on inclusion for 0.10.4)
  • SID files (C64 .sid/.psid files)
  • AC3
  • MPC (Musepack)

[edit] Container Formats

Each container format can contain audio files, as the name suggests. Even so-called "OGGs" are just Vorbis files inside the OGG container. MKA can also contain Vorbis or MP3 streams; the same goes for OGM and, possibly, for AVI. (We're listing AVI just for the sake of completeness, we're not sure nor aware of audio-only AVI files that exist.)

[edit] Additional Capabilities

  • Audio CD playback (using cdparanoia trough libgstcdparanoia.so)
  • Internet streams (http:// streams as well as mms://)
  • Last.FM Radio (in current skinless branch SVN HEAD)
  • Shoutcast

[edit] Playlist Formats

  • M3U (Please note that the M3U format does not originally support URIs, only filenames. That means that if you have an URI list, and rename it to .m3u, and try to load it into BMPx, it will not work, simply because M3U isn't meant for that)
  • PLS
  • XSPF

[edit] Checking your installation

Run each of those commands to test your GStreamer installation for a particular playback capability. If any of those returns "No such element", then you need to install the appropriate plugins if you want to play this kind of files.

  • MP3:
 gst-inspect id3demux
 gst-inspect mad

  • OGG Vorbis:
 gst-inspect oggdemux
 gst-inspect vorbisdec

  • MPC:
 gst-inspect musepack

  • WMA:
 gst-inspect ffmpeg

  • M4A/MP4:
 gst-inspect faad

  • FLAC:
 gst-inspect flac

[edit] Testing for Files

Run the following command to test your GStreamer pipeline. If you can hear sound, and bmpx still doesn't play, please report the bug.

 gst-launch filesrc location=/filename/to/play ! decodebin ! audioconvert ! audioresample ! alsasink

[edit] Testing for HTTP Streams

Since 0.30, http stream support will be included natively in BMPx

[edit] Testing for Audio CDs

 gst-launch cdparanoiasrc track=1 ! audioconvert ! alsasink

[edit] Checking with the GUI

BMPx has status information in the Preferences window. Open "Preferences" and select the "Audio" category. Under the "Capabilities" tab, you will see the status indicators like this:

1) Audio Support indicators
If any of those indicators are grey (not green as in the example), please check your system for the GStreamer components as described above.

[edit] Debugging

[edit] Crash at startup

Please dowload this script: check-libstdc++.sh, run "chmod +x check-libstdc++.sh", feel free to examine its contentents, and then run it; it's a check for libstdc++ (the standard C++ library runtime) consistency between BMP and all C++ libraries that BMP is linked against. The output should be, for example, like this:

[mderezynski@core ~]$ ./check-libstdc++.sh 

If the following output does not show EXACTLY the same library for EACH line,
then you have a problem.

BMP..........: libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x047cc000)
GLIBMM.......: libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x047cc000)
GTKMM........: libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x047cc000)
PANGOMM......: libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x047cc000)
Taglib.......: libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x047cc000)
MusicBrainz..: libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x047cc000)

If the listed paths to libstdc++ are not the same, then you DO have a problem. It usually means that the set of libraries were compiled with ABI[1] incompatible versions of gcc (e.g. gcc 3.x and gcc 4.x). You have to recompile all of those libraries again with the same compiler you're compiling BMPx with right now.

If you use Gentoo, it's likely a result of upgrading GCC incorrectly. Please read this for more information.

[edit] Still having problems?

If the previous script does not report an error and you still have a problem, you should try running check-deeper.sh. It searches deeper through the library dependencies and may reveal the problem.

If you see

user@hostname:~> ./check-deeper.sh
No libstdc++ problems detected

then your problem may lie elsewhere (it could still be a libstdc++ ABI issue). However, if you see something else, a problem was most certainly detected.

[1] ABI stands for Application Binary Interface.

[edit] Reproduce the bug

The first step is to reproduce the bug and try to find the shortest way to catch it. Please note exactly what you've done.

To get more details, run bmpx:

${PREFIX}/libexec/beep-media-player-2-bin --no-log

[edit] Generate backtrace

If this bug crashes the application, we need more information.

Firstly, be sure you have built bmpx with debug symbols and without optimization. If you're not sure, re-run

configure --enable-debug

Now, you have to run bmpx in the GNU Debugger (gdb):

gdb ${PREFIX}/libexec/beep-media-player-2-bin

where ${PREFIX} is the path you have installed bmpx. Than type

run --g-fatal-warnings

Follow the steps to reproduce the crash (as in, make it crash again), and once it crashes, type:


[edit] File a bug report / Report to us on IRC

  • Copy the "bt" output into a file or a copy website ([1], etc), and file it as a bug on our bug tracker, even if you aren't sure whether you're at fault or BMPx. It's better to have the bug report and then dismiss it, than to never have it and to never know about a potential bug.
  • Don't forget to add details about your platform: distro, gcc version, bmpx version, desktop environment or window manager
  • As a second measure you can always come to our IRC Channel (see menu to the left) and report it there.

[edit] Checkpoints

  • Always make sure you know how to reproduce the bug (as in, the steps involved to make it crash; they are ideally always the same, and may be very specific. You don't need to generalize, although it could potentially help uncover larger problems. What matters is that it is reproducible.) If you can't reproduce it reliably, please still report the crash.
  • Have a GDB backtrace available as explained above, if possible at all. If you don't know how to do this, please visit us on IRC in #bmp on irc.freenode.net, we'll help you get the backtrace and in turn you'll help us fix one more bug :)
Log in / create account
This page has been accessed 43,494 times.