创建音频队列时,参数较多,使用的时候要特别小心。
1,AudioQueueNewOutPut
函数功能:创建一个播放音频队列对象。
函数原型:
const AudioStreamBasicDescription *inFormat,
AudioQueueOutputCallback inCallbackProc,
void *inUserData,
CFRunLoopRef inCallbackRunLoop,
CFStringRef inCallbackRunLoopMode,
UInt32 inFlags,
AudioQueueRef *outAQ
);
inFormat:从它的类型上,我们可知,它需要的是基本的流信息。对于一个已经存在的流文件,一般通过AudioFileGetProperty的方法(属性ID是kAudioFilePropertyDataFormat)来获取。
inCallbackProc:音频队列输出(播放)时的回调函数。回调函数是设计还是挺有技巧的,需要多体会demo中的使用。
inUserData:是inCallbackProc的使用者,通常是inCallbackProc的第一个参数。
inCallbackRunLoop:指定回调函数执行的事件循环。一般使用:CFRunLoopGetCurrent(),当设置为NULL时,这个时间循环插入到其中一个音频队列的内部线程中。
inCallbackRunLoopMode:回调函数执行时的模式,一般不关注这个参数,通常设置为:kCFRunLoopCommonModes
inFlags:保留参数,必须设置为0.
outAQ:新创建的音频队列对象。(出来的时候,队列里面就有数据了)
使用实例:苹果官方的speakHere、AQOfflinRenderTest等都有。
2,AudioQueueNewInPut
函数功能:创建一个录音音频队列对象。
和AudioQueueNewOutPut很类似,参数的使用也基本一致,区别仅仅是:AudioQueueNewOutPut创建的是播放队列,而AudioQueueNewInPut创建的是录音队列。
3,AudioQueueDispose
函数功能:销毁(处理)一个音频队列。
参数原型:
AudioQueueRef inAQ,
Boolean inImmediate
);
参数解析:
inAQ:想要销毁的音频队列。
inImmdiate:是否马上销毁音频队列。