XMMS-Ruby and M3U

March 22, 2004

I wrote this little snippet of code in response to an email, and I thought it might be useful for other people.

Basically, I'm trying to write some code that will connect to a running XMMS session, grab the playlist and write out a .pls or a .m3u file. Unfortunately, while XMMS can do this in a single operation, their API doesn't seem to have a simple hook to do this.

Unfortunately, there's nothing in the remote API that lets you do that in a single call. But it should be pretty easy to write; just iterate over the list and print out the necessary lines for each entry. Something like this:

  module Xmms                                                                   
    class Remote                                                                
      #                                                                         
      # get playlist contents as m3u-encoded string                             
      #                                                                         
      def to_m3u                                                                
        "#EXTM3U\n" + playlist.map { |title, file, time|                        
          "#EXTINF:#{time / 1000},#{title}\n#{file}"                            
        }.join("\n")                                                            
      end                                                                       
    end                                                                         
  end

Then, to save a playlist, you can just do the following:

  xmms = Xmms::Remote.new                                                       
  File::open('path/to/output.m3u', 'w') { |out| out.puts xmms.to_m3u }          
                                                                                

Hope this helps...

Update: I tossed this code in a downloadable file, and I added an Xmms::Remote#save_m3u method for free. Download xmms-m3u.rb.