R é multiplataforma e de código aberto / gratuito.
Carregue-o e carregue as bibliotecas tuneR
e seewave
(instale-as a partir do gerenciador de pacotes, se ainda não estiver instalado).
library(tuneR)
library(seewave)
Em seguida, carregue seu arquivo MP3 ou WAV:
w = readMP3("dog-whistle-0.mp3")
w = readWave("dog-whistle-0.wav")
Agora, vamos traçar o espectro e seus picos:
fpeaks(meanspec(w), nmax=1)
Resultado:
Resultado numérico:
fpeaks(meanspec(w), nmax=1, plot=FALSE)
12.05859
O exemplo acima funciona apenas com dados não musicais. Ao analisar as frequências musicais, você descobrirá que as frequências mais altas sempre estarão em torno de 12 a 20 kHz, dependendo do (s) instrumento (s) envolvido (s). No entanto, essa frequência mais alta não fornecerá uma estimativa da nota que está sendo tocada, pois uma nota musical, quando tocada por um instrumento, será composta por várias frequências.
Esse é o chamado "timbre" de um instrumento, e você verá que um A a 440 Hz por uma flauta incluirá diferentes componentes de frequência em comparação com um A tocado por uma guitarra elétrica.
Sua melhor aposta é executar uma análise de frequência dominante, observando os picos de frequência nas janelas de tempo deslizantes e verifique onde ocorre a mais alta.
No entanto, não existe "frequência ao longo do tempo". Você só pode plotar a frequência média (ou dominante) em determinadas janelas de tempo de deslizamento . O Seewave oferece algumas funções relacionadas à seleção de janelas de tempo, mas fica bastante complicado.
Você poderia usar
s = specprop(meanspec(w, from=10, to=11))
para obter as propriedades do espectro de 10 a 11 segundos e depois chamar s$centroid
ou s$mean
obter as frequências médias ou centróides dessa janela de tempo específica (embora 1 segundo seja bastante grande para análise de áudio).
Se o seu arquivo Wave usa amostragem de 44,1 kHz, você pode reduzi-lo para reduzir o esforço de computação, por exemplo, para 16 kHz.
w = downsample(w, 16000)
Mas lembre-se de que, de acordo com o Teorema de Nyquist , a frequência máxima que pode ser representada agora é de 8 kHz.
Você também pode procurar um software de detecção de afinação. Como este , que requer MATLAB embora.
fpeaks
, você está ciente de que existe uma função que plota o gráfico de frequência contra o tempo?