2016-11-28 33 views
-1

產生聲音在大多數Java程序,用於產生一個音的,使用下面的語句:在Java中

for(int i=0; i<milliseconds*frequency/1000; i++){ 
    double angle = i/(frequency/hertz)*2.0*Math.PI; 
    buffer[0]=(byte)(Math.sin(angle)*volume); 
} 

我知道由Math.sin(angle)函數返回一個角的sin值被存儲在緩衝器陣列。但如何做到這一點的語句工作產生的波形

double angle = i/(frequency/hertz)*2.0*Math.PI; 
+0

聽起來更像是一個數學問題比編程問題 – UnholySheep

+0

@UnholySheep依然有效IMO – Gabriel

回答

0

單挑....所有的結果都被塞在你的輸出數組的第一個元素。你想把它分配給緩衝區[i],你現在將所有內容填入緩衝區[0]。

在你的代碼片段中,你使用變量頻率和赫茲(這會混淆人)。我相信你想指定一個所需的音頻,你需要規定一個sampling_rate。由於你的相位增量最終會變成freq * 2pi/sampling_rate,如果你用你的索引變量'i'來縮放這個數值,那會給你離散的相位點。

還要確保您的採樣率至少兩倍所需頻率音(如果扔了你 - 做尼奎斯特速率和香農採樣定理快速閱讀

最好的運氣