帧大小未知

时间:2017-02-04 16:12:55

标签: java javasound

尝试获取音频文件的帧大小,而不是-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, 我不知道为什么帧大小未知,尽管它确实出现在我的音频文件属性中:

enter image description here

任何帮助都不仅仅是值得赞赏的。感谢。

1 个答案:

答案 0 :(得分:1)

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

如果你输入另一个.wav文件,你可能会获得2:

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

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

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

其他注意事项:我在显示屏上看不到框架尺寸;它相当于样本/比特率,所以一定要区分它。

但对于mp3,你必须忍受它。

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

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