iOS音频播放学习(4)

本文详细探讨了iOS平台上的Audio Queue服务,涵盖了其工作原理、使用步骤及关键API,帮助开发者深入理解音频播放技术。
摘要由CSDN通过智能技术生成

Audio Queue

Audio Queue功能:连接音频硬件;管理内存;调用编解码器;播放或者录音

控制Audio Queue:
AudioQueueStart
OSStatus AudioQueueStart ( AudioQueueRef inAQ, // 需要开启的Audio Queue
                           const AudioTimeStamp *inStartTime ); // 开启的时间。使用AudioTimeStamp的mSampleTime,使用NULL来马上开启。

AudioQueuePrime
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 ); // 作为输出时,为最新创建的播放音频队列对象

AudioQueueNewInput
OSStatus AudioQueueNewInput ( const AudioStreamBasicDescription *inFormat, 
                              AudioQueueInputCallback inCallbackProc, 
                              void *inUserData, 
                              CFRunLoopRef inCallbackRunLoop, 
                              CFStringRef inCallbackRunLoopMode, 
                           
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值