Audio Queue
Audio Queue功能:连接音频硬件;管理内存;调用编解码器;播放或者录音
控制Audio Queue:
AudioQueueStart
OSStatus AudioQueueStart ( AudioQueueRef inAQ, // 需要开启的Audio Queue
const AudioTimeStamp *inStartTime ); // 开启的时间。使用AudioTimeStamp的mSampleTime,使用NULL来马上开启。
OSStatus AudioQueuePrime ( AudioQueueRef inAQ,
UInt32 inNumberOfFramesToPrepare, // 在返回之前需要解码的帧数,0表示解码所有入列的buffer
UInt32 *outNumberOfFramesPrepared ); // 在作为输出时,表示实际上的解码和播放的帧数。在作为输入时可以传递0
这个函数为播放音频做准备,解码已经入列的buffer,返回inNumberOfFramesToPrepare中指定的最少的解码帧数。
步骤:调用AudioEnqueueBuffer;
AudioQueuePrime;
AudioQueueStart
AudioQueueFlush
重设音频队列解码状态
OSStatus AudioQueueFlush ( AudioQueueRef inAQ );
在确保所有缓冲的数据中的最后的数据已经入列时调用。如果不调用的话,可能会对下一个缓冲的数据播放造成干扰
在确保所有入列的数据已经到达目的地之前调用AudioQueueStop.
AudioQueueStop
OSStatus AudioQueueStop ( AudioQueueRef inAQ,
Boolean inImmediate ); // true的话,马上停止(同步)。传递false该函数会马上返回,但是音频队列会在其队列被播放或者录音后才停止(异步)
该函数重设音频队列,停止与该队列相关的硬件,还有停止队列本身。在录音时,该函数通常由用户调用;在播放时,当没有音频可以播放时则由播放音频队列的回调调用
AudioQueuePause
OSStatus AudioQueuePause ( AudioQueueRef inAQ );
暂停队列,要开始时调用AudioQueueStart
AudioQueueReset
OSStatus AudioQueueReset ( AudioQueueRef inAQ );
重设音频队列,刷新所有队列缓存,移除已经使用的缓冲,重设解码器和数字信号进程状态
音频队列的创建和处理
AudioQueueNewOutput
创建新的播放音频队列对象
OSStatus AudioQueueNewOutput ( const AudioStreamBasicDescription *inFormat, // 要播放的音频的数据格式
AudioQueueOutputCallback inCallbackProc, // 播放音频队列的回调函数
void *inUserData, // 回调函数使用的自定义数据结构
CFRunLoopRef inCallbackRunLoop, // 使用NULL的话会在音频队列的内部进程中调用回调
CFStringRef inCallbackRunLoopMode, //
UInt32 inFlags, // 必须为0
AudioQueueRef *outAQ ); // 作为输出时,为最新创建的播放音频队列对象
OSStatus AudioQueueNewInput ( const AudioStreamBasicDescription *inFormat,
AudioQueueInputCallback inCallbackProc,
void *inUserData,
CFRunLoopRef inCallbackRunLoop,
CFStringRef inCallbackRunLoopMode,