2013-04-04 30 views
1

我應該在java中實現一個正弦發生器。作爲一個輸入,你給出頻率,幅度和相位,並且輸出一個.wav文件應該被生成。用於從二進制文件寫入wav文件的簡單Java庫

private static byte[] generateSineWavefreq(int frequencyOfSignal, int seconds) { 
    // total samples = (duration in second) * (samples per second) 
    byte[] sin = new byte[seconds * sampleRate]; 
    double samplingInterval = (double) (sampleRate/frequencyOfSignal); 
    System.out.println("Sampling Frequency : "+sampleRate); 
    System.out.println("Frequency of Signal : "+frequencyOfSignal); 
    System.out.println("Sampling Interval : "+samplingInterval); 
    for (int i = 0; i < sin.length; i++) { 
     double angle = (2.0 * Math.PI * i)/samplingInterval; 
     sin[i] = (byte) (Math.sin(angle) * 127); 
     //System.out.println("" + sin[i]); 
    } 
    return sin; 
} 

我生成了一個這樣的竇,但我有創建一個.wav出這個巨大的問題。我嘗試了一些圖書館,但特別是頭部讓我頭痛。

有關我如何輕鬆實現這一點的任何想法?

回答

2

「手動」寫入文件很簡單。 WAV header並不複雜。您知道必要的信息(採樣率,持續時間等),然後僅使用BufferedOutputStream將它們寫入文件中。

BufferedOutputStream output = ... 
// initialization 
... 

byte[] toWrite = new byte[] {'R','I','F','F'}; 
output.write(toWrite, toWrite.length, 0); 
... 

但是請記住一些字段是小端和其他大端。製作一些方法,如:

byte[] getLittleEndian(int number) { 

} 

byte[] getBigEndian(int number) { 

}