2015-02-20 7 views
9

मैं एक ऐसा एप्लीकेशन विकसित करने के लिए एफएमओडी का उपयोग कर रहा हूं जो तुरंत अगली/पिछली वाक्य की रिकॉर्डिंग को एमपी 3 फ़ाइल में शुरू करने से शुरू कर देगा जिसमें संगीत के बिना भाषण होता है, जब उपयोगकर्ता ने अगला/पिछला बटन क्लिक किया था। मैं ध्वनि बुला :: ताला द्वारा एक एमपी 3 फ़ाइल का पीसीएम डेटा है, लेकिन ध्वनि :: getFormat केवल मुझे यह, "16bit पूर्णांक पीसीएम डेटा" था कह चाहे वह पर हस्ताक्षर किए या अहस्ताक्षरित था बिना कहा था। मैं उसे कैसे जानूंगा?क्या "16 बिट पूर्णांक पीसीएम डेटा" का अर्थ यह हस्ताक्षरित या हस्ताक्षरित है?

इंटरनेट पर कुछ लेख कहते हैं कि लगभग सभी 16-बिट पूर्णांक पीसीएम डेटा पर हस्ताक्षर किए गए हैं। यदि मेरा पीसीएम डेटा पर हस्ताक्षर किया गया है, तो मूल्यों की कौन सी रेंज मौन का प्रतिनिधित्व करती है, 0 के करीब के मान (उदा। -10 ~ 10), या -32768 (उदा। -32768 ~ -32750) के करीब के मान? यदि वे 0 के करीब मान हैं, तो क्या इसका मतलब यह है कि -32767 और 32767 जैसे विपरीत संख्याओं के बीच अर्थ में कोई अंतर नहीं है?

मुझे उन मौनों का पता लगाने की आवश्यकता है जो काफी लंबे हैं, उदा। 500ms से अधिक, यह निर्धारित करने के लिए कि भाषण में प्रत्येक वाक्य कहां से शुरू होता है।

क्या कोई मुझे वाक्यों के बीच चुप्पी का पता लगाने के बारे में कोई सुझाव दे सकता है?

उत्तर

17

16-बिट ऑडियो, सम्मेलन द्वारा, आमतौर पर हस्ताक्षरित है।

पीसीएम ऑडियो क्या है इसके बारे में सोचें: प्रत्येक उपाय यह है कि स्पीकर को उस समय कितनी दूर स्पीकर शारीरिक रूप से आराम करनी चाहिए। इसलिए सही मौन बिल्कुल कोई दोहराना मूल्य है - जो स्पीकर को आगे नहीं बढ़ता है।

0 तब सीमा का केंद्र है, और आमतौर पर जहां माइक्रोफ़ोन इनपुट के साथ होना चाहिए। -32768 स्पीकर अपनी धुरी के एक छोर के करीब है क्योंकि यह हो सकता है, 32767 यह दूसरी तरफ है।

मौन का पता लगाने का सबसे सुरक्षित तरीका प्रासंगिक सीमा पर वर्णक्रमीय विश्लेषण चलाने और उन अवधि की तलाश करना होगा जहां किसी भी श्रव्य आवृत्ति सीमा में कोई गतिविधि नहीं है।

यदि आप भाषण के बीच विराम की तलाश में हैं तो सबसे आसान बात शायद this जैसे कहीं भी जाना होगा, भाषण के लिए स्वीकार्य आवृत्ति सीमा में प्लग करें (इसे टेलीफ़ोनी में लगभग 3500 हर्ट्ज के आसपास 300 हर्ट्ज माना जाता है), आपका नमूना दर और हालांकि कई गुणाएं आपको लगता है कि आप बर्दाश्त कर सकते हैं। आपूर्ति किए गए गुणांक की प्रतिलिपि बनाएँ। जैसे मैं तुम्हें एक 44100Hz इनपुट के साथ भाषण श्रृंखला में 37 नल करूँगा ग्रहण किया और, एक सी सरणी में परिवर्तित, मुझे मिल गया:

double coefficients[] = { 
    -0.000560, -0.001290, -0.002332, -0.003606, -0.004911, -0.005921, -0.006201, 
    -0.005256, -0.002610, 0.002106, 0.009059, 0.018139, 0.028924, 0.040691, 0.052479, 
    0.063203, 0.071794, 0.077351, 0.079274, 0.077351, 0.071794, 0.063203, 0.052479, 
    0.040691, 0.028924, 0.018139, 0.009059, 0.002106, -0.002610, -0.005256, -0.006201, 
    -0.005921, -0.004911, -0.003606, -0.002332, -0.001290, -0.000560}; 

यदि यह double इनपुट थे, प्रत्येक इनपुट नमूना c के लिए मैं तो गणना होगी एक नमूना मूल्य:

double *inputWave = ... input, an infinite array for the purposes of the example ... 
double sampledValue = 0.0; 
for(size_t coeff = 0; coeff < numberOfTaps; coeff++) { 
    sampledValue += coefficients[coeff] * inputWave[c + coeff]; 
} 

// (where numberOfTaps = sizeof(coefficients)/sizeof(coefficients[0]), 
// i.e. the number of coefficients: 37 with the array given above) 

जो मुझे मिला है वह एक बैंडपास फ़िल्टर है। आवृत्ति रेंज 300-3500Hz में ध्वनि का प्रतिनिधित्व करने वाले सिग्नल का केवल वह हिस्सा आउटपुट मानों में ही रहना चाहिए। वास्तविक जीवन में ऐसा कोई फ़िल्टर सही नहीं है; अपने फ़िल्टर की गुणवत्ता बढ़ाने के लिए गुणांक की संख्या में वृद्धि करें।

सिग्नल के अप्रासंगिक हिस्सों में कटौती करने के बाद मैं sampledValue = [close to] 0.0 की लंबी अवधि की तलाश कर सकता हूं।

+0

आपको बहुत धन्यवाद, टॉमी। मैंने सोचा कि मुझे केवल पीसीएम डेटा की तुलना वाक्यों के बीच विराम खोजने के लिए सीधे एक संख्या के साथ करने की आवश्यकता होगी। मेरी अज्ञानता क्षमा करें, लेकिन "नल" का क्या अर्थ है? 37 नल क्यों होनी चाहिए?क्या सरणी इनपुटवेव [] पीसीएम डेटा को संदर्भित करता है जैसे मैंने 16-बिट पूर्णांक का उल्लेख किया है? और क्या आपका उदाहरण कोड यह निर्धारित करने के लिए है कि नमूना इनपुटवेव [सी] चुप्पी का प्रतिनिधित्व करता है या नहीं? बहुत सारे प्रश्नों और मेरी गरीब अंग्रेजी के लिए खेद है। – xiaokaoy

+0

टैप्स इनपुट नमूने की संख्या के लिए सिग्नल प्रोसेसिंग शब्द है जो एक आउटपुट नमूना करने के लिए संयुक्त होते हैं। यह चीजों के हार्डवेयर परंपरा पक्ष से अधिक आता है। इसे 37 होने की आवश्यकता नहीं है, यह उस पृष्ठ पर सिर्फ डिफ़ॉल्ट है। आपको आमतौर पर व्यक्तिपरक प्रदर्शन के आधार पर चुनना चाहिए - अधिक = बेहतर, आमतौर पर। सीपीयू प्रदर्शन के रूप में, पूरी चीज के लिए अपने प्रोसेसर की सिमड इकाई का उपयोग करने में देखें (जिसका मतलब है कि युगल के बजाय निश्चित बिंदु शॉर्ट्स का उपयोग करना हो सकता है लेकिन जो भी हो)। आउटपुट एक फ़िल्टर की लहर है। आप इसे सीधे सुन सकते हैं। चुप्पी खोजने के लिए 0 के करीब लंबी अवधि की तलाश करें। – Tommy

संबंधित मुद्दे