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

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

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); 
 
还有其他的三个,项目中用的比较少,暂时不学,周末的时候补齐。

你可能感兴趣的:(AudioQueue)