2012-05-29 9 views
5

मैकॉक्स में kAudioUnitSubType_VoiceProcessingIO उप प्रकार (kAudioUnitSubType_HALOutput) के साथ अंतर्निहित माइक्रो/स्पीकर का उपयोग करके मुझे सरल प्ले-थ्रू एप्लिकेशन का उदाहरण मिल रहा है। कोर ऑडियो एपीआई पर टिप्पणियां कहती हैं कि kAudioUnitSubType_VoiceProcessingIO डेस्कटॉप पर और आईफोन 3.0 या इससे अधिक के साथ उपलब्ध है, इसलिए मुझे लगता है कि मैकोस के लिए कहीं एक उदाहरण होना चाहिए।मैक ओएस में कोर ऑडियो एपीआई के "kAudioUnitSubType_VoiceProcessingIO" उपप्रकार का उपयोग कैसे करें?

क्या आपके पास कोई विचार है कि नमूना कहां है? या क्या कोई ऐसा व्यक्ति है जो मैकोज़ में kAudioUnitSubType_VoiceProcessingIO उप प्रकार का उपयोग करने के बारे में जानता है? मैंने पहले ही आईओएस में ऐसा ही प्रयास किया है, लेकिन यह काम नहीं करता है।

उत्तर

5

मैंने इस आईओ इकाई को सक्षम करने वाली कुछ चीजों की खोज की।

  1. स्ट्रीम प्रारूप वास्तव में picky है। यह
    • LinearPCM
    • FlagsCononical
    • 32 प्रति चैनल बिट्स हो गया है
    • (मैं 1 चैनल की थी, लेकिन इसे और अधिक के साथ काम कर सकते हैं) -
    • नमूना दर 44100 (अन्य लोगों के साथ काम कर सकते हैं नहीं हो सकता है)
  2. आप इसे सक्षमियो सेट नहीं करते हैं। आईओ डिफ़ॉल्ट रूप से सक्षम है और वह संपत्ति लिखने योग्य नहीं है।
  3. आरंभ करने से पहले स्ट्रीम प्रारूप सेट करें।

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

+0

धन्यवाद, यह अन्य नमूना दरों के साथ भी काम करता है (मैं 16 000 का उपयोग कर रहा हूं)। फ्लैग्स कैनोनिकल प्रारूप का मतलब मैक ओएस एक्स फ्लोट 32 में -1.0 से 1.0 तक है। – sarsonj

+0

@sarsonj: क्या आप वाकई डिफ़ॉल्ट 44100 के अलावा नमूना दर के साथ काम कर सकते हैं? मुझे 16000 या 48000 सेट करने का प्रयास करते समय kAudioUnitErr_FormatNot समर्थित नहीं किया गया। – Erfan

+0

मै मैक पर KAudioFormatFlagsCanonical के साथ एक चैनल, 16000 का उपयोग कर रहा हूं और यह ठीक काम कर रहा है। – sarsonj

2

चैनलों की संख्या के आधार पर मेरे पास दो अलग-अलग kAudioUnitProperty_StreamFormat सेटअप था।

size_t bytesPerSample = sizeof (AudioUnitSampleType); 
stereoStreamFormat.mFormatID   = kAudioFormatLinearPCM; 
stereoStreamFormat.mFormatFlags  = kAudioFormatFlagsAudioUnitCanonical; 
stereoStreamFormat.mBytesPerPacket = bytesPerSample; 
stereoStreamFormat.mFramesPerPacket = 1; 
stereoStreamFormat.mBytesPerFrame  = bytesPerSample; 
stereoStreamFormat.mChannelsPerFrame = 2; 
stereoStreamFormat.mBitsPerChannel = 8 * bytesPerSample; 
stereoStreamFormat.mSampleRate  = graphSampleRate; 

और

size_t bytesPerSample = sizeof (AudioUnitSampleType); 
monoStreamFormat.mFormatID   = kAudioFormatLinearPCM; 
monoStreamFormat.mFormatFlags  = kAudioFormatFlagsAudioUnitCanonical; 
monoStreamFormat.mBytesPerPacket = bytesPerSample; 
monoStreamFormat.mFramesPerPacket = 1; 
monoStreamFormat.mBytesPerFrame  = bytesPerSample; 
monoStreamFormat.mChannelsPerFrame = 1;     // 1 indicates mono 
monoStreamFormat.mBitsPerChannel = 8 * bytesPerSample; 
monoStreamFormat.mSampleRate  = graphSampleRate; 
इस ऑडियो स्ट्रीम प्रारूपों के साथ

जब एक kAudioUnitSubType_VoiceProcessingIO

AudioComponentDescription iOUnitDescription; 
iOUnitDescription.componentType = kAudioUnitType_Output; 
iOUnitDescription.componentSubType = kAudioUnitSubType_VoiceProcessingIO; 
iOUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple; 
iOUnitDescription.componentFlags = 0; 
iOUnitDescription.componentFlagsMask = 0; 

मैं स्पष्ट रूप से ऑडियो आउटपुट में एक रुकावट के रूप में देख सकते हैं मैं/हे इकाई का उपयोग, के रूप में इस ऑडियो यूनीट से बफर आकार छोटा था।

kAudioUnitSubType_RemoteIO पर वापस स्विच करने

iOUnitDescription.componentSubType = kAudioUnitSubType_RemoteIO;

वह व्यवधान गायब हो गया।

मैं माइक्रोफोन से ऑडियो इनपुट प्रोसेस कर रहा हूं और ऑडियो बफर पर कुछ वास्तविक समय गणना लागू कर रहा हूं।

तरीकों में graphSampleRate AVSession नमूना दर

graphSampleRate = [AVAudioSession sharedInstance] sampleRate]; 

और हो सकता है यहाँ मैं गलत हूँ है।

अंत में कॉन्फ़िगरेशन पैरामीटर मान निम्नलिखित हैं:

स्टीरियो स्ट्रीम प्रारूप:

Sample Rate:    44100 
Format ID:     lpcm 
Format Flags:    3116 
Bytes per Packet:    4 
Frames per Packet:   1 
Bytes per Frame:    4 
Channels per Frame:   2 
Bits per Channel:   32 

मोनो स्ट्रीम प्रारूप:

Sample Rate:    44100 
Format ID:     lpcm 
Format Flags:    3116 
Bytes per Packet:    4 
Frames per Packet:   1 
Bytes per Frame:    4 
Channels per Frame:   1 
Bits per Channel:   32 
0

SO post here के लिए धन्यवाद मुझे एहसास हुआ कि मैं चाहिए इस ध्वज का उपयोग किया है:

audioFormat.mFormatFlags  = kAudioFormatFlagsCanonical; 
संबंधित मुद्दे