Estou trabalhando com uma AUGraph
API de unidades de áudio para reproduzir e gravar áudio em meu aplicativo iOS. Agora, tenho um problema raro em que um AUGraph
não consegue iniciar com o seguinte erro:
result = kAUGraphErr_CannotDoInCurrentContext (-10863)
O erro ocorreu de forma imprevisível quando tentamos chamar o AUGraphStart
que está configurado para reprodução de áudio:
(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;
}
Aqui está o que obtemos da documentação:
Para evitar girar ou esperar no thread de renderização (uma má ideia!), Muitas das chamadas para AUGraph podem retornar: kAUGraphErr_CannotDoInCurrentContext. Este resultado é gerado apenas quando você chama uma API AUGraph de seu retorno de chamada de renderização. Isso significa que o bloqueio necessário foi mantido naquele momento, por outro encadeamento . Se você vir este código de resultado, geralmente pode tentar a ação novamente - normalmente o ciclo de renderização PRÓXIMO (então, enquanto isso, o bloqueio pode ser limpo), ou pode delegar essa chamada para outro encadeamento em seu aplicativo. Você não deve girar ou suspender o thread de renderização.
Este código de resultado é apenas um estado transitório, que passará assim que a chamada de sua outra thread para AUGraph (que tem o bloqueio) for concluída.
No meu caso, acabei de iniciar o AUGraph
, é novo e acabou de criar. Como posso depurar o caso e qual pode ser o problema potencial aqui?
setupAudioForGraph
fazer? Você AUGraphInitialize o gráfico primeiro?