[All] To build a better music player

Dylan Reilly dreilly at atariland.net
Thu Jan 15 19:17:20 CET 2009

One of my primary uses for the openmoko is a music player, and I have
spent some time trying to improve my listening experience with it. I
wanted to make a web page or such on the subject but I am highly
unmotivated to do so. In lieu of that, I am posting my findings here.

Audio Quality
IMO, good audio quality can be achieved with proper tweaking of the
alsa mixer. Some of the settings do nothing while others make the
openmoko sound like crap (e.g., bass boost). The state file [1] is
what I am using. One can utilize this by over writing the like-named
file in /usr/share/openmoko/scenerios . I even find the bass decent,
but not ideal. This is a known, and much discussed, hardware issue.

Audio Player
When I started my quest, there was no music player that met my needs.
The two that were close were pythm and mokoko. Mokoko has more
potential, I believe. However, it has (had?) issues resuming from a
suspend (crucial for me). That seems to imply an issue with gstreamer
- which it utilizes for playback - and that is something I do not want
to bother fixing. So, for the short term I turned to pythm and began
hacking away at it. The following is a list of changes I made to the
0.5.1 version:

1) Improved responsiveness, especially with regard to starting the
next song in a play list.
2) Lowered processing overhead during main update loop.
3) Tweaked the GUI. Most notably, the buttons are larger.
4) Read ID3 tag info at play list load time using python ID3 library.
5) Optionally (default true) disable suspend through enlightenment
while song is playing. Change the no_suspend option in the [mplayer]
section of /etc/pythm.conf.
6) Automatically pause playback when phone call received, resume on
hang-up. Only if running on FSO-based framework (not qtopia
7) Hook directly into alsa for setting/getting the volume.
8) Tweaked nice levels for more consistent playback.

Note that these changes apply only to the mplayer back-end and I have
no idea if the mpd back-end still works as I have no mpd server set
up. Furthermore, I have not tested this with ogg files, so item 4 from
the above list might break on those. Needless to say, this is a work
in progress.

To play with this, one should first install the regular pythm package
[2] and then extract [3]. Some of the tweaks include changing nice
levels for the GUI and mplayer which are done in /etc/pythm.conf and

There are still some issues that I may not be able to over come (i.e.,
audio "blip" on some song changes) but I believe they are inherent to
the use of mplayer as a back-end and the slowness of the openmoko
processor. Moving to gstreamer is probably a good idea for the future.

There is a good chance this won't work out of the box given that I
have not tested it on another device. Let me know and I will see what
I can do.

MP3 Playback
For better or for worse, my music is encoded as vbr mp3 files. Mplayer
normally does not handle vbr very well. So, I patched an compiled my
own version. You may find it at [4]. Without the patch, pythm can not
handle vbr. I also added mp3lib decoder support which I feel is
slightly better than the others. This may be enabled by default via
[5]. Be warned, that I know nothing about optimally compiling mplayer
and the binary is *huge*. Any input on that would be appreciated.

Headset Detection
If one is using a recent FSO frameworkd then this is now automatically
handled. If you are not, the either upgrade or search the mailing list
archives for extensive discussions on the matter.

1) Sound skips. This means there is another process that is running at
about the same priority as mplayer and taking more than ~15% of the
CPU. You can either address the problem with this rogue process, or
increase the priority of mplayer via pythm.conf.

2) Sound is only coming out of one speaker when using the stereo-out
jack. This means that the alsa mixer still has the amp for the
built-in speakers enabled. See "Headset Detection."

3) Audio quality is bad. Either #1 is happening or your alsa mixer
settings are bad. I find the audio quite good but with some
degradation at the high end.

That is all that comes to mind at the moment.

[1] http://atariland.net/~dreilly/openmoko/audio/stereoout.state
[2] http://wiki.openmoko.org/wiki/Pythm
[3] http://atariland.net/~dreilly/openmoko/audio/pythm-0.5.1-dmr-20090115.tar.gz
[4] http://atariland.net/~dreilly/openmoko/audio/mplayer.gz
[5] http://atariland.net/~dreilly/openmoko/audio/mplayer-conf.tar.gz

Dylan Maxwell Reilly

More information about the community mailing list