Extrahieren Sie schnelle Fourier-Transformationsdaten aus einer Datei

Ich baue ein Tool, das auf einem Server laufen und Sounddateien analysieren soll. Ich möchte dies in Ruby tun, da alle meine anderen Tools auch in Ruby geschrieben sind. Aber ich habe Probleme, einen guten Weg zu finden, um dies zu erreichen.

Viele der Beispiele, die ich gefunden habe, waren Visualisierungen und grafische Arbeiten. Ich brauche nur die FFT-Daten, sonst nichts. Ich muss sowohl die Audiodaten abrufen als auch eine FFT durchführen. Mein Endziel ist es, einige Dinge wie den Mittelwert / Median / Modus, das 25. Perzentil und das 75. Perzentil über alle Frequenzen (gewichtete Amplitude), die BPM und vielleicht eine andere gute Eigenschaft zu berechnen, um später ähnliche Klänge zu gruppieren .

Zuerst habe ich versucht, zu verwendenRuby-Audio undfftw3 aber ich gehe nie zu den beiden, um wirklich zusammenzuarbeiten. Die Dokumentation war auch nicht gut, also wusste ich wirklich nicht, um welche Daten es sich handelte. Als nächstes habe ich versucht zu verwendenbplay / brec und beschränke mein Ruby-Skript auf die Verwendung von STDIN und führe darauf eine FFT durch (benutze immer noch fftw3). Aber ich konnte bplay / brec nicht zum Laufen bringen, da der Server keine Soundkarte hat und ich es nicht geschafft habe, die Audiodaten direkt an STDOUT zu senden, ohne vorher ein Audiogerät zu verwenden.

Hier ist die nächste, die ich bekommen habe:

# 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

Jetzt stecke ich fest und finde keine guten Ergebnisse mehr bei Google. Also, vielleicht könnt ihr mir ja helfen?

Vielen Dank!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage