4

リアルタイムのオーディオ機能を使ったことがありません。ギターチューナーのようなものを作成できるルビーライブラリがあるかどうか知りたいです。

4

1 に答える 1

4

直交する 2 つのタスクがあります。1) 音声の読み取り、2) 処理です。オーディオを取得するには、 ruby-audioをチェックできますが、正直なところ、私はそれを使用したことがなく、ドキュメントも不足しているようです。個人的には、お使いのオペレーティング システムが提供するものなら何でも利用したいと思います。たとえば、GNU/Linux にはbplayのような便利なツールがあります。2 番目の問題は、オーディオの FFT を計算する方法です。これはFFTW3で簡単に実行できます。

以下は、標準入力(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
于 2010-12-22T18:25:54.160 に答える