设置MP3 ID3v2标签中的歌词

时间:2012-08-12 18:58:07

标签: java android mp3 id3v2

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

我修改了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 个答案:

答案 0 :(得分:6)

查看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都扩展的超类。