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

标签 ruby audio signal-processing core-audio

我正在尝试找到一种使用Ruby将WAV文件作为流播放的好方法。我找到了这个CoreAudio gem ,但似乎无法正常播放音频。当我运行此代码时,它只会发出非常断断续续的声音。

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

任何建议将不胜感激,谢谢!

最佳答案

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

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

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

关于ruby - 如何在Ruby中以流形式播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27736049/

相关文章:

ios - 无法播放 SoundCloud 的某些轨道

c - Windows(或 Linux)中的不间断进程?

c - 将 MATLAB 代码移植到优化 C 的有效方法

Ruby 检查电子邮件地址

ruby - ruby 中更快的 Fixnum 乘法?

ruby - 在散列中转换多个数组的智能方法?

ios - 开始在后台播放声音 IOS 7

java - 如何用java编写FLAC文件

matlab - 如何获得图像中使用的1D和2D空间滤波器的光谱?

ruby - 如何使用Ruby在YouTube上上传视频