Sto cercando di capire come rilevare il numero di sillabe in un corpus di registrazioni audio. Penso che un buon proxy potrebbe essere un picco nel file wave.
Ecco cosa ho provato con un file di me che parlavo in inglese (il mio caso d'uso reale è in Kiswahili). La trascrizione di questo esempio di registrazione è: "Sono io che sto cercando di usare la funzione timer. Sto guardando pause, vocalizzazioni". Ci sono un totale di 22 sillabe in questo passaggio.
file wav: https://www.dropbox.com/s/koqyfeaqge8t9iw/test.wav?dl=0
Il seewave
pacchetto in R è eccezionale e ci sono diverse potenziali funzioni. Per prima cosa, importa il file 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 prima cosa che ho provato è stata la timer()
funzione. Una delle cose che restituisce è la durata di ogni vocalizzazione. Questa funzione identifica 7 vocalizzazioni, che è di gran lunga inferiore a 22 sillabe. Un rapido sguardo alla trama suggerisce che le vocalizzazioni non eguagliano le sillabe.
t <- timer(w, threshold=2, msmooth=c(400,90), dmin=0.1)
length(t$s)
# [1] 7
Ho anche provato la funzione fpeaks senza impostare una soglia. Ha restituito 54 picchi.
ms <- meanspec(w)
peaks <- fpeaks(ms)
Questo traccia l'ampiezza in base alla frequenza anziché al tempo. L'aggiunta di un parametro di soglia pari a 0,005 filtra il rumore e riduce il conteggio a 23 picchi, che è abbastanza vicino al numero effettivo di sillabe (22).
Non sono sicuro che questo sia l'approccio migliore. Il risultato sarà sensibile al valore del parametro di soglia e devo elaborare un grosso batch di file. Qualche idea migliore su come codificare questo per rilevare picchi che rappresentano sillabe?
changepoint
pacchetto. In poche parole, l'analisi del punto di cambiamento si concentra sul rilevamento del cambiamento, l'esempio collegato riguarda i dati commerciali, ma potrebbe essere interessante applicare questa tecnica a dati validi.