gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:06:35 25 4
gpt4 key购买 nike

我录制了一根吉他弦演奏一个音符,然后获取每个和声的幅度,然后通过 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 得到上述值。编程错了吗?和声内容/音色值是否错误?如果不对波形进行特定的起音和衰减​​修改,就没有办法让它听起来像吉他吗?感谢所有帮助。

最佳答案

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

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

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

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

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

    关于java - 通过原始音频重新创建带有和声的吉他弦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27411939/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com