如何在Ruby中以流形式播放音频

如何在Ruby中以流形式播放音频,ruby,audio,signal-processing,core-audio,Ruby,Audio,Signal Processing,Core Audio,我正试图找到一种使用Ruby将WAV文件作为流播放的好方法。我找到了这个宝石,但似乎无法正确播放音频。当我运行这段代码时,它只会发出一种非常不平稳、口吃的声音 require 'coreaudio' require 'thread' BUFF_SIZE = 1024 Thread.abort_on_exception = true song = CoreAudio::AudioFile.new("bleh.wav", :read) outbuf = CoreAudio.default_ou

我正试图找到一种使用Ruby将WAV文件作为流播放的好方法。我找到了这个宝石,但似乎无法正确播放音频。当我运行这段代码时,它只会发出一种非常不平稳、口吃的声音

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
需要“coreaudio”
需要“线程”
BUFF_SIZE=1024
Thread.abort_on_异常=true
song=CoreAudio::AudioFile.new(“bleh.wav”,:read)
exputf=CoreAudio.default\u output\u device.output\u buffer(BUFF\u大小)
queue=queue.new
read_song=Thread.start do
环道
段=歌曲读取(BUFF_大小)
队列推送(段)
结束
结束
play_song=Thread.start do
而段=queue.pop do

exputf看起来问题在于使用两个单独的线程进行输入和输出。我能够用一个线程使它工作:

play_song = Thread.start do
  while segment = song.read(BUFF_SIZE)
    outbuf << segment
  end
end
play_song=Thread.start do
而段=歌曲读取(BUFF_大小)
来看看这个toturial流媒体音乐真的怎么样