1

我正在尝试使用 TagLib C++ API 从任意音频文件中读取 ID3v2 元数据。该文件不一定是.mp3文件,可能是其他常见的音频格式。我有以下内容:

std::string readId3v2Tag(std::string filePath, std::string tagName) {
    // read from file
    TagLib::FileRef f(filePath.c_str());
    if (!f.isNull() && f.file()) {
        // get tags from property map
        TagLib::PropertyMap tags = f.file()->properties();
        if (tags.find(tag) != tags.end()) {
            return std::string(tags[tag][0].toCString());
        }
    }
}

但是,当我输入 ID3v2 框架名称时,它不会返回任何内容。我相信这是因为f.file()->properties()地图包含 TagLib 的标签格式。我必须能够按名称访问 ID3v2 帧。

我被告知要使用ID3v2该类,但是我看不到如何从文件中访问它,并且在阅读 API 文档时遇到了麻烦。有谁知道如何做到这一点?

4

1 回答 1

0

始终阅读手册:它告诉您不要使用该file()方法。properties()也不会给你 ID3v2 标签帧-你应该迭代所有它们以查看它们的键和值。

反而

  • 使用MPEG::File(参见手册)并从那里开始/继续阅读
  • 结束ID3v2Tag()(见手册
  • frameList()(见手册)。

一旦条款明确,这非常简单:一个文件可以有零到多个标签,其中一个 ID3v2 标签可以有一个到多个。然而,单独的文件也可以具有多个未绑定到标签的属性(即音频持续时间,位深度......) - 难怪您搜索的所有名称都不会显示在文件的属性中。

于 2020-07-19T17:10:23.447 回答