Почему FrameLength равен -1? - PullRequest
0 голосов
/ 22 марта 2012

Я пытаюсь получить амплитуду одного из mp3-файлов.Ниже приведен код:

        AudioInputStream ain = AudioSystem.getAudioInputStream(file);
        AudioFormat baseFormat = ain.getFormat();
        AudioFormat decodedFormat = new AudioFormat(
                                        AudioFormat.Encoding.PCM_SIGNED,
                                        baseFormat.getSampleRate(),
                                        16,
                                        baseFormat.getChannels(),
                                        baseFormat.getChannels()*2,
                                        baseFormat.getSampleRate(),
                                        false);
        //play(file,din,decodedFormat,ain);
        ain = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(file)));
        DecodedMpegAudioInputStream decodedStream = new DecodedMpegAudioInputStream(decodedFormat, ain);
        System.out.println(ain.getFrameLength());
        System.out.println(decodedStream.getFrameLength());

Проблема в том, что последние printlns возвращают -1, другими словами, в файле mp3 нет информации о длине кадра или аудиопоток не может прочитать длину кадрачто возможно?).Я пытаюсь узнать о формате mp3 аудио файлов.Я делаю это правильно?ИЛИ есть ли другой способ получить длину кадра?

1 Ответ

0 голосов
/ 10 мая 2014

Проверьте, является ли AudioSystem.getAudioFileFormat(file) формат MPEG, и запустите его свойства

AudioFileFormat audioFileFormat = AudioSystem.getAudioFileFormat(file);
if (audioFileFormat instanceof TAudioFileFormat) {
    Map<String, Object> properties = ((TAudioFileFormat) audioFileFormat).properties();
// ...
}

Есть такие свойства, как mp3.length.bytes, которые могут помочь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...