Saya bekerja dengan AUGraph
dan Audio Units API untuk memutar dan merekam audio di aplikasi iOS saya. Sekarang saya memiliki masalah yang jarang terjadi ketika AUGraph
tidak dapat memulai dengan kesalahan berikut:
hasil = kAUGraphErr_CannotDoInCurrentContext (-10863)
Kesalahan terjadi tak terduga saat kami mencoba memanggil AUGraphStart
yang disiapkan untuk pemutaran audio:
(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;
}
Berikut yang kami dapatkan dari dokumentasi:
Untuk menghindari berputar atau menunggu di thread render (ide yang buruk!), Banyak panggilan ke AUGraph dapat mengembalikan: kAUGraphErr_CannotDoInCurrentContext. Hasil ini hanya dihasilkan saat Anda memanggil AUGraph API dari render callback-nya. Ini berarti bahwa kunci yang diperlukan dipegang pada saat itu, oleh utas lain . Jika Anda melihat kode hasil ini, Anda biasanya dapat mencoba tindakan itu lagi - biasanya siklus render NEXT (sehingga sementara itu kunci dapat dihapus), atau Anda dapat mendelegasikan panggilan tersebut ke thread lain di aplikasi Anda. Anda tidak boleh memutar atau menonaktifkan thread render.
Kode hasil ini hanya status sementara, yang akan diteruskan segera setelah panggilan utas Anda yang lain ke AUGraph (yang memiliki kunci) selesai.
Dalam kasus saya, saya baru memulai AUGraph
, ini baru dan baru saja dibuat. Bagaimana cara men-debug kasus dan apa yang mungkin menjadi masalah potensial di sini?
setupAudioForGraph
dilakukannya? Apakah Anda AUGraphInitialize grafik terlebih dahulu?