如何在Ruby中播放音频流

时间:2015-01-02 00:28:34

标签: ruby audio signal-processing core-audio

我试图找出一种使用Ruby将WAV文件作为流播放的好方法。我找到了这个CoreAudio宝石,但似乎无法正常播放音频。当我运行这个代码时,它只是发出一种非常波涛汹涌的声音。

require 'coreaudio'
require 'thread'

BUFF_SIZE = 1024

Thread.abort_on_exception = true

song = CoreAudio::AudioFile.new("bleh.wav", :read)
outbuf = CoreAudio.default_output_device.output_buffer(BUFF_SIZE)

queue = Queue.new

read_song = Thread.start do
   loop do
     segment = song.read(BUFF_SIZE)
     queue.push(segment)
    end
end

play_song = Thread.start do
    while segment = queue.pop do
       outbuf << segment
    end
end

outbuf.start

sleep 10

read_song.kill.join
play_song.kill.join

非常感谢任何建议,谢谢!

1 个答案:

答案 0 :(得分:1)

看起来问题是使用两个单独的线程进行输入和输出。我能够使用单个线程:

play_song = Thread.start do
  while segment = song.read(BUFF_SIZE)
    outbuf << segment
  end
end

我猜测在两个线程之间使用共享队列太慢而无法实时播放音频。