适用于Android的语音效果环调制器

时间:2013-10-09 16:30:47

标签: android audio native

您好我已尝试在原生C中为Android实施环形调制器。我需要为语音转换器应用程序操作wav文件。我想得到像dalek声音这样的效果。 这是我到目前为止所做的: 阅读wav文件 - Works 迭代wav的每个样本 - Works 保存新样本 - 作品

对于环形调制器,音频文件必须与窦组合,所以我尝试了这个:

//Position through the sine wave as a percentage (i.e. 0 to 1 is 0 to 2*PI)
double cyclePosition = 0;
double fFreq = 1;   // Frequency of sine wave in hz
double cycleInc = fFreq/16000;  // Fraction of cycle between samples

for(i=0; i<csize; i++)
{
    currentSample = //read it;
    currentSample = currentSample* sin(2*M_PI*cyclePosition));
    currentSample = //write it;
    cyclePosition += cycleInc;
    if (cyclePosition > 1)
        cyclePosition -= 1;
}

所以问题是,如果我输入1Hz的频率,每1秒钟音频发出非常大的嘶嘶声。如果我将频率更改为30Hz,例如我无法理解原始音频中的任何内容。 有人知道如何改善这个吗?

1 个答案:

答案 0 :(得分:0)

代码原样,对我来说很好,但正如我所说,我不认为这是你的实际代码。请仔细检查。您可以运行的测试示例是注释掉乘法线:

...

for(i=0; i<csize; i++)
{
    currentSample = //read it;
    //currentSample = currentSample* sin(2*M_PI*cyclePosition));
    currentSample = //write it;
    cyclePosition += cycleInc;
    if (cyclePosition > 1)
        cyclePosition -= 1;
}

那应该输出你输入的内容。然后尝试看起来无害的东西:

currentSample = currentSample * .99;

应该几乎没有声音差异和

currentSample = currentSample * .5;

应将音量减半。