Taglib 从任意文件 c++ 中读取 ID3v2 标签

Taglib read ID3v2 tags from arbitrary file c++

我正在尝试使用 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 框架名称时,它 return 什么也没有。我相信这是因为 f.file()->properties() 地图包含 TagLib 的标签格式。我必须能够通过名称访问 ID3v2 帧。

有人告诉我使用 ID3v2 class,但是我不知道如何从文件访问它,并且在阅读 API 文档时遇到问题。有人知道怎么做吗?

始终阅读手册:it tells you 不要使用 file() 方法。另外 properties() 不会给你 ID3v2 标签 frames - 你应该遍历所有它们以查看它们的键和值。

相反

  • 使用 MPEG::File(参见 manual)并从 go/read 开始
  • 超过 ID3v2Tag()(参见 manual
  • frameList()(参见manual)。

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