Estoy tratando de averiguar cómo detectar el número de sílabas de un corpus de grabaciones de audio. Creo que es una buena proxy pueden ser picos en el archivo de onda.
He aquí lo he probado con un archivo de mí hablando en inglés (en mi caso de uso es en Kiswahili). La transcripción de este ejemplo de grabación es: "Esto me está tratando de utilizar la función de temporizador. Estoy buscando en las pausas, las vocalizaciones." Hay un total de 22 sílabas en este pasaje.
archivo wav: https://www.dropbox.com/s/koqyfeaqge8t9iw/test.wav?dl=0
El seewave
paquete en R es grande, y hay varias funciones potenciales. Lo primero es lo primero, importar el archivo de onda.
library(seewave)
library(tuneR)
w <- readWave("YOURPATHHERE/test.wav")
w
# Wave Object
# Number of Samples: 278528
# Duration (seconds): 6.32
# Samplingrate (Hertz): 44100
# Channels (Mono/Stereo): Stereo
# PCM (integer format): TRUE
# Bit (8/16/24/32/64): 16
El primero que probé fue el timer()
función. Una de las cosas que se devuelve es la duración de cada vocalización. Esta función identifica 7 vocalizaciones, que es muy corto, de 22 de sílabas. Un rápido vistazo a la trama sugiere que las vocalizaciones no son iguales a las sílabas.
t <- timer(w, threshold=2, msmooth=c(400,90), dmin=0.1)
length(t$s)
# [1] 7
También probé el fpeaks función sin la fijación de un umbral. Volvió 54 picos.
ms <- meanspec(w)
peaks <- fpeaks(ms)
Este parcelas de la amplitud de la frecuencia de lugar de tiempo. La adición de un parámetro de umbral igual a 0.005 filtros de ruido y reduce el conteo de 23 de picos, que es bastante cercano a la realidad el número de sílabas (22).
No estoy seguro de que este es el mejor enfoque. El resultado será sensible al valor del parámetro umbral, y tengo que procesar una gran cantidad de archivos. Mejores ideas acerca de cómo este código para detectar picos que representan sílabas?