5

对于 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;
}

提取采样值并且似乎工作得很好(信号输入应该是写入整数样本的目标向量)。但是将它们写回缓冲区仍然是一个问题...我搜索了文档和许多论坛以找到解决方案,但还没有成功。

所以我非常感谢任何建议,在此先感谢,卢卡斯

4

1 回答 1

4

如果您想实时修改音频,您可能想尝试使用 RemoteIO Audio Unit。

使用音频队列时,您必须保存录制队列回调中的数据,然后在不同时间的不同回调中将处理后的数据提供给播放队列回调。为此,您可能必须使用中间队列或数据缓冲区。要使其正常工作,尝试运行一个录音应用程序,然后运行一个示例播放应用程序,然后将两者结合起来可能会有所帮助。

添加:

以下是将示例值写入音频输出队列的一些源代码示例:

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

只需使用您自己的预处理样本而不是正弦波。

于 2011-01-28T18:53:01.973 回答