AudioToolbox之AudioQueue.h(三)Handing Audio Queue Buffers(未完)

本文介绍了音频队列缓存管理中的两个核心函数:AudioQueueAllocateBuffer和AudioQueueEnqueueBuffer。前者用于分配音频队列缓存,后者则用于向缓存中添加数据。文章详细解析了这两个函数的功能、参数及使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面两篇文章中,我们学习了音频队列的控制、创建和销毁。现在,我们要进入到这个队列内部,进行更深层次的操作,那么,我们首先需要了解的是:如何管理队列的缓存。

1,AudioQueueAllocateBuffer

函数功能:请求音频队列对象来分配一个音频队列缓存。

函数原型:

OSStatus AudioQueueAllocateBuffer (
   AudioQueueRef inAQ,
   UInt32 inBufferByteSize,
   AudioQueueBufferRef *outBuffer
);
 
参数解析:
inAQ:想要分配音频缓存的audioQueue.
inBufferByteSize:想要分配的缓冲区的大小,字节表示。
outBuffer:指向新分配的这个音频队列缓存的指针。
 
调用实例:
 AudioQueueAllocateBuffer(myInfo.mQueue,bufferByteSize, &myInfo.mBuffer);
其中myInfo,是一个包含queueRef,bufferRef的对象。

 

2,AudioQueueEnqueueBuffer

函数功能:给录音或者回放音频队列的缓存中添加一个缓存数据。

函数原型:

OSStatus AudioQueueEnqueueBuffer (
   AudioQueueRef                      inAQ,
   AudioQueueBufferRef                inBuffer,
   UInt32                             inNumPacketDescs,
   const AudioStreamPacketDescription *inPacketDescs
);

参数解析:

inAQ:音频队列缓存的拥有者。

inBuffer:将要被加进缓存队列的音频队列缓存。(感觉很拗口)

inNumPacketDescs:inBuffer中音频数据包的个数。在以下三种情况下,这个值应该设为0:

---播放的音频有固定的 bit速率。

---音频队列是录音队列时

---当这个缓存是由AudioQueueAllocateBufferWithPacketDescription分配,并重新如队列时。(不明白继续往后研究)

 
调用实例(一般是在回调函数中调用):
result = AudioQueueEnqueueBuffer(inAQ, inCompleteAQBuffer, 
(myInfo->mPacketDescs ? nPackets : 0),myInfo->mPacketDescs); 
 
还有其他的三个,项目中用的比较少,暂时不学,周末的时候补齐。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值