2012-12-10 7 views
8

के बीच मात्रा ड्रॉप स्विचिंग मेरे ऐप में मैं इन 2 अलग AudioUnits के बीच स्विच करने की जरूरत है। जब भी मैं वीपीआईओ से रिमोटियो में स्विच करता हूं, तो मेरी रिकॉर्डिंग वॉल्यूम में एक बूंद होती है। काफी महत्वपूर्ण गिरावट। हालांकि प्लेबैक वॉल्यूम में कोई बदलाव नहीं। किसी को भी इसका अनुभव हुआ?रिकॉर्डिंग RemoteIO और VPIO

यहां कोड है जहां मैं स्विच करता हूं, जो रूटिंग परिवर्तन से ट्रिगर होता है। (मुझे यकीन नहीं है कि मैंने सही ढंग से बदलाव किया है, इसलिए मैं यहां भी पूछ रहा हूं।)

रिकॉर्डिंग वॉल्यूम ड्रॉप की समस्या को मैं कैसे हल करूं?

धन्यवाद, किसी भी मदद मैं प्राप्त कर सकते हैं की सराहना करते हैं।

पियर।

- (void)switchInputBoxTo : (OSType) inputBoxSubType 
{ 
OSStatus result; 

if (!remoteIONode) return; // NULL check 

// Get info about current output node 
AudioComponentDescription outputACD; 
AudioUnit currentOutputUnit; 

AUGraphNodeInfo(theGraph, remoteIONode, &outputACD, &currentOutputUnit); 

if (outputACD.componentSubType != inputBoxSubType) 
{ 
    AUGraphStop(theGraph); 
    AUGraphUninitialize(theGraph); 
    result = AUGraphDisconnectNodeInput(theGraph, remoteIONode, 0); 
    NSCAssert (result == noErr, @"Unable to disconnect the nodes in the audio processing graph. Error code: %d '%.4s'", (int) result, (const char *)&result); 
    AUGraphRemoveNode(theGraph, remoteIONode); 
    // Re-init as other type 

    outputACD.componentSubType = inputBoxSubType; 
    // Add the RemoteIO unit node to the graph 
    result = AUGraphAddNode (theGraph, &outputACD, &remoteIONode); 
    NSCAssert (result == noErr, @"Unable to add the replacement IO unit to the audio processing graph. Error code: %d '%.4s'", (int) result, (const char *)&result); 

    result = AUGraphConnectNodeInput(theGraph, mixerNode, 0, remoteIONode, 0); 
    // Obtain a reference to the I/O unit from its node 
    result = AUGraphNodeInfo (theGraph, remoteIONode, 0, &_remoteIOUnit); 
    NSCAssert (result == noErr, @"Unable to obtain a reference to the I/O unit. Error code: %d '%.4s'", (int) result, (const char *)&result); 

    //result = AudioUnitUninitialize(_remoteIOUnit); 

    [self setupRemoteIOTest]; // reinit all that remoteIO/voiceProcessing stuff 
    [self configureAndStartAudioProcessingGraph:theGraph]; 
} 
} 

उत्तर

5

मैं इस के लिए मेरे सेब डेवलपर समर्थन करते थे। यहां बताया गया समर्थन क्या है:

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

उस ने कहा, कोर ऑडियो इंजीनियरिंग ने संकेत दिया है कि आपके परिणाम तब से संबंधित हो सकते हैं जब वॉयस ब्लॉक बनाया जाता है, यह आरआईओ उदाहरण को भी प्रभावित कर रहा है। आगे की चर्चा पर, मुख्य ऑडियो इंजीनियरिंग यह महसूस किया गया कि जब आप कहते हैं स्तर अंतर बहुत कठोर यह इसलिए यह अच्छा होगा अगर आप स्तर अंतर आप आवाज के बीच सुनवाई कर रहे हैं कि उजागर करने के लिए कुछ रिकॉर्डिंग पर बग के बारे सकता है मैं/हे और रिमोट I/O आपके टेस्ट कोड के साथ-साथ हम घर में पुन: पेश करने का प्रयास कर सकते हैं और देख सकते हैं कि यह वास्तव में एक बग है या नहीं। उपरोक्त उल्लिखित गायक आईओ यूनिट परीक्षणों के साथ-साथ तुलनात्मक परिणामों के परिणाम शामिल करना एक अच्छा विचार होगा।

कोई लाभ नहीं है जो इस लाभ स्तर को नियंत्रित करता है, ऑडियो सत्र श्रेणी (उदाहरण के लिए वीपीआईओ हमेशा PlayAndRecord के साथ उपयोग होने की उम्मीद है) के आधार पर ओएस द्वारा आंतरिक रूप से सेटअप किया जाता है और जो आईओ इकाई स्थापित की गई है। आम तौर पर यह उम्मीद नहीं की जाती है कि दोनों एक साथ तत्काल हो जाएंगे।

निष्कर्ष? मुझे लगता है कि यह एक बग है। :/

2

वहाँ कम मात्रा मुद्दों के बारे में कुछ बात करते हैं अगर आप अपने ऑडियो इकाई के सही ढंग से निपटाने नहीं है। असल में, पहला ऑडियो घटक स्मृति में रहता है और किसी भी लगातार प्लेबैक को आपके या अन्य ऐप्स के नीचे डक किया जाएगा, जिससे वॉल्यूम ड्रॉप हो जाएगा।

समाधान: ऑडियो इकाइयों AudioComponentInstance के होते हैं और AudioComponentInstanceDispose का उपयोग कर मुक्त कर दिया जाना चाहिए()।

+1

हाय चट्टानी, मैंने कोशिश की है। क्योंकि मैं AUGraphNodeInfo (theGraph, remoteionode, 0, और _remoteIOUnit) का उपयोग करता हूं; रिमोटियो उदाहरण प्राप्त करने के लिए, ऐसा लगता है कि मैं AudioComponentInstanceDispose (यह क्रैश) का उपयोग नहीं कर सकता। मैंने उस पोस्ट को पढ़ लिया है जिसके बारे में आप बात कर रहे हैं। मेरे लिए काम नहीं लग रहा है:/ – lppier

2

जब मैं ऑडियो सत्र श्रेणी बदलने जब आवाज प्रसंस्करण कब (PlayAndRecord) रिमोट आईओ (SoloAmbient) करने के लिए जा रहा से मैं सफलता मिली है। सुनिश्चित करें कि आप इसे बदलने से पहले ऑडियो सत्र को रोक दें। आपको ऑडियो ग्राफ़ भी अनइंस्टॉल करना होगा।

+0

यह मेरे लिए काम करता है, धन्यवाद! – scharli

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