AudioToolbox之AudioQueue.h(一)Controlling Audio Queues

在文章的开始出,总是先要对AudioQueue有一个总体的认识。

ios的AudioQueue,是一个可以录制和播放音频的对象,AudioQueue负责以下几方面的工作:

---连接音频硬件。

---管理内存。

---对需要解码的音频文件进行解码。

---调节(mediating)回放或录音的效果。

有了AudioQueue服务,我们可以播放 linear PCM文件、部分压缩文件(如aac等)、其他格式用户有解码器的文件;它还支持多个audioQueue的回放混合以及音频和视频的同步等。


Controlling Audio Queues包括:AudioQueueStart,AudioQueuePrime,AudioQueueFlush,

AudioQueueStop,AudioQueuePause,AudioQueueReset六个部分。

1,AudioQueueStart

函数功能:开始播放或者录制音频。

函数原型:

OSStatus AudioQueueStart (
   AudioQueueRef inAQ,
   const AudioTimeStamp *inStartTime
);

参数解析:

inAQ:将要被启动的队列的实例.

inStartTime:这个音频队列实例开始的时间。如果需要指定一个时间的话,要根据AudioTimeStamp创建一个结构。如果这个参数传NULL的话,表明这个audioQueue队列应该尽快开启。(as soon as possible)】

调用实例:

XThrowIfError(AudioQueueStart(myInfo.mQueue, NULL), "AudioQueueStart failed");


2,AudioQueuePrime

函数功能:对已经进入AudioQueue中的缓冲进行解码,为回放做准备。

函数原型:

 OSStatus AudioQueuePrime (
    AudioQueueRef inAQ,
   UInt32 inNumberOfFramesToPrepare,
   UInt32 *outNumberOfFramesPrepared
);
参数解析:
inAQ:队列ID
inNumberOfFramesToPrepare:这个函数返回之前,需要解码是frames数。
outNumberOfFramesToPrepare:函数返回前实际解码的个数,如果不想关注这个信息,这个参数传入NULL就行。
调用实例:在使用这个函数时,一般有以下顺序:
---先调用 AudioQueueEnqueueBuffer
--- AudioQueuePrime
--- AudioQueueStart

3,AudioQueueFlush
函数功能:重新设置解码器的解码状态。
函数原型:
OSStatus AudioQueueFlush (
   AudioQueueRef inAQ
);
参数解析:
  这个函数的参数感觉没什么好解释的。
关于这个函数的讨论:
为了使所有进入audioQueue的数据都被处理,在最后一个音频缓冲进入音频队列后,调用这个函数可以使即将结束的audioQueue不会影响到后面的audioQueue。
  在AudioQueueStop之前调用AudioQueueFlush可以确保所有进入队列的数据都达到了目的地(意思是:被处理)。

4,AudioQueueStop
函数功能:
   停止播放或者录音。
函数原型:
OSStatus AudioQueueStop (
   AudioQueueRef inAQ,
   Boolean inImmediate
);
参数解析:
inAQ:将要被停止的音频队列的ID。
inImmediate:是否马上停止,如果传true的话,stop马上进行,即,是同步进行的。如果传flase,则是异步进行的,函数先返回,但是音频队列直到,队列中所有的的数据被录制或者回放完成才真正结束。

5,AudioQueuePause
函数功能:
暂停播放或者录制。
函数原型:
OSStatus AudioQueuePause (
   AudioQueueRef inAQ
);
参数解析:
inAQ:将要被暂停的音频队列。
关于这个函数的一点讨论:
对一个音频队列调用暂停,不会影响队列中已经有的buffers、也不会reset(重置)这个音频队列。如果要恢复播放或者录制,只需要调用:AudioQueueStart.

6,AudioQueueReset
函数功能:
重置一个音频队列。

函数原型:
OSStatus AudioQueueReset (
   AudioQueueRef inAQ
);

参数解析:
inAQ:将要被Reset的队列。

一点讨论:
  立马初始化一个音频队列,将队列中已有的buffers数据清空、重置解码器和数字化信息等、、、

写了打半天的blog,真心想吐了,休息一下,晚上回家再写下一篇。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值