From: Lars Christensen Date: 2002-07-01T18:51:11+09:00 Subject: Re: mpg123 On Sat, Jun 15, 2002 at 08:35:10AM +0900, Tobias Reif wrote: > did anyone write a GUI frontend or a scripting API for mpg123? Sorry for the slow response, I'm just catching up. I wrote this for mpg321 (which has a better decoder than mpg123, imho): require 'open3' class MP3Player attr_reader :mode attr_reader :mp3info attr_reader :current_frame, :frames_remaining, :current_time, :time_remaining def initialize @mode = :stopped @done_callback = nil @cmdwrite, cmdread, @err = Open3.popen3("mpg321 -R nil") Thread.start { cmdread.each_line { |ln| case ln.chomp when /^@P 0$/ @mode = :stopped @current_frame = nil @done_callback.call if @done_callback when /^@P 1$/ @mode = :paused when /^@P 2$/ @mode = :playing when /^@S (.*)$/ @mp3info = $1 when /^@F\s+(\d+)\s+([-\d]+)\s+([\d\.]+)\s+([-\d\.]+)/ @mode = :playing @current_frame = $1.to_i @frames_remaining = $2.to_i @current_time = $3.to_f @time_remaining = $4.to_f else $stderr.puts ln end } } end def on_end_of_file(&block) @done_callback = block end def play(filename) @cmdwrite.puts "LOAD #{filename}" end def seek(frame) @cmdwrite.puts "JUMP #{frame}" end def status @mode.to_s + @mp3info.to_s end def shutdown @cmdwrite.puts "QUIT" end end -- Lars Christensen