在 MP3 ID3v2 标签中设置歌词

Posted

技术标签:

【中文标题】在 MP3 ID3v2 标签中设置歌词【英文标题】:Set Lyrics in MP3 ID3v2 Tag 【发布时间】:2012-08-12 18:58:07 【问题描述】:

我想在 android 应用程序中为 mp3 写歌词。我找到了一个用于读取 mp3 文件和读取/操作 ID3 标签(ID3v1 和 ID3v2.2 到 ID3v2.4)的 java 库,名为 @987654321 @。

我修改mp3agic写ID3v2标签的歌词标签,写标签:USLT。发现于Wikipedia

在一个示例 Android 应用程序中,我修改了 MP3 的艺术家、专辑、标题、流派、歌词和评论。除歌词外,所有标签均已正确修改。 PowerAMP 用于验证修改后的MP3 文件,PowerAMP 在 MP3 中找不到歌词。

如果有人熟悉这个库,这里是我从 AbstractID3v2Tag.java 修改的代码:

//define lyric tag for id3v2
public static final String ID_TEXT_LYRICS = "USLT";

//get the lyrics from the tag
public String getLyrics() 
    ID3v2TextFrameData frameData;
    if (obseleteFormat) return null;
    else frameData = extractTextFrameData(ID_TEXT_LYRICS);
    if (frameData != null && frameData.getText() != null) 
        return frameData.getText().toString();
    return null;


//set the lyrics in the tag
public void setLyrics(String lyrics) 
    if (lyrics != null && lyrics.length() > 0) 
        invalidateDataLength();
        ID3v2TextFrameData frameData = new ID3v2TextFrameData(useFrameUnsynchronisation(), new EncodedText(lyrics));
        addFrame(createFrame(ID_TEXT_LYRICS, frameData.toBytes()), true);
    

我使用 Windows 中的程序在 MP3 上设置歌词,并使用我的应用程序读取 USLT 标签,getLyrics() 返回字符串 engPowerAMP 确实找到了这些由 Windows 程序设置的歌词。

我搜索并找到了许多指向 MP3 ID3 标签修饰库的帖子,这就是我找到 mp3agic 的地方。这是唯一一个我可以轻松修改以包含歌词更改的库。

我找到的一个库是MyID3_for_Android,它没有修改歌词的方法。

我正在寻找这方面的指导。

【问题讨论】:

【参考方案1】:

在http://id3.org/id3v2.4.0-frames查看官方ID3规范:

Header for 'Unsynchronised lyrics/text transcription', ID: "USLT":
    Text encoding        $xx
    Language             $xx xx xx
    Content descriptor   (text string according to encoding) $00 (00)
    Lyrics/text          (full text string according to encoding)

因此,USLT 框架不仅仅是一个文本框架,这就是您尝试解析它的方式。相比之下,文本框架看起来像这样:

Header for 'Text information frame', ID: "T000" - "TZZZ" excluding "TXXX":
    Text encoding                $xx
    Information                  (text string(s) according to encoding)

注意 USLT 框架中的额外字段。您需要一个自定义框架类(例如,ID3v2LyricsFrameData)。

但是,USLT 框架与注释框架 (COMM) 非常相似,因此您可能可以重复使用其中的一些代码。或许创建一个 ID3v2CommentFrameData 和 ID3v2LyricsFrameData 都扩展的超类。

【讨论】:

你的建议是正确的。

以上是关于在 MP3 ID3v2 标签中设置歌词的主要内容,如果未能解决你的问题,请参考以下文章

从 mp3 id3v2 标签中识别歌曲信息

使用 id3v2 获取 MP3 ID3 (V2) 标签

如何用 java 读/写 ID3v2 标签?

请教mp3ID3V2编码问题:选择utf-16和 iso-8859-1有啥区别?哪个更常用更好?

删除 id3v2 标签 c++

如何使用 Mp3agic jar Android studio 从 MP3 文件中获取 ID3 歌词标签?