我正在追溯性地检查我的问题,因为它最初是模糊的,对其他人无济于事,并且因为此后我已经解决了我的问题。但是,我仍然无法弄清最初问题的核心问题,所以我想问这个问题。
我正在尝试使用下面的代码以及MP3SPI将音频数据从文件转换为字节[]。
// Global variables used elsewhere
byte[] currentSong;
// Gets the song, converts it to an audioInputStream, and converts to necessary format
File song = new File("archives\\song.wav");
AudioInputStream inputStream = AudioSystem.getAudioInputStream(song);
AudioInputStream decodedInputStream = AudioSystem.getAudioInputStream(INPUT_FORMAT, inputStream);
// Set currentSong equal to the entire song in a byte array
decodedInputStream.read(currentSong = new byte[decodedInputStream.available()]);
上面的代码对于.wav文件也很好,但是当我将文件路径更改为.mp3文件时,currentSong数组为空。
通过使用.read()命令的另一种形式,我能够使该程序正常工作,如下所示:
byte[] temp = new byte[3840];
try {
decodedInputStream.read(temp, 0, 3840) == -1)
} catch (IOException e) {
e.printStackTrace();
}
我的问题是,为什么用.wav文件制作AudioInputStream时完全可以读取,而用.mp3文件制作AudioInputStream.available()则阻塞并返回0?