小编ofl*_*hra的帖子

在ruby中使用PortAudio包装器将声音录制到.wav

我最近一直在玩ruby,我决定开始一个简单的项目来编写一个ruby脚本来记录.wav文件的输入声音.我发现ruby不能提供对硬件设备的非常好的访问(它可能不应该),但PortAudio确实如此,我在这里发现了一个伟大的PA包装器(它不是宝石,我想因为它使用了ruby的ffi附加到PortAudio,PA库可以在各种地方).我一直在弄乱PortAudio的文档和示例来弄清楚PA是如何工作的.多年来我没有写过或读过C.

我在创建过程中应该将哪些参数传递给流,以及创建期间的缓冲区时遇到了困难.例如,究竟是一个frame,以及它是如何与其他参数,如channelsample 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)

ruby audio wav portaudio

11
推荐指数
1
解决办法
2229
查看次数

标签 统计

audio ×1

portaudio ×1

ruby ×1

wav ×1