R es multiplataforma y de código libre / abierto.
Cárguelo y cargue las bibliotecas tuneR
y seewave
(instálelas desde el administrador de paquetes si aún no está instalado).
library(tuneR)
library(seewave)
Luego, cargue su archivo MP3 o WAV:
w = readMP3("dog-whistle-0.mp3")
w = readWave("dog-whistle-0.wav")
Ahora, grafiquemos el espectro y sus picos:
fpeaks(meanspec(w), nmax=1)
Resultado:
Resultado numérico:
fpeaks(meanspec(w), nmax=1, plot=FALSE)
12.05859
Lo anterior solo funciona con datos no musicales. Cuando analice las frecuencias de la música, encontrará que las frecuencias más altas siempre estarán alrededor de 12-20 kHz, dependiendo del instrumento (s) involucrado. Sin embargo, esta frecuencia más alta no le dará una estimación de la nota que se está tocando, ya que una nota musical, cuando se toca con un instrumento, estará compuesta de múltiples frecuencias.
Este es el llamado "timbre" de un instrumento, y encontrará que una A a 440 Hz por una flauta incluirá diferentes componentes de frecuencia en comparación con una A tocada por una guitarra eléctrica.
Su mejor opción es ejecutar un análisis de frecuencia dominante al observar los picos de frecuencia en las ventanas de tiempo deslizante y verificar dónde ocurre el más alto.
Sin embargo, no existe la "frecuencia en el tiempo". Solo puede trazar la frecuencia promedio (o dominante) sobre ciertas ventanas de tiempo deslizante . Seewave ofrece bastantes funciones con respecto a la selección de ventanas de tiempo, pero se vuelve bastante complicado.
Podrías usar
s = specprop(meanspec(w, from=10, to=11))
para obtener las propiedades del espectro de 10 a 11 segundos y luego llamar s$centroid
o s$mean
para obtener el centroide o las frecuencias medias de esa ventana de tiempo particular (aunque 1 segundo es bastante grande para el análisis de audio).
Si su archivo Wave utiliza un muestreo de 44.1 kHz, puede reducir la muestra para reducir el esfuerzo de cálculo, por ejemplo, a 16 kHz.
w = downsample(w, 16000)
Pero recuerde que según el Teorema de Nyquist , la frecuencia máxima que se puede representar ahora es de 8 kHz.
También puede buscar un software de detección de tono. Como este , que requiere MATLAB sin embargo.
fpeaks
, ¿eres consciente de si hay una función que traza el gráfico de frecuencia contra tiempo?