ऑडियो रिकॉर्ड करने के लिए Android AudioRecord बनाम MediaRecorder


91

मैं अपने एंड्रॉइड फोन पर मानव आवाज रिकॉर्ड करना चाहता हूं। मैंने देखा है कि एंड्रॉयड दो वर्गों यह करने के लिए दिया गया है: AudioRecord और MediaRecorder । क्या कोई मुझे बता सकता है कि दोनों के बीच क्या अंतर है और प्रत्येक के लिए उपयुक्त उपयोग के मामले क्या हैं?

मैं आयाम आदि को मापने के लिए वास्तविक समय में मानव भाषण का विश्लेषण करने में सक्षम होना चाहता हूं, क्या मैं यह समझने में सही हूं कि ऑडियोकार्ड इस कार्य के लिए बेहतर अनुकूल है?

मैंने ऑडियो रिकॉर्ड करने के लिए आधिकारिक एंड्रॉइड गाइड वेबपेज पर देखा , वे MediaRecorder का उपयोग करते हैं जिसमें AudioRecord का कोई उल्लेख नहीं है।

जवाबों:


82

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


क्या आपके पास AudioRecord का नमूना कोड है? मैंने जो पाया है उनमें से ज्यादातर मीडियाक्रेटर हैं ...
रोमेल पारस

@RommelParas एंड्रॉइड स्रोत के लिए "टेलीग्राम" में इस वर्ग में दिखते हैं। github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
डेविड

@ डेविड क्या आप एक अधिक बुनियादी नमूने के बारे में जानते हैं? एक जो अपने आप काम करता है?
Android डेवलपर

@androiddeveloper दुर्भाग्य से नहीं।
डेविड

33

जैसा कि मैं समझता हूं कि MediaRecorderएक ब्लैक बॉक्स है जो आउटपुट पर संपीड़ित ऑडियो फ़ाइल AudioRecorderदेता है और आपको सिर्फ कच्ची ध्वनि स्ट्रीम देता है और आपको इसे अपने आप से संपीड़ित करना होगा।

MediaRecorderआपको अंतिम कॉल getMaxAmplitude()विधि से अधिकतम योग्यता प्रदान करता है ताकि आप उदाहरण के लिए एक ध्वनि विज़ुअलाइज़र को लागू कर सकें।

तो ज्यादातर मामलों MediaRecorderमें उन लोगों को छोड़कर सबसे अच्छा विकल्प है, जिसमें आपको कुछ जटिल ध्वनि प्रसंस्करण करना चाहिए और आपको कच्चे ऑडियो स्ट्रीम तक पहुंच की आवश्यकता है।


GetMaxAmplitude () विधि का उल्लेख करने के लिए धन्यवाद। सबसे अधिक संभावना है कि मुझे इसकी आवश्यकता है।
धीरज भास्कर

मैं MediaRecorder का उपयोग करके विज़ुअलाइज़र कैसे लागू कर सकता हूं?
वनपंचमैन

GetMaxAmplitude क्या वास्तव में यहाँ मदद करता है? क्या आपको विज़ुअलाइज़र के लिए हर एक क्षण में वर्तमान प्राप्त करने की आवश्यकता नहीं है?
Android डेवलपर

18

AudioRecorderer पहले minBuffer में डेटा बचाता है फिर इसे वहां से अस्थायी बफर में कॉपी किया जाता है, MediaRecorder में इसे फाइलों में कॉपी किया जाता है। AudioRecorder में हमें आवश्यक स्थिति में सहेजे गए डेटा को कॉपी करने के लिए api setRecordPosition () की आवश्यकता होती है, जबकि MediaRecorder में फ़ाइल पॉइंटर इस कार्य को मार्कर की स्थिति निर्धारित करने के लिए करता है। AudioRecorder का उपयोग उन ऐप्स के लिए किया जा सकता है, जो एक एमुलेटर पर चलते हैं, यह 8000 जैसे कम नमूना दर प्रदान करके किया जा सकता है, जबकि MediaRecorder का उपयोग करके ऑडियो को एमुलेटर का उपयोग करके रिकॉर्ड नहीं किया जा सकता है। AudioRecord में स्क्रीन कुछ देर बाद सोती है, जबकि MediaRecorder में स्क्रीन पर नींद नहीं आती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.