私はmp3エンコーディング/デコーディングを使用するアプリケーションを開発しています。原則として、ほとんどのファイルで正しく動作しますが、いくつかの例外があります。これらのファイルにヘッダーがないことを検出しました。デコードしようとすると、配列の範囲外の例外が発生します。私は2つのアプローチを使用しましたが、どちらも失敗しました。
最初:
DecodedMpegAudioInputStream dais = (DecodedMpegAudioInputStream) AudioSystem.getAudioInputStream(daisf, ais);
byte[] audioData = IOUtils.toByteArray(dais);//exception here
そして2番目:
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ストリームにはコンテンツ/バイトがあるため、ヘッダーまたはその構造に問題があるようです。ただし、大胆さとffplayで開くことができるので、回避策があるはずです。それに対抗する方法はありますか?