2013-08-21 3 views
27

मैं टॉकिंग टॉम ऐप के समान स्वचालित वॉयस रिकॉर्डिंग कार्यक्षमता को लागू करने की कोशिश कर रहा हूं। मैं निम्नलिखित कोड का उपयोग ऑडियो रिकॉर्डर से इनपुट पढ़ सकते हैं और बफर विश्लेषण करने के लिए:ऑडियो फ़ाइल इनपुट से मानव आवाज का पता लगाएं

float totalAbsValue = 0.0f; 
short sample = 0; 

numberOfReadBytes = audioRecorder.read(audioBuffer, 0, bufferSizeInBytes); 

// Analyze Sound. 
for(int i=0; i<bufferSizeInBytes; i+=2) 
{ 
    sample = (short)((audioBuffer[i]) | audioBuffer[i + 1] << 8); 
    totalAbsValue += Math.abs(sample)/(numberOfReadBytes/2); 
} 

// Analyze temp buffer. 
tempFloatBuffer[tempIndex%3] = totalAbsValue; 
float temp = 0.0f; 

for(int i=0; i<3; ++i) 
temp += tempFloatBuffer[i]; 

अब मैं ध्वनि इनपुट ऑडियो रिकॉर्डर से आ रही पता लगाने में सक्षम हूँ और मैं ऑडियो बफर का विश्लेषण कर सकते हैं।

बफर को एक फ्लोट वैल्यू में परिवर्तित किया जाता है और यदि यह किसी निश्चित राशि से बढ़ता है, तो यह माना जाता है कि पृष्ठभूमि में कुछ ध्वनि है और रिकॉर्डिंग शुरू हो गई है। लेकिन समस्या यह है कि ऐप प्रशंसक/एसी डक्ट ध्वनियों सहित सभी पृष्ठभूमि शोर रिकॉर्डिंग शुरू करता है।

क्या कोई भी मानव आवाज का पता लगाने के लिए बफर का विश्लेषण करने में मेरी सहायता कर सकता है? या ऑडियो रिकॉर्डर इनपुट से मानव आवाज का पता लगाने के लिए कोई और वैकल्पिक तरीका हैं?

अग्रिम धन्यवाद,

+1

क्या आप मानव आवाज की विशेषताओं को जानते हैं जो इसे पृष्ठभूमि शोर से अलग करते हैं? – icedwater

+0

@icedwater कोई विचार दोस्त .. – Timson

+7

समय-निर्भर आवृत्ति विश्लेषण + एक तंत्रिका नेटवर्क चाल करना चाहिए। आखिरकार, इंसानों ने स्वाभाविक रूप से ऐसा किया है। –

उत्तर

2

तरह से इनपुट पर कार्रवाई करने के लिए एक विशेष पुस्तकालय जो शोर को हटा उपयोग करने के लिए है।

उदाहरण के लिए, http://audacity.sourceforge.net, शोर हटाने को करता है।

जब तक आप मुख्य प्रकार के शोर की विशेषता रखते हैं, तो आपके पास केवल भाषण शेष होना चाहिए।

उपयोगकर्ता से कैप्चर करने से पहले नमूना डेटा एकत्र करना उचित होगा, और उपयोगकर्ता के कब्जे को समाप्त करने के बाद, क्योंकि यह पर्यावरण में शोर के समय के नमूने प्रदान करेगा। यह उपयोगी है अगर प्रत्येक उपयोगकर्ता को अद्वितीय पृष्ठभूमि शोर चुनौतियों का सामना करना पड़ता है।

+5

ऑडैसिटी एंड्रॉइड लाइब्रेरी नहीं है। –

+0

पर्याप्त मेला; क्या आप कह रहे हैं कि जो समाधान आप चाहते हैं वह एंड्रॉइड-केवल पुस्तकालयों तक सीमित है, या आप पोर्टिंग पर विचार कर रहे हैं प्रोजेक्ट के हिस्से के रूप में एक लाइब्रेरी? –

+0

@ बिलगेट्स वास्तव में आप? व्हाया –

9

ध्वनि पहचान इतना आसान नहीं है। कई एल्गोरिदम हैं, उनमें से कुछ प्रकाशित हैं, उदाहरण के लिए GSM VAD। कई ओपन सोर्स वीएडी पुस्तकालय उपलब्ध हैं, उनमें से कुछ पर चर्चा की गई है here

1

क्या आपने माइक्रोसॉफ्ट के भाषण पहचान एपीआई का उपयोग करने पर विचार किया है? रिकॉर्डिंग शुरू करने के लिए आप एक वॉयस कुंजी उच्चारण का उपयोग कर सकते हैं, जैसे स्टार ट्रेक में कंप्यूटर से कुछ पूछने से पहले वे "कंप्यूटर" कैसे कहते हैं। अपनी पहचान व्याकरण लोड करने और पहचान शुरू करने के लिए ISPRecognizer :: CreateRecoContext का उपयोग करें। फिर यह देखने के लिए कि क्या आपको रिकॉर्डिंग शुरू करनी चाहिए या नहीं, आईएसपीफेस के साथ एक चेक लागू करें।

+0

क्या आप इसे एंड्रॉइड डिवाइस पर इंस्टॉल करने के बारे में समझा सकते हैं? – Henry

2

आप वास्तव में क्या देख रहे हैं? क्या आप सिर्फ ऑडियो में मानव भाषण को फ़िल्टर करना चाहते हैं या आप वास्तव में जानना चाहते हैं कि व्यक्ति ने क्या कहा है?

मानव भाषण को फ़िल्टर करना लगभग हर स्मार्टफ़ोन द्वारा डिवाइस के पीछे एक दूसरे माइक्रोफ़ोन के साथ पृष्ठभूमि शोर रिकॉर्ड करके और दो सिग्नल घटाएं। लेकिन ईमानदार होने के लिए, मैंने कोई एंड्रॉइड एपीआई नहीं देखा है, आप सीधे दो सिग्नल तक पहुंच सकते हैं।

यदि आप टेक्स्ट रूपांतरण में भाषण करना चाहते हैं, तो स्फिंक्स 4 और प्रैट पर एक नज़र डालें। दोनों इस काम को फिर से करते हैं, मैंने एंड्रॉइड के लिए कार्यान्वयन नहीं देखा है। Sphinx4 जावा में पूरी तरह से लिखा जाने का दावा करता है, इसलिए इसे एंड्रॉइड ऐप में एम्बेड करना संभव होना चाहिए।

1

पूरी तरह से सामान्य मामले में, यह एक अनसुलझा समस्या है। व्यावहारिक अर्थ में ...

पहला कदम शोर-रहित जितना संभव हो सके रिकॉर्डिंग प्राप्त करना है। जैसा कि अन्य ने ध्यान दिया है, वह एक दिशात्मक माइक्रोफ़ोन से शुरू होता है जैसा कि आप जितनी संभव हो सके ध्वनि पर ध्यान केंद्रित करते हैं।

दूसरा चरण फ़िल्टरिंग है।जैसा कि पहले उल्लेख किया गया था, टेलीफोन कंपनी ने बहुत काम किया था जिस पर भाषण समझ के लिए मनुष्यों द्वारा आवृत्ति श्रेणियों की वास्तव में आवश्यकता होती है। उस सीमा के बाहर आवृत्तियों को फ़िल्टर करने से आवाज की आवाज़ ... अच्छी तरह से, एक टेलीफोन ... लेकिन पृष्ठभूमि शोर से अधिक छुटकारा पायेगी।

यदि आप उससे आगे जाना चाहते हैं, तो चीजें वास्तव में जटिल हो सकती हैं। कुछ एल्गोरिदम हैं, यदि आप उन्हें उस विशेष रिकॉर्डिंग पर शोर पर विचार करने का नमूना दिखा सकते हैं, तो इसका विश्लेषण करेंगे और ध्वनि को नुकसान पहुंचाए बिना इसे घटाएंगे, जिसे आप बहुत अधिक रखना चाहते हैं। यह सरल प्रोग्रामिंग नहीं है; अगर मैं आप थे तो मैं इसे किसी ऐसे व्यक्ति से खरीदने पर गंभीरता से विचार करूँगा जो इसे पहले से ही हासिल करने/इसे फिर से लागू करने की कोशिश करने के बजाय सही तरीके से प्राप्त कर चुका है। मुझे नहीं पता कि इनमें से कोई भी एंड्रॉइड के लिए उपलब्ध है या नहीं, चाहे विशिष्ट एंड्रॉइड बॉक्स में रीयलटाइम जैसी किसी भी चीज़ में उन्हें निष्पादित करने के लिए पर्याप्त कंप्यूटिंग पावर हो। (मैंने ए/सी शोर को हटाने के लिए स्टूडियो में साउंडसोप का उपयोग किया है, और यह बहुत अच्छी तरह से काम करता है।)

असल में, मेरा खुद का झुकाव हल करने के लिए समस्या को सरल बनाना होगा: सबसे दिशात्मक और निकटतम का उपयोग करें माइक मैं प्राप्त कर सकता था, एंड्रॉइड रिकॉर्डिंग करते हैं ... लेकिन फिर ऑफ-द-शेल्फ टूल का उपयोग करके इसे बाद में साफ़ करने के लिए सिग्नल प्रोसेसिंग करें। लेकिन मैं मानता हूं कि मैं पक्षपाती हूं क्योंकि मैंने पहले ही बाद में निवेश किया है।

0

उनमें से अधिकतर ने प्रश्न को गलत समझा है और उनके उत्तरों ने आपकी समस्याओं को अलग कर दिया है।

आपको ध्वनि बफर में आवृत्तियों की खोज करने वाले अपने बफर में ऑडियो को पार्स करना चाहिए। जैसे ही आप उन्हें पहचान लेंगे, इसका मतलब होगा कि किसी ने बात करना शुरू कर दिया है, और आप रिकॉर्डिंग शुरू कर सकते हैं (बफर को भी शामिल करना न भूलें क्योंकि इसमें भाषण का पहला भाग शामिल है)। कि एक ऑडियो कच्चे धारा

2

आवाज का पता लगाने, FTT एल्गोरिथ्म की कोशिश के लिए में आवृत्तियों की सूची प्रिंट दिनचर्या के लिए

खोजें।

शोर के लिए, speex लाइब्रेरी आज़माएं।

3

आप एक साफ रिकॉर्डिंग करना चाहते हैं आप आवाज से

  1. फ़िल्टर शोर, आप FFT कि के लिए इस्तेमाल करते हैं और इस तरह के लोपास, सबकुछ पार और बैंडपास फिल्टर के रूप में फिल्टर लागू कर सकते कर सकते हैं Filtering using FFT और Filters

2.After निस्पंदन शोर कम हो जाएगा और आप ध्वनि पहचान एपीआई

उपयोग कर सकते हैं

API's

अधिक बेहतर शोर फ़िल्टरिंग अधिक पहचान, लेकिन फ़िल्टरिंग में सावधान रहें क्योंकि यह ध्वनि को शोर के साथ एक साथ हटा सकता है।

इसके अलावा

Fast Fourier Transform of Human Voice

FFT

बारे में अधिक पढ़ने आशा है कि यह मदद करता है :)

+0

वॉयस रिकग्निशन एपीआई लिंक काम नहीं करता है .. "माफ़ी, लेकिन आपके द्वारा अनुरोधित पृष्ठ नहीं मिला। " – Timson

+0

@ टिमसन इसे आजमाएं http://android-developers.blogspot.com/2010/03/speech-input-api-for-android.html – user2705620

+0

या यह http://developer.android.com/reference/android/ भाषण/पैकेज-सारांश.html – user2705620

1

मैं विंडोज पर एक ऐसी ही समस्या को हल करने की कोशिश की। एक बात मैंने तेजी से सीखा - एक तेज फूरियर ट्रांसफॉर्म के साथ सरल आवृत्ति विश्लेषण पर्याप्त नहीं है। बहुत सारे शोर ने मानव आवृत्तियों को मारा - माइक्रोफोन पर हाथों को पकड़ने के लिए सरल नल से। यहां तक ​​कि परिष्कृत फ़िल्टरिंग के कुछ स्तर भी ऐसा नहीं करेंगे। मुझे क्लाउड एपीआई में शोर लेने का सबसे आसान तरीका मिल गया है और भाषण को लिखने के लिए कहें।यदि क्लाउड एपीआई उचित लंबाई स्ट्रिंग पर ट्रांसक्रिप्ट कर सकता है, तो मैं रिकॉर्डिंग जारी रख सकता हूं - अन्यथा, रिकॉर्डिंग रोकें। यह आवश्यक है कि आप कुछ शोर का नमूना लें और इसे क्लाउड प्रदाता को भेजें।

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