尝试获取音频文件的帧大小,而不是-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,
我不知道为什么帧大小未知,尽管它确实出现在我的音频文件属性中:
任何帮助都不仅仅是值得赞赏的。感谢。
答案 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);