亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么這段代碼會產生非常嘈雜的正弦波?

為什么這段代碼會產生非常嘈雜的正弦波?

慕容708150 2022-07-20 20:33:49
我正在嘗試用 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個贊

這是你的正弦波:

http://img1.sycdn.imooc.com//62d7f66c0001e76f07450404.jpg

它非常參差不齊,因為您使用的是低位深度和低幅度。您只有 25 個不同的樣本值可供選擇。

如果您將幅度設置為 1.0,則使用 8 位樣本的全部范圍,這是您的正弦波:

http://img1.sycdn.imooc.com//62d7f67a0001fb0407450364.jpg

這里將幅度保持在 0.1,但使用 16 位樣本代替:

http://img1.sycdn.imooc.com//62d7f686000121c307460361.jpg

這兩種選擇顯然都會減少噪音。



查看完整回答
反對 回復 2022-07-20
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號