मैं AUGraph
अपने iOS ऐप में ऑडियो प्लेबैक और रिकॉर्ड करने के लिए ऑडियो यूनिट एपीआई के साथ काम कर रहा हूं । अब मेरे पास एक दुर्लभ समस्या है जब एक AUGraph
निम्नलिखित त्रुटि के साथ शुरू करने में असमर्थ है:
परिणाम = kAUGraphErr_CannotDoInCurrentContext (-10863)
त्रुटि अप्रत्याशित रूप से तब होती है जब हम कॉल करने का प्रयास करते हैं AUGraphStart
जो ऑडियो प्लेबैक के लिए सेट किया गया है:
(BOOL)startRendering
{
if (playing) {
return YES;
}
playing = YES;
if (NO == [self setupAudioForGraph:&au_play_graph playout:YES]) {
print_error("Failed to create play AUGraph",0);
playing = NO;
return NO;
}
//result = kAUGraphErr_CannotDoInCurrentContext (-10863)
OSStatus result = AUGraphStart(au_play_graph);
if (noErr != result) {
print_error("AUGraphStart", result);
playing = NO;
}
return playing;
}
यहाँ हम प्रलेखन से क्या प्राप्त करते हैं:
रेंडरिंग थ्रेड (एक बुरे विचार!) में कताई या प्रतीक्षा से बचने के लिए, ऑग्राफ के लिए कई कॉल वापस आ सकते हैं: kAUGraphErr_CannotDoInCurrentContext। यह परिणाम केवल तब उत्पन्न होता है जब आप इसके रेंडर कॉलबैक से AUGraph API कॉल करते हैं। इसका मतलब यह है कि उस ताला की आवश्यकता थी जो उस समय आयोजित किया गया था, एक और धागा द्वारा । यदि आप इस परिणाम कोड को देखते हैं, तो आप आम तौर पर फिर से कार्रवाई का प्रयास कर सकते हैं - आम तौर पर अगला रेंडर चक्र (इस बीच लॉक को साफ किया जा सकता है), या आप उस कॉल को अपने ऐप में किसी अन्य थ्रेड को सौंप सकते हैं। आपको रेंडर थ्रेड को स्पिन या पुट-टू-स्लीप नहीं करना चाहिए।
यह परिणाम कोड केवल एक क्षणभंगुर अवस्था है, जो जैसे ही आपके अन्य थ्रेड के AUGraph पर कॉल करेगा (जिसमें लॉक पूरा हो गया है)।
मेरे मामले में, मैं अभी शुरू करता हूं AUGraph
, यह नया है और अभी बनाया गया है। मैं मामले को कैसे डिबग कर सकता हूं और यहां संभावित मुद्दा क्या हो सकता है?
setupAudioForGraph
है? क्या आपने पहले ग्राफ़ का AUGraphInitialize किया था?