Ruby で音楽再生

Ruby で mp3 ファイルを再生する方法について.ただし mpg123 など音楽再生部分は外部コマンドに任せてる.
RubyForge とか,RAAみてもピンとくるのがなかったので書く.

音楽再生に関するノウハウはさっぱりなので,誰かいい方法知ってたらへるぷみー

目的

Ruby で音楽再生をしたい.
しかしながら RubyForge とか,RAAみてもピンとくるのがなかった.
ピンとくるのがなかっただけで,Ruby/SDL とか,ruby-audiere があります.
しかし,これらはムダに大掛かりだったり,Audiere というソフト(ライブラリ?)をインストールする必要があったりするので使いたくありませんでした.
そこで,手元の自宅サーバに既にインストールされてる mpg123 を使えないかと考えました.
それに mpg123 は CUI の音楽再生ソフトの中では有名な方だと思うので.

やり方

この方法では mpg123 が必要になる.
Siena.さんからのアドバイスから,popen3, open 以下の内容をブロックに入れました.ありがとうございます.

#!/usr/bin/env ruby -Ku

require 'open3'

mp3filename = ARGV.shift
mpg123 = '/usr/bin/mpg123'
command = "#{mpg123} -b 1000 -q -"
buffer_size = 1024

Open3.popen3(command) do | pipes |
  sound = pipes[0]
  pipes[1].close    # これと
  pipes[2].close    # これって,要らないかな.
  open(mp3filename) do | mp3file |
    while !(buf = mp3file.read(buffer_size)).nil?
      sound.write buf
    end
  end
end

問題点

厳密な再生終了がわからない.
実際に上のコードを動かすとわかるけれど,上の while ループ部分が終了しても音楽の再生が終わったとは限らない.
mpg123 のオプションの -b を小さく(あるいは取っ払う)ことで幾分かマシにはなるものの,それでも両終了の時差は 1 秒程度発生している.
マイッタネ.