Saya mencoba mencari cara untuk mendeteksi jumlah suku kata dalam korpus rekaman audio. Saya pikir proxy yang baik mungkin adalah puncak dalam file wave.
Inilah yang saya coba dengan file saya berbicara dalam bahasa Inggris (kasus penggunaan saya yang sebenarnya adalah dalam Kiswahili). Transkrip rekaman contoh ini adalah: "Ini saya mencoba menggunakan fungsi timer. Saya sedang melihat jeda, vokalisasi." Ada total 22 suku kata dalam bagian ini.
file wav: https://www.dropbox.com/s/koqyfeaqge8t9iw/test.wav?dl=0
The seewave
paket di R besar, dan ada beberapa fungsi yang potensial. Pertama-tama, impor 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
Hal pertama yang saya coba adalah timer()
fungsinya. Salah satu hal yang dikembalikan adalah durasi setiap vokalisasi. Fungsi ini mengidentifikasi 7 vokalisasi, yang jauh dari 22 suku kata. Melihat sekilas plot menunjukkan bahwa vokalisasi tidak sama dengan suku kata.
t <- timer(w, threshold=2, msmooth=c(400,90), dmin=0.1)
length(t$s)
# [1] 7
Saya juga mencoba fungsi fpeaks tanpa menetapkan ambang batas. Ini mengembalikan 54 puncak.
ms <- meanspec(w)
peaks <- fpeaks(ms)
Ini plot amplitudo oleh frekuensi daripada waktu. Menambahkan parameter ambang sama dengan 0,005 menyaring kebisingan dan mengurangi jumlah hingga 23 puncak, yang cukup dekat dengan jumlah suku kata yang sebenarnya (22).
Saya tidak yakin ini adalah pendekatan terbaik. Hasilnya akan peka terhadap nilai parameter ambang, dan saya harus memproses banyak file. Adakah ide yang lebih baik tentang cara membuat kode ini untuk mendeteksi puncak yang mewakili suku kata?
changepoint
paket. Sederhananya, analisis titik perubahan berfokus pada mendeteksi perubahan, contoh terkait terkait dengan data perdagangan tetapi mungkin menarik untuk menerapkan teknik ini pada data yang sehat.