मैं यह पता लगाने की कोशिश कर रहा हूं कि ऑडियो रिकॉर्डिंग के एक कोष में सिलेबल्स की संख्या का पता कैसे लगाया जाए। मुझे लगता है कि लहर फ़ाइल में एक अच्छा प्रॉक्सी चोटियों हो सकता है।
यहाँ मैंने अंग्रेजी में बोलने की एक फाइल के साथ कोशिश की है (मेरा वास्तविक उपयोग केसविले में है)। इस उदाहरण की रिकॉर्डिंग की प्रतिलिपि इस प्रकार है: "यह मुझे टाइमर फ़ंक्शन का उपयोग करने की कोशिश कर रहा है। मैं ठहराव, गायन देख रहा हूं।" इस मार्ग में कुल 22 शब्दांश हैं।
wav फ़ाइल: https://www.dropbox.com/s/koqyfeaqge8t9iw/test.wav?l=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 स्वरों की पहचान करता है, जो 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)
यह समय के बजाय आवृत्ति द्वारा आयाम देता है। 0.005 के बराबर थ्रेशोल्ड पैरामीटर जोड़ना शोर को कम करता है और गिनती को 23 चोटियों तक कम कर देता है, जो वास्तविक संख्या के सिलेबल्स (22) के काफी करीब है।
मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है। परिणाम थ्रेशोल्ड पैरामीटर के मान के प्रति संवेदनशील होगा, और मुझे फ़ाइलों के एक बड़े बैच को संसाधित करना होगा। सिलेबल्स का प्रतिनिधित्व करने वाली चोटियों का पता लगाने के लिए इसे कोड करने के बारे में कोई बेहतर विचार?
changepoint
। सीधे शब्दों में कहें, परिवर्तन बिंदु विश्लेषण परिवर्तन का पता लगाने पर केंद्रित है , जुड़ा हुआ उदाहरण व्यापार डेटा से संबंधित है, लेकिन इस तकनीक को ध्वनि डेटा पर लागू करना दिलचस्प हो सकता है।