0

音符を演奏するギター弦を録音し、各ハーモニーの振幅を取り、プログラム(アンドロイド)に通して同様の音を再現しましたが、音はギターのようには聞こえません。

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 を掛けて上記の値を取得しました。プログラミングは間違っていませんか?ハーモニーの内容・音色の値が間違っていませんか?ウェーブに特定のアタックとディケイの変更を加えずに、ギターのようなサウンドにする方法はありませんか? すべての助けに感謝します。

4

1 に答える 1