我最近一直在玩ruby,我决定开始一个简单的项目来编写一个ruby脚本来记录.wav
文件的输入声音.我发现ruby不能提供对硬件设备的非常好的访问(它可能不应该),但PortAudio确实如此,我在这里发现了一个伟大的PA包装器(它不是宝石,我想因为它使用了ruby的ffi
附加到PortAudio,PA库可以在各种地方).我一直在弄乱PortAudio的文档和示例来弄清楚PA是如何工作的.多年来我没有写过或读过C
.
我在创建过程中应该将哪些参数传递给流,以及创建期间的缓冲区时遇到了困难.例如,究竟是一个frame
,以及它是如何与其他参数,如channel
和sample rate
.我对音频编程也很陌生,所以如果有人能指点我一些关于设备级音频的一般教程等,我会很感激.
ruby-portaudio
提供了一个创建流和缓冲区的示例,将sin波写入缓冲区,然后将缓冲区发送到要播放的流.我在示例中遇到一些问题,特别是循环块.
PortAudio.init
block_size = 1024
sr = 44100
step = 1.0/sr
time = 0.0
stream = PortAudio::Stream.open(
:sample_rate => sr,
:frames => block_size,
:output => {
:device => PortAudio::Device.default_output,
:channels => 1,
:sample_format => :float32
})
buffer = PortAudio::SampleBuffer.new(
:format => :float32,
:channels => 1,
:frames => block_size)
playing = true
Signal.trap('INT') { playing = false }
puts "Ctrl-C to exit"
stream.start …
Run Code Online (Sandbox Code Playgroud)