R è multipiattaforma e free / open source.
Caricalo e carica le librerie tuneR
e seewave
(installale dal gestore dei pacchetti se non ancora installato).
library(tuneR)
library(seewave)
Quindi, carica il tuo file MP3 o WAV:
w = readMP3("dog-whistle-0.mp3")
w = readWave("dog-whistle-0.wav")
Ora, tracciamo lo spettro e i suoi picchi:
fpeaks(meanspec(w), nmax=1)
Risultato:
Risultato numerico:
fpeaks(meanspec(w), nmax=1, plot=FALSE)
12.05859
Quanto sopra funziona solo con dati non musicali. Quando analizzi le frequenze della musica, scoprirai che le frequenze più alte saranno sempre intorno ai 12-20 kHz, a seconda dello strumento o degli strumenti coinvolti. Tuttavia, questa frequenza più alta non ti darà una stima della nota che viene suonata, poiché una nota musicale, quando suonata da uno strumento, sarà composta da più frequenze.
Questo è il cosiddetto "timbro" di uno strumento e scoprirai che un A a 440 Hz per flauto includerà componenti di frequenza diversi rispetto ad un A suonato da una chitarra elettrica.
La soluzione migliore è eseguire un'analisi di frequenza dominante osservando i picchi di frequenza su finestre temporali scorrevoli e verificare dove si verifica quella più alta.
Tuttavia, non esiste una "frequenza nel tempo". Puoi tracciare la frequenza media (o dominante) solo su determinate finestre temporali scorrevoli . Seewave offre alcune funzioni per quanto riguarda la selezione delle finestre temporali, ma diventa piuttosto complicato.
Puoi usare
s = specprop(meanspec(w, from=10, to=11))
per ottenere le proprietà dello spettro da 10 a 11 secondi e quindi chiamare s$centroid
o s$mean
per ottenere il centroide o le frequenze medie di quella particolare finestra temporale (anche se 1 secondo è abbastanza grande per l'analisi audio).
Se il file Wave utilizza il campionamento a 44,1 kHz, è possibile eseguirne il downsampling per ridurre lo sforzo di calcolo, ad esempio a 16 kHz.
w = downsample(w, 16000)
Ma ricorda che secondo il Teorema di Nyquist , la frequenza massima che può essere rappresentata ora è di 8 kHz.
Potresti anche cercare un software di rilevamento dell'intonazione. Come questo , che richiede MATLAB però.
fpeaks
, sei consapevole se esiste una funzione che traccia il grafico della frequenza rispetto al tempo?