Category Archives: Music

Sound players: Adventures with Ampache, mpd, pulseaudio, Raspberry Pi, and Logitech Media Server

I finally decided it was about time to get my whole-house sound project off the ground. As an added bonus, I’d like to be able to stream music from my house to my Android phone.

Some Background

It was about 2.5 years ago that I last revisited the music-listening picture on Linux. I used Spotify for awhile, but the buggy nature of its support for local music eventually drove me up the wall. I have a large collection of music that will never be on Spotify (local choirs, for instance) and this was an important feature.

When Google Play Music added the feature of uploading your local collection, I used that; it let me stream music from my phone in my car (using the Bluetooh link to the car). I could also listen at home on a PC, or plug my phone into various devices to play. But that was a hassle, and didn’t let me have music throughout the house.

Google Play is reasonable for that, but it has a number of really glaring issues. One is that it often gets album artwork wrong; it doesn’t use the ID3 tags embedded in the files, but rather tries to “guess”. Another is that the “sync” is only “add”. Move files to another place in your collection, or re-rip them to FLAC and replace your old MP3s, and suddenly they’re in Google Play twice. It won’t ever see updated metadata, either — quite a hassle for someone that uses Musicbrainz and carefully curates metadata.

My Hardware

I already have an oldish PC set up as a entertainment box running MythTV. It is a diskless system (boots PAE over the network and has NFS root) and very quiet. It has video output to my TV, and audio output via S/PDIF to my receiver. It is one logical audio frontend.

My workstation in my office is another obvious place.

My kitchen has a radio with a line in jack, and I also have a small portable speaker with a line in jack to make the last two options. I also have a Raspberry Pi model B that I bought awhile ago and was looking for a purpose, so I thought – this should be cheap and easy, right? Well. Cheap, yes. Easy, not so much.

First attempt: Ampache

The Ampache project produces quite a nice piece of software. Ampache has matured significantly in the last 2.5 years, and the usability of its web-interface — with HTML5 and Flash players as options — is quite impressive. It is easily as usable as Google’s, though its learning curve is rather more steep. There are multiple Android apps for Ampache to stream remotely. And, while most are terribly buggy and broken, there is at least one that seems to work well.

Ampache can also output m3u/pls files for a standalone player. It does on-the-fly transcoding. There are some chinks in the armor, however. The set of codecs that are transcoded or passed through is a global setting, not a per-device setting. The bitrates are per-account, so you can’t easily have it transcode FLAC into 320Kbps mp3 for streaming on your LAN and 128Kbps MP3 for streaming to your phone. (There are some hacks involving IP address ranges and multiple accounts, but they are poorly documented and cumbersome.)

Ampache also has a feature called “localplay” in which it drives local players instead of remote ones. I tried to use this in combination with mpd to drive music to the whole house. Ampache’s mpd interface is a bit odd; it actually loads things up into mpd’s queue. Sadly it shares the same global configs as the rest. Even though mpd is perfectly capable of handling FLAC audio, the Ampache web player isn’t, so you have to either make it transcode mp3 for everything or forego the web player (or use a second account that has “transcode everything” set). Frustratingly, not one of the Android clients for Ampache is even remotely compatible with Localplay, and some will fail in surprising ways if you have been using Localplay on the web client.

So let’s see how this mpd thing worked out.

Ampache with mpd for whole-house audio

The primary method here is to use mpd’s pulseaudio driver. I configured it like so:


audio_output {
type "pulse"
name "MPD stream"
#server "remote_server" # optional
sink "rtp" # optional
mixer_type "software"
}

Then in /etc/pulse/system.pa:


load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 sink_properties="device.description='RTP Multicast Sink'"
load-module module-rtp-send source=rtp.monitor

This tells Pulse to use multicast streaming to the LAN for the audio packets. Pulse is supposed to have latency synchronization to achieve perfect audio everywhere. In practice, this works somewhat poorly. Plus I have to install pulse everywhere, which inserts its tentacles way too deeply into the ALSA stack for my taste. (alsamixer suddenly turns useless by default, for instance.)

But I gave it a try. After much fiddling — Pulse is rather poorly documented and the interactions of configuration tools with it even more so — I found a working configuration. On my MythTV box, I added:


load-module module-rtp-recv
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;x.x.x.x

The real annoyance was getting it to set the output through the S/PDIF digital port. Finally I figured out the magic potion:


set-card-profile 0 output:iec958-stereo+input:analog-stereo

This worked reasonably well. The Raspberry Pi was a much bigger challenge, however.

I put Raspbian on it easily enough, and installed Pulse. But apparently it is well-known in the Pulse community that Pulse’s RTP does not work well with wifi. Multicast itself works poorly with wifi in general, and Pulse won’t do unicast RTP. However, Pulse assumes very low latency and just won’t work well with wifi at all.

Morever, pulseaudio on the rpi is something of a difficult beast to tame. It has crackling audio, etc. I eventually got it working decently with:

daemon.conf:


realtime-scheduling = yes
realtime-priority = 5
resample-method = src-sinc-fastest
default-sample-rate = 44100
default-fragments = 4
default-fragment-size-msec=20

and in system.pa, commented out the module-udev-detect and module-detect, and added:


load-module module-alsa-card device_id=0 tsched=0 fragments=10 fragment_size=640 tsched_buffer_size=4194384 tsched_buffer_watermark=262144

plus the rtp-recv and tcp protocol lines as before. This got it working with decent quality, but it was always out of sync by at least a few tenths of a second, if not a whole second, with the other rooms.

Brief diversion: mplayer

Many players besides pulseaudio can play the RTP streams that pulseaudio generates. mplayer, for instance, can. I found this worked on the Raspberry Pi:


mplayer -really-quiet -cache 64 -cache-min 95 -demuxer rawaudio -rawaudio format=0x20776172 rtp://224.0.0.56:46510

But this produced even worse sync. It became clear that Ampache was not going to be the right solution.

Logitech Media Server

I have looked at this a few times over the years, but I’ve somehow skipped it. But I looked at it again now. It is an open source (GPL) server, and was originally designed to work with Logitech hardware. There are now all sorts of software clients out there. There is a helpful wiki about it, although Logitech has rebranded the thing so many times, it’s not even consistent internally on what the heck it’s called (is it LMS? or Squeezebox Server? or Slimserver? The answer is: yes.)

LMS does no web-based streaming. At all. But I thought I’d give it a try. Installation is a little… weird (its .deb packages up binary perl modules for things that are already in Debian, for half a dozen architectures and many Perl versions.) I had some odd issues but eventually it worked. It scanned my media collection. I installed squeezelite on my workstation as my first player, and things worked reasonably well out of the box.

I proceeded to install squeezelite on the Raspberry Pi and MythTV server (where I had to compile libsoxr for wheezy, due to an obscure error I couldn’t find the cause of until I used strace). Log in to the LMS web interface, tell it to enable synchronization, and bam! Perfect synchronization! Incredible.

But I ran into two issues: one was that it used a lot of CPU even on my workstation (50% or more, even when idle). Strangely, it used far less CPU on the pi than did pulseaudio. Secondly, I’d get annoying clicks from it from time to time. Some debugging and investigation revealed that they were both somewhat related; it was getting out of sync with the pi and correcting. Initially I assumed this to be an issue with the pi, but tracked it down to something else. I told it to upsample to 48kHz and this made the problem go away. My command on PC hardware is:


squeezelite -a 200:10 -o dmix -u hLX -z

And on the Raspberry Pi:


squeezelite -a 800:10:16:0 -n kitchen -z

It is working perfectly now.

LMS even has an Android remote control app that can control all devices together, queue up playlists, etc. Very slick.

The Raspberry Pi

The Raspberry Pi, even the model B+, apparently has notoriously bad audio output. I noticed this first as very low volume on the output. I found a $11 USB DAC on Amazon that seems to do the trick, so we will see. I am also using the $10 Edimax USB Wifi and it seems to work well.

Other Options

The big-name other option here is Sonos. They have perfect sync audio already working. But they’re pricy, closed, and proprietary; you have to buy Sonos speakers, transmitters, etc. for the entire house. Their receivers start at $200, and it’s at least $350 to integrate an existing stereo into the system. I’d be shelling out over $1000 to use Sonos for this setup. As it is, I’ve bought less than $100 of equipment (a second Pi and its accessories) and getting output that, while no doubt not quite as pristine, it still quite nice and acceptable. Quite nice.

Update: LMS with Apache

It turns out that Logitech Media Server can automatically save created playlists to a spot where Ampache can find them. So an Ampache streaming player can be used to access the same collection LMS uses, with full features. Nice!

Glockenklang, Forever

Jacob (and Oliver too, somewhat) has taken quite the interest in Christmas music this year. Perhaps it’s singing in the choir at school, or perhaps it’s just him getting older, but in any case, Christmas music fascinates him.

And no song more than Jingle Bells. I have recordings of it by several artists in different styles, and he has his favorites and often wants to hear them – again and again.

The other night at supper, he said, “Dad, can you sing Jingle Bells in German?” Kind of a random question. I normally try to keep books and devices of all sorts away from the table, but my son had just asked me to sing. In German. I don’t believe that had ever happened before, so I wasn’t going to say no! I got my tablet, pulled up Google, and found some German lyrics. Not exactly a translation, but it fit the tune, so that’s what counts.

So I started singing, and when I got to the chorus, and sang Oh, Glockenklang, Glockenklang both boys bust up laughing. They thought Glockenklang was a hilarious word, and loved to hear it. Oliver requests I “sing Glockenklang” every so often now. He has this eager anticipation when he does it, as if he knows I’m going to be hilarious — so much so that he almost starts laughing before I even say a word.

Then yesterday at breakfast, Jacob requested more German songs. I finally got a couple of hymn books (one of which, Gesangbuch mit Noten, really is a German songbook). I sang some songs in German for the boys, while they enjoyed their blueberry crepes. Sadly Stille Nacht and O du fröhliche did not prove as hilarious as Glockenklang, but they got impatient as I looked through the idnex between each song, saying “Dad, just sing more German! Don’t look at those pages!” So I guess it was a hit.

I’m not sure where this sudden fascination with German music came from, but it appears to be leaving me hungry.

While driving around, Oliver requested I sing Glockenklang in the car. I said yes, despite not remembering even one German word to that song except for, well, Glockenklang. So I just filled in with some random German words I do know. Fortunately, they didn’t seem to have memorized the rest of it either.

The other day, we went to the annual Christmas concert at the local high school. It was perfect for the boys – various styles of music, an interesting old auditorium, nobody was going to care if they weren’t perfectly quiet, and the price was right, too.

The band played first, and both boys sat there, paying great attention, soaking it all in. They loved the cymbal crashes and Jacob seemed to dream of playing the chimes and bells. At one point, I whispered to Jacob that I could feel the timpani on the wood floor in the auditorium, and he tried it, and made his “Hmm, I just learned something interesting!” reaction.

As is tradition, the concert concluded with singing the Hallelujah Chorus – and anyone in the audience that wants to sing is invited on stage to join the choir.

I remember being in high school for that concert, and after practicing it in school, the great fun of being joined by many powerful voices from the community all around me on the risers. So this time, while my parents stayed with the boys, I was one of the many that went up to join the choir. It was no less thrilling all these years later. Ending with “Forever and ever, Hallelujah, Hallelujah. Hallelujah!”, and feeling it, right then, put a huge smile on my face.

Difficult Times & Hope

This past month has been the most difficult in my life – and that of my family as well. I’m not going to go into it for the whole Internet, but any well wishes, happy thoughts, prayers, whatever you want to send our way, whether we know about it or not, would certainly be welcome. And, of course, the reason I’m not very active online right now is that I’m focusing on family, work, and other pressing matters.

I have had some measure of comfort from hearing from others that have had pain in their lives. It is good to know I’m not alone, good to have people to talk and share with. And it is good to find some way to have hope in the midst of difficulty and uncertainty.

I sing with the Kansas Mennonite Men’s Chorus, and when listening to one of our recordings recently, was struck by these words in a whole new way. Let music never die in me is a powerful message.

I dreamed a dream, a silent dream,
of a land not far away.
Where no bird sang,
no steeples rang
and teardrops fell like rain.

I dreamed a dream.
No alleluia, not one hosanna,
No song of love, no lullaby.

And no choir sang to change the world.
No pipers played, no dancers twirled.
I dreamed a dream, a silent dream.
Silent.
Silent.

Awake! Awake!
Awake, my soul and sing!
The time for praise has come.
The silence of the night has passed;
a new day has begun.
Let music never die in me!
Forever let my spirit sing!
Wherever emptiness is found,
Let there be joy and glorious sound.

Let music never die in me!
Forever let my spirit sing!

Let all our voices join as one
to praise the giver of the song!

Awake! Awake!
Let music live!

The Awakening, Joseph M. Martin (excerpts)

See a performance here.

Even when hope is dim, or the music is playing only softly, it’s not dead. I hear it when an 85-year-old person in church, comes up to me with tears in her eyes and gives me a big, silent hug. I feel the music when when I can share about things with people, when I sing, when the beautiful Kansas sunset peeks out, when I share a smile or laugh with someone, and when I see the delight and happiness of children.

Let music live!

Decisions on Listening to Music

A couple of days ago, I commented about my thoughts on finding a better way to listen to music, and asked for suggestions. I’ve checked out the avenues suggested, and here are my thoughts so far.

Streaming service: Spotify

Of the streaming service offerings, Spotify seems the most compelling. It has both Linux and Android clients. The Linux client is unofficial and a bit buggy, but serviceable. The service is fairly nice, and the serendipity of listening to “radio” of tracks like any track or artist I may pick is an incredible feature. It will mean a different mindset; rather than carefully choosing what I buy, I have a vast catalog at my fingertips. I’d have to give up some control, but might be better off for it.

Spotify can play local files, but sadly lacks support for FLAC that most of my collection is in. A little work with the shell, and I had a quick multi-core FLAC to MP3 conversion done. It can also identify local files and match them up with its catalog, but it does a somewhat poor job of it, despite the fact that my files are tagged by Musicbrainz. There are also a fair number of albums in my collection (from Magnatune and from local artists) that aren’t in Spotify’s catalog and probably never will be. I may wind up using git-annex or something like it to sync them between PCs.

Surprisingly, it doesn’t have any kind of web-based player available. It has a lot of features, but many of them are under-documented.

Subsonic / Supersonic

The idea of being able to stream music anywhere certainly has appeal, and the idea of streaming that music from my own machine — my own collection — is quite the appealing one. Subsonic seems to be the standard that people recommend for this. It has a web-based player that works well, as well as mobile clients for various platforms. The Android mobile client is particularly well-regarded and is probably the best one here, aside from Spotify. The playlists work well, as expected, and generally it has the appearance of a well-rounded system. There is a lot of flexibility in bitrates; maximum bitrates can be set per-user and per-client. It, of course, transcodes on the fly.

My chief gripe about Subsonic is that it has no true album/artist/genre browser. Its main browser is mostly a filesystem browser. I have used clients that show album/artist/genre panes or sortable lists, based on tags, for so long that my filesystem organization is rather different – centered around bitrate of rip, origin, etc. It is not very easy to navigate my collection in that way. The search feature can search artist and album, and this can partially make up for it. But there is simply no way to see a list of all artists in the collection.

The server is written in Java, and takes up 362MB at startup. That’s, I guess, decent for a Java server, but doesn’t make me pleased as I’d be running it on lower-end hardware.

Supersonic is a git-maintained actively synced subsonic fork which removes the license cost (the source is GPL3 anyhow so that wasn’t a big deal).

Ampache

Often mentioned in the same breath as Subsonic, this is yet another frequent suggestion for streaming your own collection. Its primary player is web-based, like Subsonic. It has full artist/genre browsers, and adds tag cloud and various other options as well – by default, it loaded the tag cloud with my genre tags, which was a nice touch. The search feature is a little less robust, as it simply searches anywhere and returns a list of all matching tracks, rather than listing matching albums and artists before going into the list of all tracks. But that is somewhat of a minor nit.

Ampache’s web-based player, liks Subsonic’s, uses Flash, but the implementation is really quite awkward. You can’t simply click a play button and have playback start. Rather, you must add things to the “playlist” (queue), a frame on the web interface. Then, you must click play in THAT frame, which launches a new window for the player and transfers its contents to it. You thus have two separate running playlists. And if you think you can just add to the playlist of the player window, think again; you can only replace it. It is simply not possible to add a track to the end of that list without losing your existing place. This makes the usefulness of the web-based player rather, well, low.

Playlist functionality in Ampache is rather odd. You can have playlists, but if you want to add a track to a saved playlist, first you have to clear you current playlist, then add the track to it, then save it to the existing playlist.

Frontends for Ampache exist in banshee and in amarok. Banshee’s is broken, and simply silently fails to do anything. Unless you look in the console, in which case you’ll see a .NET backtrace. Banshee has had these mysterious errors for me for years. The Amarok plugin is so basic that you can browse by artist but not by album, and is almost unusable. There is also a rhythmbox plugin in Debian, but it is apparently for an old version of Rhythmbox and no longer works.

The best frontend is a dedicated Ampache frontend called Viridian. It has a nice interface, provides features such as taskbar integration, and generally works pretty well. The only thing it’s bad at is playlists, and here it’s even worse than the web interface. It doesn’t support modifying the server-side playlists at all. And accessing one is an annoying “load playlist” operation, that replaces your current play queue (also called the “playlist”) with its contents by default.

Several Android clients exist for Ampache, though it seems only one has seen any updates since 2010.

mpd

This is an interesting program, as it is designed more to provide multiple points of control for a single player than it is to stream a single collection to multiple devices. Nevertheless, I tested its HTTP and icecast stream modules. (It can also stream with PulseAudio, but PulseAudio causes devious breakage on my workstation, so I refuse to bother.) This could be made to work reasonably well on my LAN using the gmpc client. There are several Android clients as well, though none of them integrate as well as Subsonic or Spotify. Most seem focused on controlling a remote player. The ones that do stream do so with some hiccups, and don’t integrate controls with the lock screen.

gmpc is a reasonable control program and, combined with mplayer, makes a decent player. It can browse the database every way I’d want to. It doesn’t let me right-click on tracks to add them to playlists, but I can use copy/paste to do so, or add them to the play queue and from there to a playlist. It’s annoying, but not completely unworkable.

But here’s the real concern. mpd has no provision whatsoever for any sort of encryption such as SSL. If I want to be listening to my music collection from on the road, I don’t really wish to open up a streaming music service for the entire Internet. Nor do I really want to mess with SSH tunnels and the like, which are cumbersome on Android (and can be in general). This is pretty much a fatal flaw to me.

Google Music

An interesting service, but ultimately one I don’t see the point for in my situation – where I already have my music on a PC that is always on. It would probably accommodate my entire collection free, but how many weeks would it take me to get it there? And how would it stay in sync? It simply doesn’t offer me any compelling advantage over streaming direct from my PC, so I don’t see much need to bother with it.

Others

I briefly considered Streeme (poor mobile support), Audiogalaxy (no Linux support), Jinzora (appears dead), and Sockso (no mobile support). I also briefly considered other streaming services such as Pandora, Slacker, rdio, etc., but based on reviews didn’t think that they were worth bothering with.

Conclusions

I’m left mainly considering Spotify and Subsonic. For right now, I’m going to try Spotify and see where that leads me, but may wind up getting back to Subsonic if I can’t find tracks I want with Spotify.

How to listen to music?

This seems like a simple question: how do you listen to music?

But in a way, I think I’ve fallen behind the times.

I’ve enjoyed listening to digital music for years, since well before MP3 even existed (MIDI files could be comfortably downloaded over dialup; some of you may even remember MOD files).

Anyhow, a few years ago, I digitized my entire CD collection, ripping it to FLAC and encoding to high-bitrate MP3 for storage on my 160GB iPod. Since, I’ve purchased some music from DRM-free MP3 retailers, and even FLAC files from Magnatune, but at this point I basically say that I have enough music. I have only rarely bought anything new in the last couple of years. I have used Musicbrainz Picard to enforce consistent tagging across almost my entire collection.

I am usually in front of a Linux machine. I run mt-daapd on my fileserver, so I can stream music from it to any other machine in the house. However, this has a lot of drawbacks. It is generally impossible to create or modify persistent playlists with this protocol. I can’t modify metadata. I can’t assign ratings. Though perhaps I don’t need to.

There are a lot of online services I could think of: Pandora, Spotify, Rdio, Slacker. Plus, of course, the upload your music to the cloud services such as Google and Amazon. Have people tried these? I’m hesitant to use a service where I pay a monthly fee, unless I wind up owning the music in a DRM-free fashion. And I’m a little nervous about the privacy implications of uploading a vast amount of music to the cloud.

There are some items in my collection that I am certain are not available on any of those others, but for the most part I’m willing to take what is out there if it meets my tastes. My tastes, by the way, typically run to classical and opera but also can go towards middle eastern or certain new age music (though I’m very picky about that, since I don’t care for most new age stuff I hear.) But these are huge categories; sometimes I’d like to hear some load and noisy classical (say, Beethoven’s Ninth conclusion, some Wagner, Verdi arias, etc.) And other times, something more contemplative (a Mozert concerto) or even quiet (a nice sonata) meet my mood. I have playlists for these on my iPod Classic – a bit of a problem, since I don’t use that device much anymore except in the car, and it takes a LOT of time to categorize things into these playlists. (An opera or a symphony could have parts in various styles and various levels of energy, for instance.) I keep a small manually-managed subset on my Android phone, which works fine. A recommendation engine for things like this could be useful, if it works well.

My requirements, basically: I want something that will play the same music on my Linux machines. I want to be able to have playlists kept in sync across my machines. And I don’t want a monthly fee. Ideally, the software will work on Android as well, and provide similar features there. Anything that requires Windows is a non-starter. I’ve considered NFS mounts, but that’s a bit annoying when the laptop disconnects from the network or when it’s not at home.

What are your thoughts? Ideas?

An Update on the Music Player Quest

I’ve written a few times (parts 1, 2, 3) about my annoyance at music players. I’d come down to two finalists to consider: Rhythmbox and Banshee. I’ve used both for awhile now, and as of today, am also trying Songbird (after finally managing to make it run; see part 3 above).

In addition to my previous observations, then, I’ll add:

Rhythmbox

Two problems exist in the current version. The first is that playlists aren’t sortable, which is annoying for those of us that use them as an organization tool. I put a patch in bug 327042, but the authors say they won’t apply it, and there has been no recent activity from anyone working to do something better. Highly annoying, but I’m running my own patched copy anyhow.

More annoying is that it doesn’t let you modify metadata of tracks on the iPod. Perhaps worse, its GUI lets you remove tracks from iPod playlists, but this change is not saved back to the iPod (bug 586964). Confusingly, adding tracks to playlists does get saved. There has been no action on that bug in the 1.5 weeks since I’ve reported it.

I was able to supply the Rhythmbox developers with the needed information to resolve the issue of moving files to .Trash-1000 instead of deleting them on the iPod (586649). However, they refuse to fix the larger problem of leaving these directories on the filesystem; a great annoyance for people using KDE or no desktop environment at all.

Banshee

On the surface, its iPod support looks even better than Rhythmbox. Yet it silently ignores some (not all) metadata changes. You can modify a rating, a compilation artist, etc. and it will look like it changed. But close Banshee and open it up again and you see it wasn’t. (Bugs 580632, 389550) They’ve done some troubleshooting with me, but there hasn’t been activity there since June 30.

Songbird

Aside from my story today griping that it doesn’t even start by default on Linux, I haven’t written about this one before. Its philosophy is somewhat similar to Thunderbird: ship with a very minimalistic set of features, and support multiple addons.

I found that its iPod support works the best of any of these I’ve mentioned, at least for manually-managed iPods. It has a feature to sync your iPod, but has no documentation whatsoever on what that does. It also doesn’t document what it will do with the FLACs I’ve downloaded from Magnatune when it puts them on the iPod. The only references I’ve seen to transcoding state that it will be present in 1.2.0 (which I have), and that it won’t be present until August. Not very helpful.

With a few addons, it makes a quite nice player, with quite good iPod support. The interface, however, has a few quirks. First off, it’s really sluggish, even on very fast hardware. Secondly, if you flip from playlist to playlist, or even breathe on it the wrong way, it will move you back to the top of the playlist you’re on, leaving you to manually find the track that’s playing again. It has no “jump to currently-playing track” feature like other players do. Its tray icon (which you must get an addon for) has a basic menu of play, pause, next, but no ability to set ratings from there. Also, sometimes setting ratings don’t appear to work from the UI, but might have actually been saved anyhow.

Overall, though, Songbird looks like my best bet for the moment. I’ll keep using it and see what I think.

The other option is gtkpod+audacious. I’d miss the integration of player with browser, and gtkpod’s extremely sluggish interface makes even Songbird look like a Formula 1 car in comparison. But its iPod support works well (though its attempts to sync with the filesystem are undocumented and cause issues more than once).

Songbird: How To Make Great Software Unpopular

As part of my ongoing quest for working media players, I’ve more than once tried Songbird. But it never wanted to work in Linux, always crashing before it even fired up the GUI with errors like this:

(songbird-bin:17595): libgnomevfs-WARNING **: Cannot load module `/usr/lib/gnome-vfs-2.0/modules/libmapping.so' (/usr/lib/gnome-vfs-2.0/modules/libmapping.so: cannot open shared object file: No such file or directory)
././songbird-bin: symbol lookup error: /usr/lib/python2.5/site-packages/gst-0.10/gst/_gst.so: undefined symbol: gst_xml_get_type
Could not initialize GStreamer: Error re-scanning registry , child terminated by signal

Googling reveals dozens of threads about this among Debian, Ubuntu, Fedora… well, ALL Linux users. Some people reported success removing bits of GStreamer from their systems, but that didn’t work for me.

I noticed that the Linux binary distribution of Songbird contains a lib/ directory, which has, among other things, full copies of many GStreamer libraries, libvorbis, libFLAC, libogg, libtheoradec/enc, and more. On a lark, I ran rm lib/libgst*. And that fixed Songbird.

Now, that gets me to the point of why Songbird isn’t popular on Linux, a fact which appears to mystify the Songbird developers from the posts I’ve read.

And the reason is: Songbird doesn’t work on Linux out of the box. More to the point, Songbird tries to distribute itself on Linux as if the user is running on Windows.

You do not install a local gstreamer with each app on Linux; you use the system’s. You don’t try to use a local copy of everything; you use the systems. Even songbird plugins package their own .so of files I already have installed system-wide. The Linux shared library system can handle it, I promise.

And even worse, the fact that they are trying to use local copies of things instead of system ones are making it very difficult for distributions to package up Songbird. Distributions — the ones that care about quality, anyhow — want to do things The Right Way, which means only one copy of GStreamer on the system. Songbird doesn’t want to get along well with this. None of Debian, Ubuntu, or Fedora have Songbird packages in their repositories, though third-party packages of greatly varying quality exist for each. Read their respective bug tracking systems and you’ll see that it has to do with Songbird wanting local versions of system-wide libraries.

So, Songbird folks: If you want to make a cross-platform app, please stop treating Linux as if its library system is as broken as Windows. It wasn’t until you got here.

Aside from that, it looks like the best music player I’ve tried yet, despite its sluggish interface.

Update: The original version of this article incorrectly stated that Songbird was a Mozilla project.

Tagging music… No, not like that

I’m thinking it would be great to be able to assign arbitrary tags to my music, like I do to my photos. For instance, I might tag the finale to Beethoven’s Ninth Symphony like this:

symphony beethoven loud choir german

I can’t figure out how to Google for this sort of feature because, well, the word “tag” is already taken for something else in the context of music.

I believe Amarok offers it, a bit, but Amarok has too many other serious flaws for me to be able to consider it.

Any ideas?

Buying a SoundBridge Radio

A day or two ago, I asked for suggestions for a tabletop MP3 player. I got lots of good ideas — thanks! The two most common were the Roku SoundBridge Radio and the Nokia N800.

I’ve ordered the SoundBridgeRadio. I spent some time looking over its website, and it really impressed me for several reasons:

  • It’s one all-in-one device with Wifi, FM and AM tuners, speakers, even an SD card slot and atomic clock shortwave receiver.
  • It has explicit support for Linux. Roku actually sponsors the Firefly Media Server (package mt-daapd in Debian), which will serve up music to this and other devices. They also can stream from SlimServer. In general, it supports any UPnP AV server.
  • They publish specs for just about everything: the TCP-based Roku Control Protocol that lets you control the SoundBridge remotely; user-editable localization files; even detailed IR specs for the remote control. The only other thing I could wish for would be the firmware on the device itself being Free.
  • Their manual has a “Hey geeks, read this!” section describing telnetting to a port. People are doing some fun stuff with it.

The N800 is also a good suggestion. It has an FM tuner built-in, and of course is capable of streaming media files. I have an N810, and I just don’t think a device this size would be capable of playing loudly enough for a kitchen. So I’d have to get external speakers, and then we’re into a mess of wires and stuff — making it less portable to other rooms in the house.

One person also suggested a Chumby. It sounds like an awesome gadget, but I couldn’t find anything on their site that indicated that it could stream music from my own server. From the Internet or an iPod, yes, but not from my server.

Thanks to everyone for your ideas. I’ll post a review of the SoundBridge Radio when I get it.

Flowers, Music, and Grandparents

Flowers

I’ve written a lot lately about my Grandma Klassen, who passed away this week. But I’m going to start this post about my Grandma Goerzen.

She died when I was just an infant. I never knew her, but as the years pass, it seems that I remember her better and better.

After we moved out to the farm where she and Grandpa Goerzen lived for decades, we noticed some flowers she had planted 30 years ago were still coming up, having withstood hail, hot summers, frost, construction equipment, and neglect all that time. Terah said, “It’s like your grandma left us a housewarming gift.”

Some of these flowers had never bloomed. Until this week.

One bloomed for the first time the day Grandma Klassen died.

A second bloom appeared the day of her funeral.

Music #1

My jr. high and high school band teacher loves music (and old engines, but that’s another story). You couldn’t sign up for “band” at my high school; you’d sign up for the class called LIFE. To him, music and life are indistinguishable. He says that anybody can speak to somebody, but music is the best way to speak to the heart.

My Grandpa Klassen died when I was 11. Grandma Klassen, before her health declined, loved to tell me the story of the music at his funeral. At his funeral, my mom and I played a piano duet of Nearer, My God to Thee which we had already learned for a different event. When we were done, Rev. Epp went to the pulpit and said something along the lines of, “If the music in heaven is as good as that, it’ll be a great place indeed.”

I was just 11, and though music did speak to me at that age already, I don’t think I understood how it moved people, such as my grandma, until many years later.

Music #2

Grandma Klassen loved music, too, and that’s reflected in each of her children — all of them play trumpet, for instance. So it’s no surprise that there was a lot of music this week.

She died as two of her children were singing hymns to her at her room in the nursing home.

Two of her grandchildren played trumpet for her at her burial.

And my brother and his wife played trumpet and piano at her funeral.

It was all beautiful, and like my band teacher said, it spoke to my heart.

Music #3

I knew about gradma’s love of music for quite awhile. When she was in better health, I took her to concerts sometimes. One of her favorite hymns was Joyful, Joyful, but she hadn’t known it was based on Beethoven’s 9th Symphony. I learned that the Wichita Symphony Orchestra was performing the 9th, and took her to the performance. She loved it, and I seem to recall that she kept talking about it for a few years afterwards. It certainly didn’t hurt that the singing on the 4th movement was in German. I burned her a “new-fangled” CD of it, which I frequently saw in or near her CD player.

The Kansas Mennonite Men’s Chorus is an all-volunteer choir with about 300 members. They give a couple of concerts a year, and occasionally tour throughout North America and Europe. Their motto is “we sing that others may live” because 100% of money collected at their concerts goes directly to charity.

Attending one of their concerts is a powerful experience not easily forgotten. I think the only time I’ve heard a choir come close to being as amazing as that was when I had the opportunity to attend a Robert Shaw concert a few years ago.

I went with grandma to one of the Kansas Mennonite Men’s Chorus performances a few years ago. As you might expect, she loved it — I think she called it “powerfully good.”

This year, I finally joined the choir. I still remember that first practice. We “warmed up” by singing Holy God, We Praise Thy Name — a song that has opened every KMMC concert for years. These people hadn’t sung together for almost a year, and there were plenty of new people like me there too. But it only took a few bars of singing before I realized just what it was I had joined. The choir started out with the quietest, but most powerful singing you can imagine: “Holy God, we praise thy name.” By the time we got to the end of the page, the building was ringing from 300 men singing “Infinite thy vast domain, everlasting is thy reign!” at the top of their voices, in perfect harmony. We got to the end. The director said. . . “Wow.”

I don’t think a first practice ever spoke to my heart before that day.

Music #4

Nearly 20 years ago, Grandma Klassen bought me a new bible. After she gave it to me, I asked her what some of her favorite passages were. She took me straight to the blessing in Numbers 6, and made sure I underlined it and bookmarked it. It goes like this:

“The Lord bless you,
The Lord keep you,
Make his face to shine upon you and be gracious unto you,
The Lord life up his countenance upon you and give you peace.”

My uncle had read this blessing to her the last time he talked to her. And the KMMC for years has ended their concerts with a beautiful benediction based on this passage. Grandma heard it at the concert I attended with her. It has been a favorite of my mom for years, too.

So I had the thought: we really ought to sing it as a benediction at her funeral. It was hard to find the right mix of people on short notice, but we wound up with me singing baritone, my brother singing 2nd tenor (we both normally sing bass), and his wife both playing piano and singing 1st tenor, and relying on the piano to fill in the bass part.

We had a little chance to practice before the funeral, but not a lot. The two of them have done a lot musically, but I haven’t nearly as much, so I got in some extra practice at home, too.

When it came time to sing, it was an emotional moment for sure — more than a bit hard to focus, knowing the history and meaning of these words. When we got to “and give you peace”, and moved into the chorus of “amen” that finishes the song, I almost broke down right there, but didn’t quite.

We didn’t give a perfect performance, for sure, on such short notice. (And they had me singing with them, so we wouldn’t have been perfect even with plenty of notice!)

But it didn’t have to be perfect. After we ended the last, quiet “amen”, I think I heard about a half-dozen noses blowing all at once. My band teacher was right about music speaking to the heart.

Later, during lunch, my aunt said to me, “Wow, John, I’ve never heard you sing before!” “That’s right, and this may be the last time you hear me sing, too! I don’t normally sing in a small group like this.”

A few minutes later, my uncle that gave the message came over and talked to the three of us. “John, today you three brainwashed me.” “Oh?” “Yes. For years, I thought that there was no music as beautiful as the trumpet. After hearing you three sing, I have to reconsider.”

And so my band teacher was also right: music is life. My grandma was a person that could hardly speak without touching the heart. That beautiful melody of her life didn’t stop when she died Tuesday afternoon. I’ve been hearing it all week.