2012-08-03 61 views
1

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

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

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

请帮我做这件事

+0

HI Shivam!你可以请分享你用于效果的DIRAC。提前致谢! – Karun 2014-04-24 08:51:11

+0

请从这里下载:http://www.dspdimension.com/download/ – 2014-04-24 11:44:58

回答

2

回声是非常简单的。你需要一个延迟线,并且很少有乘法。假设一个通道和音频已经在浮点表示,延迟线会是这个样子(在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上的问题,但我不这么认为。

+0

这里有什么变数。 samplerate * seconds; samplerate * seconds; 如何在这里获得这些变量的值 – 2012-08-06 05:43:36

+0

我添加了秒的解释。采样率是涉及采样音频的基本参数。您可能将其与DIRAC一起使用,以及在您打开音响设备进行读/写时。 – 2012-08-06 18:33:36

+0

我无法运行此代码。我在我的项目中使用DIRAC库。如果您有任何问题,请发布一些示例代码。 – 2014-02-11 21:29:43

相关问题