2015-11-20 11 views
5

मेरा लक्ष्य कम विलंबता के साथ डिवाइस के माइक्रोफ़ोन इनपुट रिकॉर्ड करते समय स्थानीय फ़ाइल को चलाने का है। मैं सुपरपावर्ड लाइब्रेरी में आया हूं, क्योंकि प्रलेखन से यह कम विलंबता सुविधा प्रदान करता है। मैंने SuperpoweredAdvancedAudioPlayer और SuperpoweredAndroidAudioIO का उपयोग कर प्लेयर बनाया है और यह ठीक खेलता है।एंड्रॉइड सुपरपावर्ड एसडीके रिकॉर्ड और प्लेबैक एक साथ

सुपरपावर्ड एंड्रॉइडऑडियोियोओ पैरामीटर बूलियन सक्षम इनपुट, बूलियन सक्षमऑटपुट के साथ कंस्ट्रक्शन है। वर्तमान में मैं enableInput == झूठी और enableOutput == सत्य का उपयोग कर रहा हूं। जब मैं इन पैरामीटर को सत्य में डालता हूं - कोई प्रभाव नहीं।

मुझे आश्चर्य है कि फ़ाइल रिकॉर्ड करना और दूसरी फ़ाइल को एक साथ खेलना संभव है?

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

void SuperpoweredFileRecorder::start(const char *destinationPath) { 
    file = createWAV(destinationPath, sampleRate, 2); 
    audioIO = new SuperpoweredAndroidAudioIO(sampleRate, bufferSize, true, false, audioProcessing, NULL, bufferSize); // Start audio input/output. 
} 

void SuperpoweredFileRecorder::stop() { 
    closeWAV(file); 
    audioIO->stop(); 
} 

static bool audioProcessing(void *clientdata, short int *audioInputOutput, int numberOfSamples, int samplerate) { 
    fwrite(audioInputOutput, sizeof(short int), numberOfSamples, file); 
    return false; 
} 

शायद मैं उस उद्देश्य के लिए महाशक्तिशाली उपयोग नहीं कर सकते और बस सीधे OpenSL ES के साथ रिकॉर्डिंग बनाने की जरूरत है: यहाँ रिकॉर्डिंग के लिए कोड का सबसे सरल टुकड़ा मैं प्रयोग किया जाता है।

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

उत्तर

5

को बढ़ावा मिलेगा दोगुना प्रयोगों के बाद मैं समाधान मिल गया।

  1. सुपरपावर्ड रेकॉर्डर रिकॉर्डिंग ट्रैक के लिए ठीक काम करता है;
  2. मैंने सुपरपावर्ड एंड्रॉइडऑडियोियो स्रोतों को अलग करने के लिए बनाया है - एक प्लेबैक के लिए और दूसरा रिकॉर्डर के लिए। कुछ सिंक्रनाइज़ेशन मैनिपुलेशन के बाद यह अच्छी तरह से काम करता है (मैंने बहुत कम स्तर पर विलंबता को कम किया है, इसलिए यह मेरी आवश्यकताओं के अनुरूप है)।

    https://bitbucket.org/snippets/kasurd/Mynnp/nativesuperpoweredrecorder-with

    आशा है कि यह किसी को मदद मिलती है:

मैं विचार मैं कार्यान्वित के साथ कुछ कोड का टुकड़ा पोस्ट!

+0

सुपरपावर्ड एंड्रॉइडऑडियोियो इसका ख्याल रखता है। कई उदाहरण होने के कारण कोड की अनावश्यक राशि है। –

+0

क्या आप कृपया फाइल में प्रभाव लागू करने के बाद ऑडियो के आउटपुट को लिख सकते हैं? –

+1

@kasurd क्या आप कृपया उचित कार्यान्वयन के साथ गिटहब लिंक साझा कर सकते हैं। यह बहुत उपयोगी होगा .. –

0

मेरे लिए यह काम करता है जब मैं numberOfSamples

fwrite(audioInputOutput, sizeof(short int), numberOfSamples * 2, file); 

यह एक स्पष्ट स्टीरियो उत्पादन

+0

क्या आप कृपया बता सकते हैं कि फ़ाइल में प्रभाव लागू करने के बाद आप ऑडियो के आउटपुट को कैसे लिखते हैं? –

+0

इस प्रश्न के साथ मदद की ज़रूरत है, http://stackoverflow.com/questions/42316295/how-to-write-file-to-external-storage-using-superpowered-sdk-in-android –

4

आप सक्षम इनपुट के साथ SuperpoweredAndroidAudioIO के एक उदाहरण के साथ ऐसा कर सकते हैं और TrueOutput को सत्य पर सेट कर सकते हैं।

ऑडियो प्रोसेसिंग कॉलबैक (आपके मामले में ऑडियोप्रोसेसिंग)) ऑडियो इनपुट आउटपुट पैरामीटर में ऑडियो (माइक्रोफोन) प्राप्त करता है। बस इसे अपने SuperpoweredRecorder पर पास करें, और यह इसे डिस्क पर लिख देगा।

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

audioProcessing(audioInputOutput) { 
    recorder->process(audioInputOutput) 
    player->process(some_buffer) 
    float_to_short_int(some_buffer, audioInputOutput) 
} 

कभी ऑडियो प्रसंस्करण कॉलबैक में किसी भी fwrite करते हैं,:

तो यह की तरह है, छद्म कोड में।

+0

धन्यवाद, टिप्पणी के लिए गैबर। मैं इस दृष्टिकोण से शुरू हुआ था, लेकिन फिर ऐसा प्रतीत होता है कि मुझे दो-तीन प्लेबैक और एक रिकॉर्डर एक साथ चाहिए। मैंने अलग SuperpoweredAndroidAudioIO पर स्विच करने का फैसला किया। क्या आपका दृष्टिकोण मेरे मामले के लिए भी काम करेगा? – kasurd

+0

हां, ज़ाहिर है। एकाधिक खिलाड़ी एक ही बफर में संसाधित कर सकते हैं। प्रक्रिया() विधि में बफर जोड़ें पैरामीटर, बस इसे सही पर सेट करें, और सभी के लिए एक ही बफर का उपयोग करें। –

+0

क्या आप कृपया फाइल में प्रभाव लागू करने के बाद ऑडियो के आउटपुट को लिख सकते हैं? –

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