SongBird is a great media-player based on the same platform as Firefox (the web-browser). It can sync your music-library to your Nexus One (or other Android device) when you connect it to your computer if you mount the phone’s SD card as a storage device (there’s a notification that pops up on the phone when you connect it asking if you’d like to).
Using SongBird as a sync-tool instead of just moving the files manually is a much nicer user-experience. I highly recommend it This is great and all, but by default SongBird cannot know exactly what kind of device is attached (it sees that it’s a storage-device), and thus cannot know what kinds of files it should sync to the device. Some devices support some files, others not, and syncing the wrong kind of file would in the best-case lead to the device not being able to play it, worst case – armageddon.
So SongBird, being clever, can transcode files to other formats (e.g. .ogg vorbis, which is an OpenSource, high-quality, lossy audio-format like .mp3 but nicer in every way). By default, however, it assumes the device-of-unknown-heritage can play .mp3 (since everyone and her grandmother can) and nothing else. This leads to problems if you want to play your .ogg files on your android device.
If your device has a special file in the root of it’s filesystem called SBSettings.xml SongBird can read this and get information about what kinds of formats it should allow unto the device. My Nexus One came with one already defined, and that’s great! What’s not so great is what the file contained:
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://songbirdnest.com/devicesettings"> <name xmlns="http://songbirdnest.com/device/1.0" value="Nexus One"/> </settings>
Now, if you know anything about xml you know that you can’t say a lot in 3 lines. In fact this little snippet just declares the name of the device to be Nexus One, that’s it.
With this meager information SongBird will assume it’s a dumb device only capable of playing .mp3 -files, and won’t transfer your .ogg files. It could transcode them to .mp3, but the .mp3 format is not an open standard, and SongBird can’t include a transcoder capable of spitting out .mp3 without paying a license for that. Paying money to distribute free software is a poor business decision, so they don’t.
What you have to do is edit the SBSettings.xml file to show SongBird that this isn’t a dumb device, but a clever one with .ogg playback facilities. The nice thing is that the .ogg format is free, and if you have any other media that your phone can’t play (.wmv / .flac / etc.) there’s a very good chance SongBird can transcode to the tasty .ogg format as it syncs your library. In addition to this you really should include in the SBSettings.xml that your phone can indeed play those old-style .mp3 -files as well. It’d be silly to convert them all to .ogg, wouldn’t it? No, but it’d be time-consuming.
So, go ahead, edit your SBSettings.xml to look like this (for Nexus One, and probably many other Android devices):
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://songbirdnest.com/devicesettings"> <name xmlns="http://songbirdnest.com/device/1.0" value="Nexus One"/> <devicecapslist xmlns="http://songbirdnest.com/devicecaps/1.0"> <!-- Generic devices. --> <devicecaps> <audio> <format mime="application/ogg" container="ogg" codec="vorbis"> <samplerates> <value>22050</value> <value>44100</value> </samplerates> <channels> <range min="1" max="2" step="1"/> </channels> </format> <format mime="audio/mpeg" container="id3" codec="mp3"> <samplerates> <value>22050</value> <value>44100</value> </samplerates> <channels> <range min="1" max="2" step="1"/> </channels> </format> </audio> </devicecaps> </devicecapslist> </settings>
This tells SongBird what it needs to know. Beware that there are other examples out there on the internet including bitrates as well as samplerates and channels. You don’t want this, as many of your files won’t be in those particular bit-rates, and they’ll be converted (at great time-cost) on sync.
I hope this helps some people out there!