Я работаю с AUGraph
и API Audio Units для воспроизведения и записи звука в своем приложении для 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 из обратного вызова рендеринга. Это означает, что требуемая блокировка в это время удерживалась другим потоком. Если вы видите этот код результата, как правило, вы можете повторить действие — обычно это СЛЕДУЮЩИЙ цикл рендеринга (поэтому тем временем блокировка может быть снята) или вы можете делегировать этот вызов другому потоку в своем приложении. Вы не должны вращать или усыплять поток рендеринга.
Этот код результата является только временным состоянием, которое пройдет, как только завершится вызов AUGraph вашего другого потока (который имеет блокировку).
В моем случае я просто запускаю AUGraph
, он новый и только что созданный. Как я могу отладить дело и в чем может быть потенциальная проблема?
setupAudioForGraph
? Вы сначала AUGraphInitialize график? - person cvu   schedule 01.06.2015