【问题标题】:how to add echo effect on audio file using objective-c如何使用objective-c在音频文件上添加回声效果
【发布时间】:2012-08-03 09:48:59
【问题描述】:

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

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

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

请帮我做这件事

【问题讨论】:

  • 嗨希瓦姆!你能分享一下你用来做效果的DIRAC吗?提前致谢!
  • 请从这里下载:dspdimension.com/download

标签: iphone objective-c effects audio


【解决方案1】:

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 是某个常数,通常介于 0 和 1 之间。

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

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

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

您可能会在此处遇到非规范化问题。我不记得这是否是 iOS 上的问题,但我不这么认为。

【讨论】:

  • 这里的这些变量是什么。采样率 * 秒;如何在此处获取这些变量的值
  • 我添加了秒的解释。采样率是采样音频中涉及的基本参数。您可能将它与 DIRAC 一起使用,以及在您打开声音设备进行读/写时使用。
  • 我无法运行此代码。我在我的项目中使用 DIRAC 库。如果有,请发布一些示例代码。
  • @SumitSharma:除了重复我已经说过的话,你没有给我足够的信息来帮助你,这只是伪代码,所以它显然不会按原样运行.
  • 如何为音频缓冲区调用这些函数?
猜你喜欢
  • 2013-12-12
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多