如何在 Ruby 中将音频作为流播放

Posted

技术标签:

【中文标题】如何在 Ruby 中将音频作为流播放【英文标题】:How to play audio as a stream in Ruby 【发布时间】:2015-01-02 00:28:33 【问题描述】:

我正在尝试找出一种使用 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

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

【问题讨论】:

看看这个教程code.tutsplus.com/articles/… 它在流媒体音乐方面的真正作用 【参考方案1】:

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

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

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

【讨论】:

以上是关于如何在 Ruby 中将音频作为流播放的主要内容,如果未能解决你的问题,请参考以下文章

如何在黑莓中播放音频作为背景

如何使用 Soundcloud api 获取流到 html5 音频播放器?

如何在同一页面中播放多个音频文件?

如何在 HTML 5 中播放经过身份验证的音频流?

如何在 iPhone/iPad 中播放流音频

如何从实时流中播放音频