4

我正在尝试.wav使用以下代码获取我在 Java 项目中使用的文件的属性。但是,当我运行此代码时,方法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")};
4

1 回答 1

1

WAV 文件很难处理,即使它们可以包含多种元数据类型。根据所使用的软件和编码器(16/32 位 PCM),您可以对文件进行不同的配置,Java Sound API在读取此元数据时会遇到问题。

我尝试了很多专注于音频元标记的工具和库(例如Apache Tikajd3libmp3agicBeaglebuddy等),其中大多数都适用于 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 添加了对此功能的支持。所以,总是更喜欢最新版本来解决兼容性问题。

于 2016-11-19T01:56:34.613 回答