如何使用objective-c在音频文件上添加回声效果

时间:2012-08-03 09:49:00

标签: iphone objective-c effects audio

我正在开发一个应用程序,我想使用objective-c在录制的音频文件中添加回声效果。

我正在使用DIRAC添加其他效果,例如男人对女人,慢,快。

现在我必须让机器人录制录音的声音。对于机器人声音我需要添加回声效果

请帮我这样做

1 个答案:

答案 0 :(得分:2)

Echo非常简单。你需要一个延迟线,并且很少乘法。假设一个通道和音频已经以浮点表示,延迟线看起来像这样(在类似C的伪代码中):

int LENGTH = samplerate * seconds; //seconds is the desired length of the delay in seconds
float buffer[ LENGTH ];
int readIndex = 0, writeIndex = LENGTH - 1;

float delayLine.readNext( float x ) {
    float ret = buffer[readIndex];
    ++readIndex;
    if( readIndex >= LENGTH )
        readIndex = 0;
    return ret;
}
void delayLine.writeNext( float x ) {
    buffer[ writeIndex ] = x;
    ++writeIndex;
    if( writeIndex >= LENGTH )
        writeIndex = 0;
}

不要忘记将缓冲区初始化为全零。

这就是你的延迟线。基本用法是:

float singleDelay( float x ) {
    delayLine.writeNext(x);
    return delayLine.readNext( x );
}

但是你不会听到很多不同之处:它会在稍后出现。如果你想听到一个回声,你需要这样的东西:

float singleEcho( float x, float g ) {
    delayLine.writeNext(x);
    return x + g * delayLine.readNext( x );
}

其中g是常数,通常小于零。

现在说你想要一个回声流:“你好......你好......你好......我......”就像这样。你只需要做更多的工作:

float echo( float x, float g ) {
   float ret = x + g * delayLine.readNext( x );
   delayLine.writeNext( ret );
   return ret;
}

注意这次整个事物的输出如何反馈到延迟线,而不是输入。在这种情况下,| g |非常重要< 1。

你可能会遇到非正规问题。我不记得这是否是iOS上的一个问题,但我不这么认为。