如何从音频队列缓冲区中提取整数采样并将修改后的采样写回?

问题描述:

用于iphone语音变化的应用(目标c)中,我试图从记录音频队列缓冲器采取取样的整数值,它们的过程中的功能和写修改后的值返回到回放缓冲器。 目前我使用这样的事情如何从音频队列缓冲区中提取整数采样并将修改后的采样写回?

AudioBuffer audioBuffer = bufferList->mBuffers[0]; 
int bufferSize = audioBuffer.mDataByteSize/sizeof(SInt32); 
SInt32 *frame = audioBuffer.mData; 
SInt32 signalInput[22050]; 
for(int i=0; i<bufferSize; i++) { 
    SInt32 currentSample = frame[i]; 
    *(signalInput +i) = currentSample; 
} 

提取采样数据,似乎工作得很好(signalinput应该是写整数样本目标向量)。 但它们写回缓存仍然是一个问题...... 我搜索论坛的文档和大量的找到一个解决方案,但没有成功呢。

如果你想修改实时音频您可能需要使用RemoteIO音频单元,而不是尝试这样的id是非常感激的任何建议, 在此先感谢,卢卡斯

当使用音频队列,你必须从记录队列回调保存数据,后来在不同的时间处理数据馈送到播放队列回调,在回调不同。为此,您可能必须使用中间队列或数据缓冲区。为了达到这个目的,它可能有助于尝试让录音声音应用程序运行,然后运行示例播放应用程序,然后将两者结合起来。

补充:

这里有一些源代码示例写作样本值的到音频输出队列:

http://lists.apple.com/archives/coreaudio-api/2008/Dec/msg00173.html https://bitbucket.org/ddribin/a440/wiki/Home

只需使用自己的前处理的样品,而不是正弦波。

+0

感谢您的快速响应。 - 录音部分已经在工作。例如,我想改变回调以修改记录的样本,然后将它们写入文件。不管怎样,是否有可能,如果是这样,我如何直接访问音频缓冲区的记录样本(不管是音频队列还是音频单元)。 – Lukas 2011-01-28 20:12:44