【问题标题】:Echo Effect: Write audio buffers with offset?回声效果:用偏移量写入音频缓冲区?
【发布时间】:2012-03-15 17:02:51
【问题描述】:

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

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

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[];

我们将非常感谢您提供这方面的任何指导。

谢谢。

【问题讨论】:

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


    【解决方案1】:

    终于让它工作了,感谢 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];
    

    这解决了崩溃问题。

    【讨论】:

    • 嗨,你可以给我这个代码。因为我是目标 c 的新手,不知道如何从音频文件创建 audioBuffer。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多