有沒有什麼辦法從Java的音頻文件(尤其是wav文件)中獲取音頻流?從音頻文件獲取字節流?
我想獲得特定間隔的流,即從startTime
到endTime
,其中startTime
不爲零。例如,要獲取20秒長的音頻文件的5秒到10秒(5秒持續時間)的音頻流。
如何做到這一點?
有沒有什麼辦法從Java的音頻文件(尤其是wav文件)中獲取音頻流?從音頻文件獲取字節流?
我想獲得特定間隔的流,即從startTime
到endTime
,其中startTime
不爲零。例如,要獲取20秒長的音頻文件的5秒到10秒(5秒持續時間)的音頻流。
如何做到這一點?
您可以用標準的Java音色庫做到這一點:javax.sound.sampled中。
閱讀.wav文件已經在這裏被很好的覆蓋,以及如何將字節轉換爲相應的幀。如果您檢查右邊的「相關」,您將找到關於如何讀取音頻數據,每次一個緩衝區的值以及如何迭代這些緩衝區並將字節轉換爲PCM數據的信息。
假設你知道幀速率(例如,44100fps),那麼它就成爲計算音頻數據的字節或幀的問題。例如,在立體聲時,以44100fps的16位編碼,每幀包含4個字節,所以字節(5 * 4 * 44100)將是5秒點的開始,並且(10 * 4 * 44100)將是10秒的地方。
java的聲音教程是一個艱難的閱讀。以下鏈接在標題「讀取聲音文件」下有一個非常有用的代碼示例。 http://docs.oracle.com/javase/tutorial/sound/converters.html
有一個註釋行讀取 「//這裏做一些事情與現在的audioBytes陣列中的音頻數據有用......」
這就是你會算你個字節,並彙編來自字節的PCM數據。
這應該有助於您:
Java的wav文件IO http://www.labbookpages.co.uk/audio/javaWavFiles.html