Я пытаюсь получить амплитуду одного из mp3-файлов. Ниже приводится код:Почему FrameLength равно -1?
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 аудио файлов. Правильно ли я делаю это? ИЛИ есть ли другой способ получить длину кадра?
Если вы расшифровали mp3 в сырой РСМ, то больше нет кадров , Фреймы - это концепция MPEG, которая не применяется к pcm –
Спасибо Marc. Даже закодированный mp3-файл возвращает длину кадра как -1. Я положил первый println «System.out.println (ain.getFrameLength()); только для того, чтобы узнать, имеет ли кодированный файл какую-либо информацию о длине кадра или нет. –