我正在嘗試用 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 赫茲,但還有一些其他頻率不應該出現。為什么會這樣?我如何解決它?
1 回答

呼啦一陣風
TA貢獻1802條經驗 獲得超6個贊
這是你的正弦波:
它非常參差不齊,因為您使用的是低位深度和低幅度。您只有 25 個不同的樣本值可供選擇。
如果您將幅度設置為 1.0,則使用 8 位樣本的全部范圍,這是您的正弦波:
這里將幅度保持在 0.1,但使用 16 位樣本代替:
這兩種選擇顯然都會減少噪音。
添加回答
舉報
0/150
提交
取消