通过原始音频重新创建带有和声的吉他弦

Posted

技术标签:

【中文标题】通过原始音频重新创建带有和声的吉他弦【英文标题】:Recreating guitar string with harmonies through raw audio 【发布时间】:2014-12-10 22:19:38 【问题描述】:

我录制了一根吉他弦弹奏一个音符,然后记录了每个和声的幅度,然后通过 prgram(android) 重新创建类似的声音,但声音听起来不像吉他。

public void setToHarmonies(int[] harmonies, int frequency)
        int total = 0;
        int size = harmonies.length;
        for(int i=0; i<size; i++)
            total+=harmonies[i];
        
        for(int i=0; i<numSamples; i++)
            samples[i] = 0;
        
        float[] effHarm = new float[size];
        double[][] hwaves = new double[size][numSamples];
        for(int i=0; i<size; i++)
            effHarm[i] = ((float)(harmonies[i]-.2)) / (float)total;
            hwaves[i] = genSinWave(numSamples, frequency * i);


for(int e=0; e<numSamples; e++)
            samples[e] += effHarm[i] * hwaves[i][e] * Math.exp((float)((float)e / (float)15000) * -1);
        
    


public double[] genSinWave(int size, int freq)
    double[] samplesOut = new double[size];
    float period = (float)sampleRate / (float)freq;
    for(int i=0; i<samplesOut.length; i++)
        samplesOut[i] = Math.sin(2 * i * Math.PI / period);
    
    return samplesOut;

private static final int[] guitar = 699, 602, 465, 407, 544, 457, 443, 307, 283, 357, 342, 224;

在 Audacity 上绘制频谱图给了我负值,最小值为 -72.7,所以我从 72.7 中减去每个峰值处的值,然后乘以 10 得到上述值。编程错了吗?和声内容/音色值是否错误?如果不对波形进行特定的起音和衰减​​修改,就没有办法让它听起来像吉他吗?感谢所有帮助。

【问题讨论】:

那么int[] guitar 是否意味着每个谐波的电平? 是的。当我除以“总数”时,我认为它们必须处于正确的比例。对吗? 是的,没错。你看过 Karplus-Strong 算法吗? cs.princeton.edu/courses/archive/fall07/cos126/assignments/… @jaket 什么是正确的?我的重现吉他声音的代码,或者我关于为什么它听起来不太正确的假设? 抱歉,我是在回复您关于峰值相对水平的评论。 【参考方案1】:

赋予乐器独特声音的东西是

波形,大致就是各种谐波的相对幅度 包络,它是振幅随时间的变化 - 粗略地说,你有声音开始后达到峰值所需的时间,下降所需的时间从峰值水平到持续水平,持续水平与峰值水平的比率,然后是从持续水平下降的方式。

这些对于区分一种乐器和另一种乐器都很重要。例如,小提琴和小号往往具有相同或几乎相同的波形,但包络非常不同。

您的一般方法似乎是专注于波形,而完全忽略包络。

您可能可以从其他站点获得更多帮助 - 可能是“物理”堆栈交换,甚至是“音乐”堆栈交换。但是此时您的问题与 Java 编程无关。

【讨论】:

以上是关于通过原始音频重新创建带有和声的吉他弦的主要内容,如果未能解决你的问题,请参考以下文章

带有 VST 效果插件的网络音频播放器?

使用 NAudio 重新采样原始音频

如何使用 NAudio 将原始音频从 WasapiCapture 重新采样到 g711 mulaw?

音频正当时:我们和声网音频专家聊了聊AI元宇宙空间音频和“沉浸感”

如何在android中使用USB吉他接口实时处理音频?

如何使用 Web Audio API 移动/调制音频缓冲频率