2011-04-12 20 views
7

मैं एक आईओएस प्रोजेक्ट पर काम कर रहा हूं जिसके लिए ध्वनिक गूंज रद्द करने की आवश्यकता है ताकि kAudioUnitSubType_VoiceProcessingIO उप प्रकार एक अच्छा विकल्प प्रतीत होता है। नीचे मेरे ऑडियो इकाई वर्णनऑडियो ग्राफ प्रारंभिक त्रुटि kAudioUnitSubType_VoiceProcessingIO ऑडियो IO इकाई उप प्रकार

//io unit description 
AudioComponentDescription ioUnitDescription; 
ioUnitDescription.componentType = kAudioUnitType_Output; 
ioUnitDescription.componentSubType = kAudioUnitSubType_VoiceProcessingIO; 
ioUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple; 
ioUnitDescription.componentFlags = 0; 
ioUnitDescription.componentFlagsMask = 0; 

और RemoteIO उप-प्रकार के साथ अपने अनुभव के आधार पर है, मैं इनपुट तत्व सक्रिय:

UInt32 enable = 1; 
AudioUnitSetProperty(ioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, 1, &enable, sizeof(enable)); 

हालांकि, जब ऑडियो ग्राफ आरंभ मैं त्रुटि मिली। वॉयसप्रोसेसिंगियो को रिमोटियो द्वारा प्रतिस्थापित किया गया है, तो वही ऑडियो ग्राफ अच्छी तरह से काम करता है।

क्या रिमोटियो और वॉयसप्रोसेसिंगियो के बीच कोई अंतर है जिसके लिए विशेष ध्यान देने की आवश्यकता है?

धन्यवाद, Chuankai

+0

खेद एक ही सवाल पर टिप्पणी करने से लेकिन आप प्रतिध्वनि रद्द यह पता लगाने की है? सेब डॉक्स इस सुविधा वाले ध्वनि प्रसंस्करण आईओ का जिक्र करते रहते हैं लेकिन मुझे इसका कहीं भी उदाहरण नहीं मिल रहा है। मैं वास्तव में इसकी सराहना करता हूं –

उत्तर

1

मेरे अनुभव में VoiceProcessingIO ऑडियो इकाई और अधिक नकचढ़ा बफर आकार और नमूना दर के बारे में है। 32000 हर्ट्ज से नीचे नमूना दर का प्रयास करें (शायद 8000 हर्ट्ज से शुरू करें और अपना रास्ता ऊपर की ओर करें) और काफी बड़ा बफर आकार (2048 नमूने या तो कहें)। यह दस्तावेज नहीं है। एक बार मुझे एक फ़ाइल दर्ज करने का मौका मिलने के बाद तीसरा नंबर आना होगा।

मैं स्थापना के दौरान निम्न स्वरूप का उपयोग:

size_t bytesPerSample = sizeof(AudioSampleType); 
    AudioStreamBasicDescription canonicalFormat; 
    canonicalFormat.mSampleRate   = self.samplerate; 
    canonicalFormat.mFormatID   = kAudioFormatLinearPCM; 
    canonicalFormat.mFormatFlags  = kAudioFormatFlagsCanonical; 
    canonicalFormat.mFramesPerPacket = 1; 
    canonicalFormat.mChannelsPerFrame = 1; 
    canonicalFormat.mBitsPerChannel  = 8 * bytesPerSample; 
    canonicalFormat.mBytesPerPacket  = bytesPerSample; 
    canonicalFormat.mBytesPerFrame  = bytesPerSample;