Я работаю с 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. Этот результат создается только при вызове API AUGraph из его обратного вызова рендеринга. Это означает, что требуемая блокировка была удержана в то время другим потоком . Если вы видите этот результирующий код, вы можете попытаться выполнить действие еще раз - обычно это цикл рендеринга NEXT (тем временем блокировка может быть снята), или вы можете делегировать этот вызов другому потоку в своем приложении. Не следует вращать или останавливать поток рендеринга.
Этот код результата является лишь временным состоянием, которое перейдет, как только вызов вашего другого потока в AUGraph (который имеет блокировку) завершится.
В моем случае я просто запускаю AUGraph
, он новый и только что созданный. Как я могу отладить случай и в чем может быть потенциальная проблема?
setupAudioForGraph
делать? Вы сначала AUGraphInitialize граф?