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?¿Has probado Audacity ? Es una herramienta gratuita que tiene algunas herramientas de análisis bastante sofisticadas, incluyendo un trazado del espectro de comandos se accede desde Analizar -> trazado del espectro ... .
Tenga en cuenta que obtiene resultados diferentes con la versión MP3 del archivo en comparación con la versión WAV porque la compresión MP3 ha alterado la forma de onda e introducido artefactos / alias.
Editar: los archivos de sonido a los que se vincula no son buenos ejemplos de esto. Los archivos de frecuencia más alta solo se muestrean a 44,1 kHz, que se adapta a la audición humana (alrededor de 20 kHz como máximo). No puede representar frecuencias de ultrasonido sin aumentar la frecuencia de muestreo.
fuente