Secondo la documentazione qui https://developer.apple.com/library/mac/documentation/MusicAudio/Reference/AudioQueueReference/#//apple_ref/c/func/AudioQueueDisposeAudioQueueDispose ritardo
err = AudioQueueDispose(queue, true);
uso true
così smaltire AudioQueue
avviene immediatamente, anche se ci vuole disporre coda immediatamente a volte, altre volte con un ritardo di 3-4 secondi fino a 13 secondi sul dispositivo. err = AudioQueueStop(queue, true)
ha lo stesso problema.
mia comprensione è che entrambe le funzioni tentano di irrigare a rilascio già buffer e in procinto di essere accodati ...
così ho anche aiutare la mia funzione di richiamata per svuotare i buffer se AudioQueueDispose
sta per essere chiamato.
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;
}
}
Dal momento che sto andando a registrare qualcosa con AudioQueues
dopo la riproduzione di un brano, ho bisogno di questo funzioni restituiti senza ritardi. qualche centinaio di millisecondi va bene, ma 3-4 secondi? è inaccettabile.
Altre funzioni AudioQueue
vengono anche chiamate sullo stesso thread e sembrano funzionare correttamente.
Ho anche provato a chiamare questo sul thread principale per assicurarsi che se si sta per cambiare qualcosa o no
[self performSelectorOnMainThread:@selector(tryOnMain) withObject:nil waitUntilDone:NO];
o
dispatch_sync(dispatch_get_main_queue(),^{
fatto fare alcuna differenza
Qualsiasi idea cosa potrebbe accadere?
hai provato diversi codec audio? Ho visto cose strane accadendo quando si utilizzavano alcuni dei codec. Consiglierei Apple Lossless solo perché è Apple :) – Jaro