4

Java で非常に単純なサウンド シンセを作成しようとしています。javax.sound.sampledパッケージを使用しています。以下のコードは機能しますが、正弦波は非常にノイズが多く、波に沿って再生されるある種の静かなウォーム ノイズがあるように聞こえます。

try {
    double sampleRate = 44100;
    //8 bits per sample, so a byte.
    AudioFormat audioFormat = new AudioFormat((float) sampleRate, 8, 1, true, false);
    SourceDataLine line = AudioSystem.getSourceDataLine(audioFormat);

    line.open(audioFormat);
    line.start();

    //A4
    double freq = 440.0;

    byte[] buf = new byte[1];

    //the formula for a sample is amplitude * sin(2.0 * PI * freq * time)
    for (int i = 0; i < sampleRate; i++) {
        double t = (i / (sampleRate - 1));
        double sample = 0.1 * Math.sin(2.0 * Math.PI * freq * t);

        //scaling the sound from -1, 1 to -127, 127
        buf[0] = (byte) (sample * (double) Byte.MAX_VALUE);

        line.write(buf, 0, 1);
    }

    line.drain();
    line.stop();
    line.close();
} catch (Exception e) {
    throw new RuntimeException(e);
}

生成されたサウンドを EQ に入れて、サウンドが実際にノイズが多いことを確認しました。

これは私が得たものです

主な周波数は 440 Hz ですが、他にも存在すべきでない周波数がいくつかあります。なぜこうなった?どうすれば修正できますか?

4

1 に答える 1