サーバー上で実行してサウンド ファイルを分析するツールを作成しています。他のすべてのツールも Ruby で作成されているため、これを Ruby で実行したいと考えています。しかし、これを達成する良い方法を見つけるのに苦労しています。
私が見つけた多くの例は、ビジュアライザーとグラフィカルなものを行っています。FFT データだけが必要です。オーディオ データを取得し、FFT を実行する必要があります。私の最終的な目標は、平均/中央値/モード、25 パーセンタイル、75 パーセンタイル、すべての周波数 (重み付けされた振幅)、BPM、および後で同様の音をクラスター化できるようにするためのその他の優れた特性などを計算することです。 .
最初はruby -audioとfftw3を使用しようとしましたが、2 つを実際に連携させることはありませんでした。ドキュメンテーションもよくなかったので、どのデータがシャッフルされているのか本当にわかりませんでした。次に、bplay / brecを使用して、Ruby スクリプトを STDIN のみを使用するように制限し、その上で FFT を実行しようとしました (まだ fftw3 を使用しています)。しかし、サーバーにサウンドカードがなく、最初にオーディオデバイスに行かずにオーディオを直接 STDOUT に送ることができなかったため、bplay/brec を機能させることができませんでした。
これが私が得た最も近いものです:
# extracting audio from wav with ruby-audio
buf = RubyAudio::Buffer.float(1024)
RubyAudio::Sound.open(fname) do |snd|
while snd.read(buf) != 0
# ???
end
end
# performing FFT on audio
def get_fft(input, window_size)
data = input.read(window_size).unpack("s*")
na = NArray.to_na(data)
fft = FFTW3.fft(na).to_a[0, window_size/2]
return fft
end
だから今、私は立ち往生しており、Googleでこれ以上良い結果を見つけることができません. それで、おそらくあなたたちは私を助けることができますか?
ありがとう!