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

标签 iphone objective-c buffer sample audioqueue

对于 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/

相关文章:

iphone - 使用名称截断 NSString

iphone - 获取 "uitextview"iphone的书写语言?

ios - 通过 subview 或 NSMutableArray 枚举更快吗?

ios - 在其 View 加载之前设置 UITabBarItem 属性?

mysql - 如何在mysql中实现地理空间引用系统

iphone - 在 iOS 中创建播放列表?

iphone - Objective-C 错误 : [UIView copyWithZone:]: unrecognized selector sent to instance

ios - 子类化时出现 "duplicate symbols for architecture"错误

javascript - Node.js 中的二进制字符串到缓冲区

javascript - Node.js 如何从 MS Sql 服务器数据类型的 varbinary 转换为图像