Sto costruendo uno strumento che dovrebbe funzionare su un server e analizzare i file audio. Voglio farlo in Ruby poiché tutti i miei altri strumenti sono scritti anche in Ruby. Ma ho difficoltà a trovare un buon modo per realizzare questo.Estrai dati di trasformazione di Fourier veloce dal file
Molti degli esempi che ho trovato hanno fatto visualizzatori e materiale grafico. Ho solo bisogno dei dati FFT, niente di più. Ho bisogno sia di ottenere i dati audio, sia di FFT. Il mio obiettivo finale è quello di calcolare alcune cose come la media/mediana/modalità, il 25 ° percentile e il 75 ° percentile su tutte le frequenze (ampiezza ponderata), il BPM e forse qualche altra buona caratteristica per poter poi raggruppare insieme suoni simili .
Per prima cosa ho cercato di usare rubino audio e fftw3 ma non ho mai andare i due a lavorare davvero insieme. Anche la documentazione non era buona, quindi non sapevo davvero quali dati venissero mescolati. Poi ho provato a usare bplay/brec e limitare il mio script Ruby per usare semplicemente STDIN ed eseguire una FFT su quello (usando ancora fftw3). Ma non riuscivo a far funzionare bplay/brec dal momento che il server non ha una scheda audio e non sono riuscito a ottenere l'audio direttamente su STDOUT senza prima passare a un dispositivo audio.
Ecco la più vicina che ho ottenuto:
# 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
Così ora mi sono bloccato e non riesco a trovare nessun altro buoni risultati su Google. Quindi forse voi ragazzi potete aiutarmi?
Grazie!
Forse questa discussione precedente potrebbe essere utile: http://stackoverflow.com/questions/2834548/ruby-play-pause-resume -aac-audio-files – fmendez
Potresti approfondire il motivo per cui sei bloccato? Per favore includi messaggi di errore o lacune nella comprensione di come dovrebbero funzionare le cose. –
Ho aggiunto il mio codice finora. Ho un enorme divario tra la lettura dei dati usando ruby-audio e l'estrazione della FFT usando fftw3. Vedi il commento con tre punti interrogativi. Ho i dati wav all'interno di buf ma non so cosa sia/cosa rappresenti realmente il dato. Ci sono intestazioni lì dentro? È compresso/codificato? ecc, ecc. Voglio ottenere i dati in get_fft (che è preso quasi letteralmente da un altro post SO). –