是否可以使用偏移(延迟)写入音频缓冲区以生成平坦的回声效果?
以下代码输出我的音频缓冲区:
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[];
高度赞赏这方面的任何指导。
感谢。
答案 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];
这解决了崩溃问题。