Pracuję z AUGraph
i Audio Units API, aby odtwarzać i nagrywać dźwięk w mojej aplikacji na iOS. Teraz mam rzadki problem, gdy AUGraph
nie można uruchomić z następującym błędem:
wynik = kAUGraphErr_CannotDoInCurrentContext (-10863)
Błąd wystąpił nieprzewidywalnie, gdy próbujemy zadzwonić, AUGraphStart
który jest skonfigurowany do odtwarzania dźwięku:
(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;
}
Oto co otrzymujemy z dokumentacji:
Aby uniknąć obracania się lub czekania w wątku renderowania (zły pomysł!), Wiele wywołań AUGraph może zwrócić: kAUGraphErr_CannotDoInCurrentContext. Ten wynik jest generowany tylko wtedy, gdy wywołujesz interfejs API AUGraph z jego wywołania zwrotnego renderowania. Oznacza to, że zamek, którego wymagał, był utrzymywany w tym czasie przez inny gwint . Jeśli zobaczysz ten kod wynikowy, możesz ogólnie spróbować ponownie wykonać akcję - zwykle jest to kolejny cykl renderowania (więc w międzyczasie blokadę można wyczyścić) lub możesz delegować to wywołanie do innego wątku w aplikacji. Nie powinieneś obracać ani usypiać wątku renderującego.
Ten kod wynikowy jest tylko stanem przejściowym, który przejdzie, gdy tylko wywołanie innego wątku do AUGraph (który ma blokadę) zostanie zakończone.
W moim przypadku po prostu zaczynam AUGraph
, jest nowy i właśnie utworzony. Jak mogę zdebugować sprawę i jaki może być potencjalny problem w tym miejscu?
źródło
setupAudioForGraph
? Czy najpierw AUGraph zainicjowałeś wykres?Odpowiedzi:
Możesz zrobić coś z CSS lub SQLite. Dlatego
}
Spróbuj po prostu manipulować tym kodem, w Twoim kodzie jest problem z Booleanami ...
źródło