taglib : 如何编辑专辑艺术家?
Posted
技术标签:
【中文标题】taglib : 如何编辑专辑艺术家?【英文标题】:taglib : how to edit Album Artist? 【发布时间】:2013-05-18 20:47:58 【问题描述】:如何使用 TagLib 库修改 MP3 文件的“专辑艺术家”字段? 有没有类似的东西:
f.tag()->setArtist("blabla");
?
【问题讨论】:
我不明白 TagLib::FileRef 和 TagLib::File 之间的区别。如果我使用 TagLib::FileRef f("foo.mp3");,我不能使用 f.tag().removeFrames。如果我使用 TagLib::MPEG::File f("foo.mp3");,我应该可以使用 f.ID3v2Tag()->removeFrames TagLib::FileRef 和 TagLib::File 有什么区别?跨度>FileRef
只是一个方便的类,它处理为文件格式实例化适当的TagLib::File
子类——即,无论您向其抛出 Ogg、FLAC 还是 MP3 文件,它都可以工作。不过,“专辑艺术家”没有标准,因此您必须使用不那么通用的抽象,这就是 MPEG::File
的用武之地。
【参考方案1】:
ID3v2 实际上不支持名为“专辑艺术家”的字段。 iTunes使用的是TPE2框架,应该是:
TPE2 “乐队/管弦乐队/伴奏”框架用于提供有关录音中表演者的其他信息。
有关帧的完整列表,请参阅http://id3.org/id3v2.3.0#Declared_ID3v2_frames。
要使用 TagLib 编写,这样就可以了:
#include <mpegfile.h>
#include <id3v2tag.h>
#include <textidentificationframe.h>
int main()
TagLib::MPEG::File file("foo.mp3");
TagLib::ByteVector handle = "TPE2";
TagLib::String value = "bar";
TagLib::ID3v2::Tag *tag = file.ID3v2Tag(true);
if(!tag->frameList(handle).isEmpty())
tag->frameList(handle).front()->setText(value);
else
TagLib::ID3v2::TextIdentificationFrame *frame =
new TagLib::ID3v2::TextIdentificationFrame(handle, TagLib::String::UTF8);
tag->addFrame(frame);
frame->setText(value);
file.save();
return 0;
如果你只是想删除框架,你可以这样做:
TagLib::MPEG::File file("foo.mp3");
TagLib::ID3v2::Tag *tag = file.ID3v2Tag();
if(tag)
tag->removeFrames("TPE2");
file.save();
【讨论】:
非常感谢。实际上,我只是想删除“专辑艺术家”字段。 (对不起,我的问题不准确)。有没有更短的方法来删除这个“专辑艺术家”标签? a) 删除该字段还是 b)setText("")
更好?
removeFrames
似乎不适用于TagLib::Tag
:taglib.github.io/api/classTagLib_1_1Tag.html
你需要使用TagLib::ID3v2::Tag
,就像我在我的例子中所做的那样:taglib.github.io/api/classTagLib_1_1ID3v2_1_1Tag.html 这种情况下的帧是特定于ID3v2标签的;它们不存在于 TagLib::Tag
基类中,因为该类用于 all 标记格式。
谢谢!无论标签是 id3v2.3 还是 id3v2.4,它都会起作用吗?如果文件只包含 ID3v1 标签会怎样?以上是关于taglib : 如何编辑专辑艺术家?的主要内容,如果未能解决你的问题,请参考以下文章
RoR TagLib-Ruby:如何在 DB 中设置 ID3 标签