On my way back from Canada a few weeks ago, I picked up a SanDisk Sansa Fuze media player. Overall, I like it. It supports Vorbis and FLAC audio out of the box, has a decent amount of on board storage (8GB) and can be expanded with a MicroSDHC card. It does use a proprietary dock connector for data transfer and charging, but that’s about all I don’t like about it. The choice of accessories for this connector is underwhelming, so a standard mini-USB connector would have been preferable since I wouldn’t need as many cables.
The first thing I tried was to copy some music to the device using Rhythmbox. This appeared to work, but took longer than expected. When I tried to play the music, it was listed as having an unknown artist and album name. Looking at the player’s filesystem, the reason for this was obvious: Rhythmbox had transcoded the music to MP3 and lost the tags. Copying the ogg files directly worked a lot better: it was quicker and preserved the metadata.
Of course, getting Rhythmbox to do the right thing would be preferable to telling people not to use it. Rhythmbox depends on information about the device provided by HAL, so I had a look at the relevant FDI files. There was one section for Sansa Clip and Fuze players which didn’t list Vorbis support, and another section for “Sansa Clip version II”. The second section was a much better match for the capabilities of my device. As all Clip and Fuze devices support the extra formats when running the latest firmware, I merged the two sections (hal bug 20616, ubuntu bug 345249). With the updated FDI file in place, copying music with Rhythmbox worked as expected.
The one downside to this change is that if you have a device with old firmware, Rhythmbox will no longer transcode music to a format the device can play. There doesn’t seem to be any obvious way to tell if a device has a new enough firmware via USB IDs or similar, so I’m not sure how to handle it automatically. That said, it is pretty easy to upgrade the firmware following the instructions from their forum, so it is probably best to just do that.