吉他调音器使用 Ruby

4

我从未使用过实时音频功能。 我想知道是否有Ruby库可以让我创建类似吉他调音器的东西。

1个回答

4
有两个正交任务:1)读取音频,2)处理它。要获取音频,您可以检查ruby-audio,不过说实话,我从未使用过它,而且它的文档似乎很少。个人建议使用操作系统提供的任何工具;例如,在GNU/Linux中,我们有方便的工具,如bplay。第二个问题是如何计算音频的FFT,这应该很容易使用FFTW3

这是一个快速而简单的示例,从 stdin (16位,单声道)获取FFT的峰值点:

require 'rubygems'
require 'fftw3'

module Tuner
  def self.peaks(input_channel, samplerate, window_size)
    Enumerator.new do |enum|
      loop do
        data = input_channel.read(window_size).unpack("s*")
        na = NArray.to_na(data)
        fft = FFTW3.fft(na).to_a[0, window_size/2]
        max_n = fft.map(&:abs).each_with_index.drop(1).max[1]
        enum.yield(max_n.to_f * samplerate / window_size)
      end
    end
  end
end

if __FILE__ == $0
  Tuner.peaks(STDIN, 8000, 1024).each { |f| puts f }
end

例如,要被称为:
$ brec -s 8000 -b 16 | ruby tuner.rb

1
请记住,要想得到一个有用的吉他调音器,您需要了解一些FFT和乐器频谱知识。 您需要采取tokland的示例并对其进行更多处理 - 仅选择FFT的峰值不会可靠地给出音高。 请参阅此处有关音高检测的其他帖子:http://stackoverflow.com/search?q=pitch+estimation - the_mandrill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接