0

次の mp3file のデュレーションを mp3spi で取得したい:

http://www.thapps.net/recordings/troporocks.mp3

次のプロパティのみを取得しました

mp3.crc=false
mp3.copyright=false
mp3.padding=false
mp3.channels=2
mp3.version.mpeg=1
mp3.framerate.fps=38.28125
mp3.framesize.bytes=413
mp3.version.layer=3
mp3.frequency.hz=44100
mp3.header.pos=0
mp3.bitrate.nominal.bps=128000
mp3.vbr.scale=0
mp3.version.encoding=MPEG1L3
mp3.mode=0
mp3.vbr=false
mp3.original=true

このコードを使用する場合:

ByteArrayInputStream bais = new ByteArrayInputStream(audioFile.file); 

AudioFileFormat baseFileFormat = new MpegAudioFileReader().getAudioFileFormat(bais);

Map<String, Object> properties = baseFileFormat.properties();
Integer duration = (Integer) properties.get("duration");

ただし、期間はプロパティ マップでは使用できません。

期間を取得するにはどうすればよいですか?

4

2 に答える 2

1

問題は、それがnew MpegAudioFileReader().getAudioFileFormat(bais)から継承されたメソッドを指していることですTAudioFileReader

これを機能させるために拡張した方法は次のMpegAudioFileReaderとおりです。

このメソッドを 300 行あたりに追加しました

public AudioFileFormat getAudioFileFormat(InputStream inputStream) throws UnsupportedAudioFileException, IOException {
    return getAudioFileFormat(inputStream, inputStream.available());
}

この行にコメントしました (約 400)

//FileInputStream fis = (FileInputStream) inputStream;

終わり!

于 2015-05-19T15:10:22.530 に答える
0

ByteArrayInputStream の代わりに File を使用してみましたが、動作します。

次のようにコードを変更することを検討してください。

File file = new File("filename.mp3");
AudioFileFormat baseFileFormat = new MpegAudioFileReader().getAudioFileFormat(file);
Map properties = baseFileFormat.properties();
Long duration = (Long) properties.get("duration");

どのバージョンの mp3Spi を使用していますか?

于 2013-06-17T08:46:15.143 に答える