对于 iphone 语音更改应用程序( objective-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 Audio Unit。
当使用音频队列时,你必须保存来自录音队列回调的数据,然后将处理过的数据提供给播放队列回调,在不同的时间在不同的回调中。为此,您可能必须使用中间队列或数据缓冲区。要使其正常工作,尝试运行一个录音应用程序,然后运行一个示例播放应用程序,然后将两者结合起来可能会有所帮助。
添加:
以下是将示例值写入音频输出队列的一些源代码示例:
http://lists.apple.com/archives/coreaudio-api/2008/Dec/msg00173.html https://bitbucket.org/ddribin/a440/wiki/Home
只需使用您自己的预处理样本而不是正弦波。
关于iphone - 如何从音频队列缓冲区中提取整数样本并将修改后的样本写回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4830045/