我正在开发一个使用 mp3 编码/解码的应用程序。虽然原则上它对大多数文件都是正确的,但也有一些例外。我检测到这些文件缺少标题。尝试解码时出现数组越界异常。我使用了两种方法,但都失败了。
首先:
DecodedMpegAudioInputStream dais = (DecodedMpegAudioInputStream) AudioSystem.getAudioInputStream(daisf, ais);
byte[] audioData = IOUtils.toByteArray(dais);//exception here
第二个:
ByteOutputStream bos = new ByteOutputStream();
// Get the decoded stream.
byte[] byteData = new byte[1];
int nBytesRead = 0;
int offset = 0;
int cnt=1;
while (nBytesRead != -1) {
System.out.println("cnt="+cnt);
nBytesRead = dais.read(byteData, offset, byteData.length);//exception here at first loop
if (nBytesRead != -1) {
int numShorts = nBytesRead >> 1;
for (int j = 0; j < numShorts; j++) {
bos.write(byteData[j]);
}
}
cnt+=1;
}
byte[] audioData = bos.getBytes();
似乎标头或其结构存在问题,因为dais流具有内容/字节。然而,它可以用 audacity 和 ffplay 打开,所以我相信应该有一个解决方法。任何想法如何应对它?