将音频直接复制到iPhone上的音频缓冲区

问题描述:

有没有办法直接复制到AudioQueueBuffer?将音频直接复制到iPhone上的音频缓冲区

我期待重新创建一个Android应用程序,使用android.AudioTrack的write()函数直接写入声音缓冲区。我可以使用iPhone上的AudioQueueBuffer做类似的事情吗?

我会沿着线做一些事情:

AudioQueueAllocateBuffer(mAudioQueueData.mQueue, dataSize, &mAudioQueueData.mBuffer); 
mAudioQueueData.mBuffer->mAudioDataByteSize = dataSize; 
memcpy(mAudioQueueData.mBuffer->mAudioData, soundData, dataSize); 
AudioQueueStart(mAudioQueueData.mQueue, NULL); 

是的,它是可能的,你找什么叫RemoteIO。首先设置很难,但是可以直接控制音频缓冲区,并且是iPhone上最低级别的音频API。

退房本教程开始:http://atastypixel.com/blog/using-remoteio-audio-unit/

也有这些有用的一系列博客文章:http://timbolstad.com/2010/03/14/core-audio-getting-started/

的音频缓冲是只设计了一个音频队列回调内部写入(有意义) 。但是您可以随时将声音数据复制/排队到您自己的中间缓冲区,然后在音频队列回调期间将该数据从中间缓冲区再次复制到音频队列缓冲区。这是另一个不是火箭科学的步骤。

音频单元RemoteIO缓冲区以类似的方式工作。

+0

我在看苹果的例子,我设置了一个AudioQueueCallback。我不确定的是复制到AudioQueueBuffer的“正确”方式。如果我只是将memcpy移入AudioQueueCallback,那么排队缓冲区应该都很好? – TurqMage 2011-04-07 23:52:04

+0

如果数据与样本格式,大小,包装,字节顺序等的音频队列数据格式相匹配,则可以使用memcpy。 – hotpaw2 2011-04-08 01:49:19