对于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应该是用于写入整数样本的目标向量)。 但把它们写回缓冲区仍然是个问题...... 我搜索了文档和很多论坛以找到解决方案,但还没有成功。
所以我非常感谢任何建议, 提前谢谢,卢卡斯
答案 0 :(得分:4)
如果您想要实时修改音频,可能需要尝试使用RemoteIO Audio Unit。
使用音频队列时,您必须保存记录队列回调中的数据,然后将处理后的数据提供给播放队列回调,并在不同的时间进行不同的回调。为此,您可能必须使用中间队列或数据缓冲区。为了实现这一点,可能有助于尝试运行录制声音应用程序,然后运行示例播放应用程序,然后将两者结合起来。
补充:
以下是将示例值写入音频输出队列的一些源代码示例:
http://lists.apple.com/archives/coreaudio-api/2008/Dec/msg00173.html https://bitbucket.org/ddribin/a440/wiki/Home
只需使用您自己的预处理样本而不是正弦波。