ios - AudioQueueDispose delay -


according documentation here https://developer.apple.com/library/mac/documentation/musicaudio/reference/audioqueuereference/#//apple_ref/c/func/audioqueuedispose

err = audioqueuedispose(queue, true); 

i use true dispose of audioqueue happens immediately, although dispose queue , other times has delay 3-4 seconds 13 seconds on device. err = audioqueuestop(queue, true) has same problem well.

my understanding both functions try flush-release buffers , enqueued...
call-back function flush buffers if audioqueuedispose going called.

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;     } } 

since going record using audioqueues after playing track, need functions returned without delays. couple hundred milliseconds okay 3-4 seconds? unacceptable.

other audioqueue functions being called on same thread , seem working fine.

i have tried call on main thread make sure if going change or not

[self performselectoronmainthread:@selector(tryonmain) withobject:nil waituntildone:no];

or

dispatch_sync(dispatch_get_main_queue(),^{ didnt difference

any idea might happening?

i stop audio playback by:

-(void)stopaudio     {         @synchronized(audiolock) {             audiolock=[nsnumber numberwithbool:false];             osstatus err;             err=audioqueuereset (_audioqueue);             if (err != noerr)             {                 nslog(@"audioqueuereset() error: %d", (int)err);             }             err=audioqueuestop (_audioqueue, yes);             if (err != noerr)             {                 nslog(@"audioqueuestop() error: %d", (int)err);             }             err=audioqueuedispose (_audioqueue, yes);             if (err != noerr)             {                 nslog(@"audioqueuedispose() error: %d", (int)err);             }         }     } 

and in my:

void audiocallback(void *custom_data, audioqueueref queue, audioqueuebufferref buffer) 

i put more stuff in queue if:

myobject *weakself = (__bridge myobject *)custom_data; @synchronized(weakself -> audiolock) {     if ([weakself -> audiolock boolvalue]) {          put_more_stuff_on_queue     } 

in particular case playback aac-lc audio.


Comments