回声效果:写入带偏移量的音频缓冲区?

时间:2012-03-15 17:02:52

标签: iphone objective-c ios cocoa-touch core-audio

是否可以使用偏移(延迟)写入音频缓冲区以生成平坦的回声效果?

以下代码输出我的音频缓冲区:

for(s=0; s<inNumberFrames; s++) {
    ioBuffer[s] = audioBuffer[audioBufferReadPos];
}

我是否可以在 for循环

中执行此类操作
tempBuffer[s] = audioBuffer[audioBufferReadPos];
--- Then somehow offset tempBuffer[] as bufferWithOffset[] --- 
ioBuffer[s] = audioBuffer[audioBufferReadPos] + bufferWithOffset[];

高度赞赏这方面的任何指导。

感谢。

1 个答案:

答案 0 :(得分:3)

最后让它发挥作用,多亏了RW论坛上的Hollance向我解释所有这些。

[http://www.raywenderlich.com/forums/viewtopic.php?f=2&t=2864]

我仍然有很多崩溃问题,很可能是因为内存泄漏造成的。但逻辑是有效的。


初始化一个22050零样本的临时缓冲区:

(SInt16 *)tempBuffer = (SInt16*)calloc(22050, sizeof(SInt16));

初始化一个零的长计数器:

long d=0;

然后在 for循环内输入与当前样本混合的临时缓冲区:

for(s=0; s<inNumberFrames; s++) {
    ioBuffer[s] = tempBuffer[d] + audioBuffer[audioBufferReadPos];

将当前样本添加到tempBuffer:

    tempBuffer[d] = audioBuffer[audioBufferReadPos];
    d++;

如果达到tempBuffer的限制,则将计数器重置为零:

    if(d >= 22050)
    d=0;
}

假设采样率为44100 Hz,则会产生0.5秒的延迟。


更新:

更改

    ioBuffer[s] = tempBuffer[d] + audioBuffer[audioBufferReadPos];

    ioBuffer[s] = 0.6*tempBuffer[d] + 0.4*audioBuffer[audioBufferReadPos];

这解决了崩溃问题。