首先,我得到了一個項目來更改WAVE文件的頻率,我需要在Java中這樣做。將音頻採樣字節數組更改爲頻率
我已經在java中使用AudioSystem來獲取音頻數據的字節(不包括文件頭)。現在我得到一組數據字節,我想從時域將其更改爲頻域,並且在操作頻率後,我想將其更改回時域。下面的代碼:
public byte[] getWAVByte(){
ByteArrayOutputStream out = new ByteArrayOutputStream();
try{
File f = new File("audio.wav");
AudioInputStream in = AudioSystem.getAudioInputStream(f);
int read;
byte[] buff = new byte[(int)f.length()];
while ((read = in.read(buff)) > 0)
{
out.write(buff, 0, read);
}
out.flush();
byte[] audioBytes = out.toByteArray();
return audioBytes;
}catch(Exception e){
e.printStackTrace();
}
}
現在,我已經在audioBytes字節數組,我想把它變成在頻域的字節另一個數組。我已經讀過你可以用傅里葉變換來完成它,但是我的老師說它非常複雜,並且不在我的項目範圍內。那麼還有其他方法可以做到嗎?或者是否有任何Java庫可以幫助我獲得頻域中的字節數組?
[使用Java中的傅立葉變換處理音頻數據](http://stackoverflow.com/questions/962426/proce在音頻數據使用傅立葉變換在Java) – Bludzee
你說「我有一個項目來改變一個WAVE文件的頻率」正確的方式來做到這一點並不簡單,你似乎想要一個音高偏移,簡單而不正確的方法是以不同的採樣率播放您的音頻,但這會改變音頻的速度,您可以在頻域中執行此操作,並且您需要計算FFT ... – ederwander
是的,我已嘗試過改變採樣率,但它變得更快,對我來說變得相當嘈雜。 我也試圖通過改變每兩個字節到一個短的類型操縱數據字節,並操縱它,然後把它變回字節,但它似乎改變幅度(它變得更響,如果我多了兩個,聲音褪色如果我將它除以兩) – catherine