4
我從來沒有使用過實時音頻功能。 我想知道是否有紅寶石庫可以讓我創建類似吉他調音器的東西。帶紅寶石的吉他調諧器
我從來沒有使用過實時音頻功能。 我想知道是否有紅寶石庫可以讓我創建類似吉他調音器的東西。帶紅寶石的吉他調諧器
有兩個正交任務:1)讀取音頻,2)處理它。爲了獲得音頻,你可以檢查ruby-audio,說實話,我從來沒有使用它,它的文檔似乎很少。就個人而言,我會訴諸任何您的操作系統提供;例如在GNU/Linux中,我們有便利的工具,如bplay。第二個問題是如何計算音頻的FFT,這應該很容易與FFTW3。
這裏是一個快速和骯髒的例子是可以獲得FFT的峯值點從標準輸入(16位,單聲道):
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
但請記住,您需要了解一些關於FFT和樂器光譜的知識,才能獲得吉他調音器的有用功能。您需要採用托克蘭的示例並對其進行更多處理 - 選取FFT的峯值將無法可靠地給出您的音調。看到一些關於基音檢測的其他帖子:http://stackoverflow.com/search?q=pitch+estimation – 2010-12-22 23:29:36