我正在尝试使用以下代码获取我在Java项目中使用的.wav
文件的属性。但是,当我运行此代码时,方法format.getProperty("title")
,format.getProperty("author")
和format.getProperty("duration")
都返回null。我应该以不同的方式获取这些细节吗?
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(wavFile);
AudioFormat format = audioInputStream.getFormat();
Object[] temp = {false,
format.getProperty("title"),
format.getProperty("author"),
format.getProperty("duration")};
答案 0 :(得分:1)
WAV文件难以使用,即使they can hold several metadata types。根据所使用的软件和编码器( 16/32位PCM ),您可以对文件进行不同的配置,Java Sound API将面临读取此元数据的问题。
我尝试了许多专注于音频元标记的工具和库(例如Apache Tika,jd3lib,mp3agic,Beaglebuddy等等,并且大多数都可以工作很好的MP3或其他音频格式,但不适用于WAV文件。
显然,处理此问题的最好方法是Jaudiotagger。这很简单,快速,您可以通过以下方式实现目标:
AudioFile f = AudioFileIO.read(wavFile);
WavTag tag = (WavTag) f.getTag();
Object[] temp = {false,
tag.getFirst(FieldKey.TITLE),
tag.getFirst(FieldKey.ARTIST),
f.getAudioHeader().getTrackLength() // In seconds
};
另外,请参阅以下链接:
注意:从上面的2.2.4版本添加了对此功能的支持。所以,总是更喜欢the latest version来驱逐兼容性问题。