Estoy trabajando con la AUGraph
API de Audio Units para reproducir y grabar audio en mi aplicación iOS. Ahora tengo un problema poco común cuando AUGraph
no puedo comenzar con el siguiente error:
resultado = kAUGraphErr_CannotDoInCurrentContext (-10863)
El error ocurrió de manera impredecible cuando intentamos llamar al AUGraphStart
que está configurado para la reproducción de 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;
}
Aquí lo que obtenemos de la documentación:
Para evitar girar o esperar en el hilo de renderizado (¡una mala idea!), Muchas de las llamadas a AUGraph pueden devolver: kAUGraphErr_CannotDoInCurrentContext. Este resultado solo se genera cuando llama a una API AUGraph desde su devolución de llamada de renderizado. Significa que el bloqueo que requería estaba retenido en ese momento, por otro hilo . Si ve este código de resultado, generalmente puede intentar la acción nuevamente, generalmente el SIGUIENTE ciclo de procesamiento (por lo que, mientras tanto, se puede borrar el bloqueo), o puede delegar esa llamada a otro hilo en su aplicación. No debe girar o poner en suspensión el hilo de renderizado.
Este código de resultado es solo un estado transitorio, que pasará tan pronto como se complete la llamada de su otro hilo a AUGraph (que tiene el bloqueo).
En mi caso, acabo de empezar AUGraph
, es nuevo y recién creado. ¿Cómo puedo depurar el caso y cuál podría ser el problema potencial aquí?
setupAudioForGraph
hacer? ¿AUGraphInitializó el gráfico primero?