Taglib从任意文件c++; 我试图使用TAGLIB C++ API从任意音频文件读取ID3V2元数据。此文件不一定是.mp3文件,也可能是其他常见的音频格式。我有以下资料: std::string readId3v2Tag(std::string文件路径,std::string标记名){ //从文件中读取 TagLib::FileRef f(filePath.c_str()); 如果(!f.isNull()&&f.file()){ //从属性映射获取标记 TagLib::PropertyMap tags=f.file()->properties(); if(tags.find(tag)!=tags.end()){ 返回std::string(tags[tag][0].toCString()); } } }

Taglib从任意文件c++; 我试图使用TAGLIB C++ API从任意音频文件读取ID3V2元数据。此文件不一定是.mp3文件,也可能是其他常见的音频格式。我有以下资料: std::string readId3v2Tag(std::string文件路径,std::string标记名){ //从文件中读取 TagLib::FileRef f(filePath.c_str()); 如果(!f.isNull()&&f.file()){ //从属性映射获取标记 TagLib::PropertyMap tags=f.file()->properties(); if(tags.find(tag)!=tags.end()){ 返回std::string(tags[tag][0].toCString()); } } },c++,audio,metadata,taglib,id3v2,C++,Audio,Metadata,Taglib,Id3v2,但是,当我输入ID3v2帧名称时,它不会返回任何内容。我相信这是因为f.file()->properties()map包含TagLib的标记格式。我必须能够通过名称访问ID3v2帧 我被告知要使用ID3v2类,但是我不知道如何从文件中访问它,并且在读取API文档时遇到了问题。有人知道怎么做吗?始终阅读手册:不要使用文件()方法。另外,properties()不会给您ID3v2标记帧-您应该迭代所有帧以查看它们的键和值 反而 使用MPEG::File(请参阅),然后继续阅读 超过ID3v2Tag

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

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

始终阅读手册:不要使用
文件()
方法。另外,
properties()
不会给您ID3v2标记-您应该迭代所有帧以查看它们的键和值

反而

  • 使用
    MPEG::File
    (请参阅),然后继续阅读
  • 超过
    ID3v2Tag()
    (请参阅)
  • 框架列表()
    (请参阅)
一旦术语明确,它就非常简单:一个文件可以有零到多个标记,而ID3v2标记可以有一到多个帧。但是,文件本身也可以有多个与标记无关的属性(即音频持续时间、位深度…)-难怪您搜索的帧名不会出现在文件的属性中。另外,
properties()
不会给您ID3v2标记-您应该迭代所有帧以查看它们的键和值

反而

  • 使用
    MPEG::File
    (请参阅),然后继续阅读
  • 超过
    ID3v2Tag()
    (请参阅)
  • 框架列表()
    (请参阅)
一旦术语明确,它就非常简单:一个文件可以有零到多个标记,而ID3v2标记可以有一到多个帧。但是,文件本身也可以有多个与标记无关的属性(即音频持续时间、位深度…)-难怪您搜索的帧名不会显示在文件的属性中