ฉันกำลังพยายามหาวิธีตรวจสอบจำนวนพยางค์ในคลังเสียงของการบันทึกเสียง ฉันคิดว่าพร็อกซีที่ดีอาจเป็นจุดสูงสุดในไฟล์ wave
นี่คือสิ่งที่ฉันลองด้วยไฟล์ที่ฉันพูดเป็นภาษาอังกฤษ (กรณีการใช้งานจริงของฉันคือ Kiswahili) หลักฐานของการบันทึกตัวอย่างนี้คือ: "นี่คือฉันพยายามใช้ฟังก์ชั่นตัวตั้งเวลาฉันกำลังดูหยุดชั่วคราวการเปล่งเสียง" ในบทนี้มีทั้งหมด 22 พยางค์
ไฟล์ wav: https://www.dropbox.com/s/koqyfeaqge8t9iw/test.wav?dl=0
seewave
แพคเกจในการวิจัยเป็นสิ่งที่ดีและมีฟังก์ชั่นที่มีศักยภาพหลาย ก่อนอื่นให้นำเข้าไฟล์คลื่น
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
สิ่งแรกที่ฉันลองคือtimer()
ฟังก์ชั่น หนึ่งในสิ่งที่มันกลับมาคือระยะเวลาของการเปล่งเสียงแต่ละครั้ง ฟังก์ชั่นนี้ระบุ 7 vocalizations ซึ่งสั้นกว่า 22 พยางค์ พล็อตเรื่องย่อแสดงให้เห็นว่าการเปล่งเสียงไม่ได้มีพยางค์เท่ากัน
t <- timer(w, threshold=2, msmooth=c(400,90), dmin=0.1)
length(t$s)
# [1] 7
ฉันลองใช้ฟังก์ชั่น fpeaks โดยไม่ตั้งค่าขีด จำกัด มันคืน 54 ยอด
ms <- meanspec(w)
peaks <- fpeaks(ms)
พล็อตนี้มีความกว้างตามความถี่มากกว่าเวลา การเพิ่มพารามิเตอร์ threshold เท่ากับ 0.005 กรองสัญญาณรบกวนและลดจำนวนถึง 23 พีคซึ่งค่อนข้างใกล้เคียงกับจำนวนพยางค์ที่แท้จริง (22)
ฉันไม่แน่ใจว่านี่เป็นวิธีที่ดีที่สุด ผลลัพธ์จะมีความอ่อนไหวต่อค่าของพารามิเตอร์ threshold และฉันต้องประมวลผลไฟล์ชุดใหญ่ แนวคิดที่ดีกว่าเกี่ยวกับวิธีการเขียนโค้ดนี้เพื่อตรวจหาจุดสูงสุดที่เป็นตัวแทนของพยางค์?
changepoint
แพคเกจ พูดง่ายๆคือการวิเคราะห์จุดเปลี่ยนมุ่งเน้นไปที่การตรวจจับการเปลี่ยนแปลงตัวอย่างที่เชื่อมโยงนั้นเกี่ยวข้องกับข้อมูลการค้า แต่น่าสนใจที่จะใช้เทคนิคนี้กับข้อมูลเสียง