2017-08-11 136 views
1

我試圖獲得持續時間音頻在Java中的文件。AudioInputStream.getFrameLength返回不正確的長度

我寫了這個代碼(與計算器的一些幫助):

public static Duration getDuration(File file) { 
    AudioInputStream audioInputStream = 
    AudioSystem.getAudioInputStream(file); 
    AudioFormat format = audioInputStream.getFormat(); 
    long frames = audioInputStream.getFrameLength(); 
    double durationInSeconds = (frames)/format.getFrameRate(); 
    return Duration.ofSeconds(Math.round(durationInSeconds)); 
} 

我加入POM文件中的一些音頻庫才能夠得到正確的AudioInputStream(com.googlecode.soundlibs.basicplayer )。

但是,audioInputStream.getFrameLength總是返回-1值,當我嘗試從我的類路徑加載一些mp3。

有人有同樣的問題嗎?

感謝

回答

1

最後,它曾與下面的代碼

public static Duration getDuration(File file) { 
    val audioInputStream = AudioSystem.getAudioInputStream(file); 
    val fileFormat = AudioSystem.getAudioFileFormat(file); 
    long frames = fileFormat.getFrameLength(); // I get the frame length from file format, not InputStream 
    val format = audioInputStream.getFormat(); 
    double durationInSeconds = (frames)/format.getFrameRate(); 
    return Duration.ofSeconds(Math.round(durationInSeconds)); 
} 

內部getAudioInputStream應該這樣做,但它沒有工作,所以我不得不這樣做我自己。