Laut Dokumentation hier https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/#//apple_ref/c/func/AudioQueueDisposeAudioQueueDispose Verzögerung
err = AudioQueueDispose(queue, true);
I true
verwenden, so von AudioQueue
entsorgen geschieht sofort, obwohl es Warteschlange funktioniert sofort entsorgen manchmal, ein anderes Mal hat Verzögerung 3-4 Sekunden bis zu 13 Sekunden auf die Gerät. err = AudioQueueStop(queue, true)
hat das gleiche Problem.
Mein Verständnis ist, dass beide Funktionen versuchen bereits zu spülen Release Puffer und über die Warteschlange eingereiht werden ...
so auch ich meine Call-Back-Funktion helfen, die Puffer, wenn AudioQueueDispose
wird genannt werden zu spülen.
static void MyAQOutputCallBack(void *inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inCompleteAQBuffer)
{
if (player.shouldDispose) {
printf("player shouldDispose !!!!!!!!!!!\n\n\n\n\n\n");
OSStatus dispose = AudioQueueFlush (inAQ);
return;
}
}
Da ich etwas aufnehmen werde mit AudioQueues
nach Wiedergabe eines Titels, muss ich diese Funktionen ohne Verzögerungen zurückgegeben. ein paar hundert Millisekunden ist in Ordnung, aber 3-4 Sekunden? das ist inakzeptabel.
Andere AudioQueue
Funktionen werden auch auf dem gleichen Thread aufgerufen und sie scheinen gut zu funktionieren.
ich auch diese sicher zu machen auf Hauptthread zu nennen versucht haben, wenn es etwas oder nicht
[self performSelectorOnMainThread:@selector(tryOnMain) withObject:nil waitUntilDone:NO];
oder
dispatch_sync(dispatch_get_main_queue(),^{
nur knapp sein Ziel macht einen Unterschied
ändern wird Alle Idee was könnte passieren?
haben Sie verschiedene Audiocodecs ausprobiert? Ich habe seltsame Dinge erlebt, wenn ich einige der Codecs benutzt habe. Ich würde Apple Lossless nur empfehlen, weil es Apple ist :) – Jaro