ฉันกำลังทำงานกับAUGraph
และ Audio Units API เพื่อเล่นและบันทึกเสียงในแอป 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;
}
สิ่งที่เราได้รับจากเอกสารประกอบมีดังนี้
เพื่อหลีกเลี่ยงการหมุนหรือรอในเธรดการแสดงผล (เป็นความคิดที่ไม่ดี!) การเรียกใช้ AUGraph จำนวนมากสามารถส่งคืน: kAUGraphErr_CannotDoInCurrentContext ผลลัพธ์นี้จะสร้างขึ้นเมื่อคุณเรียกใช้ AUGraph API จากการเรียกกลับการแสดงผลเท่านั้น ก็หมายความว่าล็อคที่ว่ามันต้องถูกจัดขึ้นในเวลานั้นโดยหัวข้ออื่น หากคุณเห็นรหัสผลลัพธ์นี้โดยทั่วไปคุณสามารถลองดำเนินการได้อีกครั้งโดยทั่วไปคือวงจรการแสดงผล NEXT (ในระหว่างนี้คุณสามารถล้างการล็อกได้) หรือคุณสามารถมอบหมายการโทรนั้นไปยังชุดข้อความอื่นในแอปของคุณ คุณไม่ควรหมุนหรือพักการแสดงเธรด
รหัสผลลัพธ์นี้เป็นเพียงสถานะชั่วคราวซึ่งจะส่งต่อทันทีที่เธรดอื่นของคุณเรียก AUGraph (ที่มีการล็อก) เสร็จสิ้น
ในกรณีของฉันฉันเพิ่งเริ่มAUGraph
มันใหม่และเพิ่งสร้างขึ้น ฉันจะแก้ไขข้อบกพร่องของเคสได้อย่างไรและอะไรคือปัญหาที่อาจเกิดขึ้นที่นี่
setupAudioForGraph
ทำอย่างไร คุณ AUGraph เริ่มต้นกราฟก่อนหรือไม่?