Generally I find opensource pretty easy to use but recently my wife and I acquired Sandisk Clip+ devices along with 32 Gigabyte class 4 SD cards to put some of our music on.
I don’t personally use many playlists as I like to play my music based off Album or Artist and playlists don’t seem like they are worth the hastle to me. My wife on the other hand lives by her playlists. This means she really wanted me to find a workflow that allowed her to share playlists between her Banshee player on Linux and her new Clip+.
This was not intuitive…..
Originally I had hoped to use the stock OF (Original Firmware) from Sandisk for her and simply have Banshee write playlist files out for her. The immediate issues I ran into were (1) playlists had to be in m3u format and HAD to be in the MUSIC directory with everything else. This wasn’t a show stopper once I figured it out. What came next was much harsher. (2) The files had to be in DOS format and had to have ‘\’ separators. Banshee wrote the files out with ‘/’ separators in Unix format. This means I wrote the following script:
cd '/media/path/to/sdcard/Music' sed -i 's/\//\\/g' *.m3u todos -uo *.m3u
Unfortunately this meant the following workflow was required:
- Open Banshee
- Copy music to the device
- Create playlists on the device
- Add music on the device to playlists on the device
- Unmount the device (to cause Banshee to write the playlists to the device, which only seemed to happen on unmount).
- Re-mount the device,
- Run my above script to fix M3U files up.
- Unmount the device
Running through this workflow once made me realize it was putting undue hardship on my poor wife. What I really wanted was a solution where she could:
- Create playlists on Banshee
- Sync the playlists and Music automatically to the Device
- Play the playlists
This is the solution I found that worked and fulfilled the above requirements:
- Install Rockbox on the Clip+
- Setup a proper .is_audio_player for Rockbox on the SDcard
- Create a smart playlist that is the OR of all the playlists she wants to sync
- Tell the device’s SDcard to sync Music to that smart playlist
- Sync the device
- Play the playlists via the file browser in Rockbox
Lets look at each of these steps more closely:
Install Rockbox on the Clip+:
This is pretty well documented at http://www.rockbox.org/manual.shtml. The reason I did this was Rockbox allows for ‘/’ and ‘\’ in its M3U processing so Banshee generated M3U files would play properly. Rockbox of course brings lots of other goodnesses with it, but its more robust M3U processing is my necessity.
Setup a proper .is_audio_player for Rockbox on the SDcard:
In order for Banshee to recognize the SDcard, I you have to tell Banshee that the SDcard is a music device. I decided not to put any music onto the NAND in the actual device itself. Instead, all music would live on the SDcard.
The file I ended up using looked like:
name="Wifes Sandisk Clip" audio_folders=MUSIC/ output_formats=audio/mpeg,audio/x-ms-wma,application/ogg playlist_formats=audio/x-mpegurl,audio/mpeg-url playlist_path=Playlists/ endoffile=PlaceThisHereToEnsureThereIsABlankSpaceBeforeTheLastLineOfTheFile
Note that this file was formed as the results of unioning many Google search outputs. Basically the name is the name, and the outputs tell everything where to go and in what format they can go.
Create a smart playlist that is the OR of all the playlists she wants to sync:
This is the part that was tricky. I found lots of posts saying “Make a smart playlist and everything will work”. I kept trying to make a smart playlist on the device with a rule of “is in other playlist on computer”, but it never worked.
What I had to do instead was make a smart playlist ON THE COMPUTER that was a union of all the various playlists I wanted on the device.
For example, lets say I wanted a playlist of all my Britney Spears music and another playlist with all my Handel music. To do this, I would search my music for Britney Spears, send it to a playlist named “Britney”, then search for Handel and send that to a new playlist named “Handel”. This would result in the following:
Now comes some of the tricky parts. What we are going to do is define a new “Smart Playlist” that selects the files from all the other playlists we care about. I mistakenly thought that syncing that playlist would only sync the files and create a single playlist on the device, but what Banshee actually does is sync all the files and then copies all the playlists and edits them down to only contain the files you sync’d. This means all our playlists like Britney, Handel, and others will show up on the device.
So what do we do now, ON YOUR COMPUTER, right click on music and say “New Smart Playlist”. Call it something like “MusicToSyncToDevice”. Change the criteria to match “any” of the following and repeatedly press the plus button and set Playlist is <playlist_we_care_about>. So in this case we will have two rows for Briney and Handel that look like:
Now that we have this defined, we need to tell Banshee to sync this stuff to our device. To do this, we click on the device at the left (note if you just created the .is_audio_device file you may need to unmount and remount the device), and we point to our smart playlist as our music sync source.
Tell the device’s SDcard to sync Music to that smart playlist:
In the menu setup the Music sync source to our smart playlist:
Sync the device:
Now right click on the device and select Sync or select Sync from the upper right. Banshee will sync all the music down to the player. After that is done, all the playlists will be written out to the Playlists directory for playing on the device.
Play the playlists via the file browser in Rockbox:
All that remains is on Rockbox browse to Files->microSD1->Playlists and select a playlist to begin playing all the songs on that playlist imported from Banshee.
Note I tried to change the Playlist Catalog to point to /<microSD>/Playlists, but wasn’t successful in that endeavor. Mainly because as soon as I started looking I realize that I wanted to keep Banshee playlists separate from dynamically created playlists I made on the device so this worked out well.
Hope this helps someone,