J'essaie de comprendre comment détecter le nombre de syllabes dans un corpus d'enregistrements audio. Je pense qu'un bon proxy pourrait être des pics dans le fichier wave.
Voici ce que j'ai essayé avec un fichier de moi parlant en anglais (mon cas d'utilisation réel est en kiswahili). La transcription de cet exemple d'enregistrement est: "C'est moi qui essaie d'utiliser la fonction de minuterie. Je regarde des pauses, des vocalisations." Il y a un total de 22 syllabes dans ce passage.
fichier wav: https://www.dropbox.com/s/koqyfeaqge8t9iw/test.wav?dl=0
Le seewave
package en R est génial et il existe plusieurs fonctions potentielles. Tout d'abord, importez le fichier Wave.
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
La première chose que j'ai essayée était la timer()
fonction. Il renvoie notamment la durée de chaque vocalisation. Cette fonction identifie 7 vocalisations, ce qui est bien en deçà de 22 syllabes. Un rapide coup d'œil à l'intrigue suggère que les vocalisations ne sont pas égales aux syllabes.
t <- timer(w, threshold=2, msmooth=c(400,90), dmin=0.1)
length(t$s)
# [1] 7
J'ai également essayé la fonction fpeaks sans fixer de seuil. Il a renvoyé 54 pics.
ms <- meanspec(w)
peaks <- fpeaks(ms)
Cela trace l'amplitude en fréquence plutôt qu'en temps. L'ajout d'un paramètre de seuil égal à 0,005 filtre le bruit et réduit le nombre à 23 crêtes, ce qui est assez proche du nombre réel de syllabes (22).
Je ne suis pas sûr que ce soit la meilleure approche. Le résultat sera sensible à la valeur du paramètre de seuil, et je dois traiter un gros lot de fichiers. Avez-vous de meilleures idées sur la façon de coder cela pour détecter les pics qui représentent les syllabes?
changepoint
package. Autrement dit, l'analyse du point de changement se concentre sur la détection du changement, l'exemple lié concerne les données commerciales, mais il pourrait être intéressant d'appliquer cette technique à des données solides.