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

标签 android audio native

嗨,我试图在原生 C 中为 Android 实现一个环形调制器。我需要为语音转换器应用程序操作 wav 文件。我想获得像 dalek 声音这样的效果。
这是我到目前为止所做的:
阅读 wav 文件 - 作品
遍历 wav 的每个样本 - 有效
保存新样本 - 作品

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

//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,我无法从原始音频中理解任何内容。
有人知道如何改进吗?

最佳答案

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

...

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;

应该将音量减半。

关于android - 适用于 Android 的语音效果环调制器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19277649/

相关文章:

c++ - 样本量 8 还是 16?

android - FaSTLane 将参数传递给插件

android cursor.getBlob 不工作

android - 是否已在所有 Android 手机上修复 AAC+ 支持?

c# - WinForms 等效于 WPF WindowInteropHelper、HwndSource、HwndSourceHook

c++ - Visual Studio 调试器监视问题

android - 从 NDK 代码访问应用程序数据路径

java - 如何在SQLite中写入/覆盖和读取数据整数并在TextView中显示?

java - 如何在 Horizo​​ntalScrollView 中使用自定义 View ?

python - 使用 python 检查音频采样率