For some reason, it seems that stopping at a breakpoint during debugging will kill my audio queue playback.
- AudioQueue will be playing audio
output. - Trigger a breakpoint to
pause my iPhone app. - Subsequent
resume, audio no longer gets played. - ( However, AudioQueue callback
functions are still getting called.) - ( No AudioSession or AudioQueue
errors are found.)
Since the debugger pauses the application (rather than an incoming phone call, for example) , it’s not a typical iPhone interruption, so AudioSession interruption callbacks do not get triggered like in this solution.
I am using three AudioQueue buffers at 4096 samples at 22kHz and filling them in a circular manner.
Problem occurs for both multi-threaded and single-threaded mode.
- Is there some known problem that you can’t pause and resume AudioSessions or AudioQueues during a debugging session?
- Is it running out of “queued buffers” and it’s destroying/killing the AudioQueue object (but then my AQ callback shouldn’t trigger).
Anyone have insight into inner workings of iPhone AudioQueues?
After playing around with it for the last several days, before posting to StackOverflow, I figured out the answer just today. Go figure!
Just recreate the AudioQueue again by calling my “preparation functions”
So detect when your AudioQueue may have “died”. In my case, I would be writing data into an input buffer to be “pulled” by AudioQueue callback. If it doesn’t occur in a certain time, or after X number of bytes of input buffer have been filled, I then recreate the AudioQueue.
This seems to solve the issue where “halts/fails” audio when you hit a debugging breakpoint.
The simplified versions of these functions are the following: