Ich versuche herauszufinden, wie man die Anzahl der Silben in einem Korpus von Audioaufnahmen erkennt. Ich denke, ein guter Proxy könnte Peaks in der Wave-Datei sein.
Hier ist, was ich mit einer Datei versucht habe, in der ich Englisch spreche (mein aktueller Anwendungsfall ist Kiswahili). Das Protokoll dieser Beispielaufnahme lautet: "Ich versuche, die Timer-Funktion zu verwenden. Ich betrachte Pausen und Vokalisationen." Es gibt insgesamt 22 Silben in dieser Passage.
WAV-Datei: https://www.dropbox.com/s/koqyfeaqge8t9iw/test.wav?dl=0
Das seewave
Paket in R ist großartig und es gibt mehrere mögliche Funktionen. Importieren Sie zuerst die Wave-Datei.
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
Das erste, was ich ausprobiert habe, war die timer()
Funktion. Eines der Dinge, die es zurückgibt, ist die Dauer jeder Vokalisierung. Diese Funktion identifiziert 7 Vokalisationen, was 22 Silben bei weitem nicht entspricht. Ein kurzer Blick auf die Handlung deutet darauf hin, dass Lautäußerungen nicht gleich Silben sind.
t <- timer(w, threshold=2, msmooth=c(400,90), dmin=0.1)
length(t$s)
# [1] 7
Ich habe auch die fpeaks-Funktion ausprobiert, ohne einen Schwellenwert festzulegen. Es gab 54 Spitzen zurück.
ms <- meanspec(w)
peaks <- fpeaks(ms)
Dies zeichnet die Amplitude eher nach der Frequenz als nach der Zeit. Durch Hinzufügen eines Schwellenwertparameters von 0,005 wird das Rauschen herausgefiltert und die Anzahl auf 23 Peaks reduziert, was der tatsächlichen Anzahl von Silben (22) ziemlich nahe kommt.
Ich bin mir nicht sicher, ob dies der beste Ansatz ist. Das Ergebnis ist abhängig vom Wert des Schwellenwertparameters, und ich muss einen großen Stapel von Dateien verarbeiten. Gibt es bessere Ideen, wie dies codiert werden kann, um Spitzen zu erkennen, die Silben darstellen?
changepoint
. Einfach ausgedrückt konzentriert sich die Änderungspunktanalyse auf das Erkennen von Änderungen. Das verknüpfte Beispiel befasst sich mit Handelsdaten, aber es könnte interessant sein, diese Technik auf Tondaten anzuwenden.