未知帧大小

Unknown frame size

试图获取音频文件的帧大小,但我得到的是 -1。我试图在 JavaDoc 中寻找对这个结果的解释,但它没有提到任何大的东西。这是源代码:

import javazoom.spi.mpeg.sampled.file.MpegAudioFileReader;
/*....*/
File file = new File("/home/songs/audio.mp3");
MpegAudioFileReader mpegAudioFileReader = new MpegAudioFileReader();        
AudioInputStream audioInputStream = mpegAudioFileReader.getAudioInputStream(file); 
AudioFormat format = audioInputStream.getFormat();   
long frameSize = format.getFrameSize();//frameSize = -1
float frameRate = format.getFrameRate();//frameRate = 38.28125

检查他 format 对象给出了这个:MPEG1L3 44100.0 Hz, unknown bits per sample, stereo, unknown frame size, 38.28125 frames/second, 我不知道为什么帧大小是未知的,尽管它确实出现在我的音频文件属性中:

非常感谢您的帮助。谢谢

getFormat() 等是由 MPEG 人员实现的,因此它 returns 他们拥有的东西 - 可能他们将此留空或无法提取;

如果你放另一个 .wav 文件你可能会得到 2:

try {
  audioInputStream=AudioSystem.getAudioInputStream(new File(".......wav"));

  System.out.println(audioInputStream.getFormat().getFrameSize());

} catch (Exception e) {
        e.printStackTrace();
}

其他注意事项:我在您的显示器中没有看到帧大小;而是 sample/bit 比率,因此请务必对此加以区分。

但对于 mp3,您必须忍受这一点。

如果有帮助,您也可以创建自己的格式 - 不知道您的应用程序

AudioFormat format = audioInputStream.getFormat();
newFormat=new AudioFormat(
          AudioFormat.Encoding.PCM_SIGNED,
          format.getSampleRate(),
          16,
          format.getChannels(),
          format.getChannels() * 2,
          format.getSampleRate(),
          false);