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 : 如何编辑专辑艺术家?的主要内容,如果未能解决你的问题,请参考以下文章

C# TagLib 为 Mp3 设置专辑封面

RoR TagLib-Ruby:如何在 DB 中设置 ID3 标签

艺术家专辑数量

Spotify - 如何创建一个播放列表,包括艺术家的某些专辑

iPhone 获取所有专辑/艺术家

从音频文件中获取专辑封面、歌曲名称、专辑名称和艺术家姓名