java - 在 MP3 ID3v2 标签中设置歌词

标签 java android mp3 id3v2

我想在 Android 应用程序中将歌词写入 mp3。我找到了一个用于阅读的 java 库 mp3文件并读取/操作 ID3 标签(ID3v1 和 ID3v2.2 到 ID3v2.4),名为 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);
    }
}

我在 MP3 上设置了歌词使用 Windows 中的程序并阅读 USLT标记我的应用程序和 getLyrics()返回字符串 eng . PowerAMP确实找到了Windows程序设置的这些歌词。

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

我找到的一个图书馆是 MyID3_for_Android没有修改歌词的方法。

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

最佳答案

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 都扩展的父类(super class)。

关于java - 在 MP3 ID3v2 标签中设置歌词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11924922/

相关文章:

java - 如何将字符串参数传递到 @Query 而不带撇号

java - 没有枚举常量 org.gradle.api.JavaVersion.VERSION_14

android - 从 Android 设备获取超过 10000 个联系人

android - 如何通过ADB连接wifi

c# - 使用 IAudioEncoderProperties 在 DirectShow 应用程序中配置 LAME MP3 编码器

java - Gmail API 删除不起作用

java - 使用 Dojo/Dijit 分割字符串

java - 如何在Java中根据公共(public)属性合并两个排序的对象列表

java - 使用 JLayer 将 MP3 解码为 PCM 来检测幅度

android - 一次仅从mp3文件中解码一些PCM字节