在 MP3 ID3v2 标签中设置歌词

2023-12-23

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

我修改了mp3agic写入ID3v2标签的歌词标签,写入标签:USLT。在发现维基百科 http://en.wikipedia.org/wiki/ID3#ID3v2_Frame_Specification_.28Version_2.3.29

在示例 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 https://sites.google.com/site/eternalsandbox/myid3-for-android没有修改歌词的方法。

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


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MP3 ID3v2 标签中设置歌词 的相关文章

  • Web 视图未在 Android 中加载本地 html 文件

    I am integrating html in android I have created a web view But i am not able load local html page Surprisingly web view
  • 将表值参数与 SQL Server JDBC 结合使用

    任何人都可以提供一些有关如何将表值参数 TVP 与 SQL Server JDBC 一起使用的指导吗 我使用的是微软提供的6 0版本的SQL Server驱动程序 我已经查看了官方文档 https msdn microsoft com en
  • Firebase ANR - 甚至不使用 firebase

    随着 GMS 的最新更新 引入了新的 ANR 如果您退出应用程序 然后返回 则 ANR 就会初始化 线程跟踪似乎指向 Firebase 但我什至从未开始使用 Firebase 我猜它一定是新的 GMS 包的一部分 06 11 00 34 0
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 如何将 Jfreechart(饼图)添加到 netbeans 的面板中

    我正在使用 netbeans gui 编辑器 并且正在尝试添加一个本身位于内部框架中的 Jfreechart 并且这个内部框架我想将其添加到面板中 正如您在此图中看到的那样 抱歉 我无法直接发布图像 因为我新手 http www flick
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • Java - 返回值是否会中断循环?

    我正在编写一些基本上遵循以下格式的代码 public static boolean isIncluded E element Node
  • Vimeo 视频在 Android 6 设备上停止播放

    我正在尝试在我的应用程序中播放 Vimeo 的视频 问题是在 Android 6 设备上 视频会在一定时间后停止播放 在 API 较低的设备上一切正常 时间取决于质量 对于下面提供的网址的视频 播放一定分钟 1 到 3 视频质量有多低 播放
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • NoClassDefFoundError:无法解析:Landroid/support/v7/appcompat/R$styleable

    新手尝试完成 Google 提供的我的第一个应用程序教程 在这个致命异常的过程中 我确实导入了很多随机包来消除许多事情的 无法解析 错误 例如 ActionBarActivity EditText Fragment LayoutInflat
  • 无法捕获 Spring Batch 的 ItemWriter 中的异常

    我正在编写一个 Spring Batch 流程来将数据集从一个系统迁移到另一个系统 在这种情况下 这就像使用RowMapper实现在传递给查询之前从查询构建对象ItemWriter The ItemWriter称为save我的 DAO 上的
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • 安卓的限制

    我需要构建一个应用程序 该应用程序拍摄相机图像并将其上传到网络 在网络上进行一些处理并返回真 假 我在这方面遇到了一些问题 希望得到澄清 1 我的应用程序有什么方法可以知道 Android 相机捕获的图像吗 我从这里明白了什么 Androi
  • 在没有 Wifi 的情况下获取 Android 设备的 MAC 地址

    如何获取没有 Wifi 接口的 Android 设备 例如 Android 模拟器 的网络接口的 MAC 地址 通过WifiManager返回获取的WifiInfonull EDIT 更清楚地说 我必须与本地网络上的现有网络协议 不是我设计
  • JAXB - 列表<可序列化>?

    我使用 xjc 制作了一些课程 public class MyType XmlElementRefs XmlElementRef name MyInnerType type JAXBElement class required false
  • Android:如何检测手机设置中的语言已更改

    我如何检测我的手机语言是否已更改 例如 Facebook 应用程序将向我们宣布 please wait we preparing your language i used myString Locale getDefault getDisp

随机推荐

  • 在 R 中使用正则表达式检测字符串中任意位置的特定单词[重复]

    这个问题在这里已经有答案了 我正在尝试在 R 中编写正则表达式来检测可能出现在字符串中任何位置的单词 但仅限于它作为整个单词出现时 例如在 samplestr lt c LT BLAHBLAH BLAH LT BLAH BLAHLT BLO
  • 如何在MySQL中手动将种子值设置为1000

    我使用的是 MySQL 5 我需要将自动增量字段的种子值设置为 1000 我该如何设置呢 创建表时设置 CREATE TABLE xxx AUTO INCREMENT 1000 创建表后设置 ALTER TABLE xxx AUTO INC
  • Android:从计时器线程访问 UI 元素

    public Button stb static int cnt 0 public ArrayList
  • 多个对象上的 javascript 事件监听器

    我为一些人做了一个事件监听器 div 元素 现在我想要更改此特定元素的子元素的不透明度 以更改此特定元素上的 EventListener 是否为 true 如何使用 jQuery 或 Javascript 编写它 我已经写了伪引用 我认为应
  • 选择 DataFrame 中数组的最后一个元素

    我正在开发一个项目 正在处理一些具有复杂架构 数据结构的嵌套 JSON 日期 基本上我想要做的是过滤掉数据框中的一列 以便选择数组中的最后一个元素 我完全不知道如何做到这一点 我希望这是有道理的 下面是我想要实现的目标的示例 val sin
  • 如何以编程方式关闭 vscode.window 的 showInformationMessage 框

    我刚刚开始学习 vscode 扩展 我想知道是否有一种简单的方法可以以编程方式关闭通过生成的信息消息框vscode window showInformationMessage 如果你想重现 我从字数统计演示在这里 https code vi
  • Springboot 与 Elasticsearch 5.0 客户端 - Log4j2 错误

    我正在尝试将 Elasticsearch 5 0 传输客户端与 sprintboot 应用程序一起使用 Elasticsearch 5 0 客户端使用 log4j2 当我启动 springboot 服务时 ES 客户端会抛出错误 因为它找不
  • 通过 AWS SDK 对 SQS 的访问被拒绝

    我目前正在开发一个使用 Symfony2 开发的网站 我需要在 Amazon SQS 中发送消息 为了做到这一点 我添加到我的composer json aws aws sdk php 2 4 然后 当我尝试创建队列或列出队列时 出现 40
  • Bitnami GitLab 5.2.0:gitlab_sidekiq 未运行且无法启动

    我们正在使用Bitnami GitLab 5 2 0 http bitnami com stack gitlab README txt 我们偶然发现我们无法推送到新的存储库 例如 email protected cdn cgi l emai
  • 不使用 jQuery 选择元素

    我猜这会被否决 因为它没有包含足够的 jQuery 但它就在这里 What is the most effective way to get the element s returned by the jQuery selector bel
  • 使用 magento api 构建电子商务网站

    我是 magento 的初学者 正在使用 magento 创建一个网站 我注意到 magento 有大量 api 它们公开了我创建电子商务网站所需的所有功能 所以 我想使用magento的api来获取数据 但单独开发UI而不依赖于magen
  • 调整 GridView 项目大小以填充 GridView?

    我有这个问题的反面 如何动态调整 GridView 项目的大小 https stackoverflow com questions 13254107 how do i dynamically size a gridview item 我有一
  • 如何将按钮内的图标和文本居中?

    如何将按钮内的图标和文本居中而不指定对齐项目的尺寸 ico background url https www gravatar com avatar cbfaff96665b7567defe1b34a883db8b s 32 d ident
  • Jacoco Maven 多模块项目覆盖

    似乎有几个问题 这些问题已经很老了 并且 Jacoco 的 Java 8 支持发生了变化 我的项目包含以下结构 pom xml sub module A pom xml sub module B pom xml sub module C p
  • 由于删除运算符会释放内存,为什么需要析构函数?

    来自 C 常见问题解答 http www parashift com c faq lite dtors html faq 11 9 http www parashift com c faq lite dtors html faq 11 9
  • 如何在流数据帧上应用滞后函数?

    我有一个具有三列 time col1 col2 的流数据帧 我必须在第 2 列上应用滞后函数 我尝试过以下查询 val w org apache spark sql expressions Window oderBy time df sel
  • Kubernetes部署内存占用高

    我在 GKE 容器中使用 python Flask 并且 pod 内的内存正在增加 我对 pod 设置了限制 但它被杀死了 我想这是内存泄漏 有人可以在看完这个后提出一些建议 随着磁盘的增加 内存也会增加 并且也会出现一些页面错误 有没有容
  • 自动指针的优点/缺点

    与普通指针相比 使用自动指针 auto ptr 有哪些优点和缺点 我听说它会自动释放内存 但为什么不经常使用呢 主要缺点是std auto ptr是它有所有权转让语义 这使得它无法存储std auto ptr在 STL 容器中 因为当您存储
  • Android 在上传到市场时隐藏应用程序中的日志

    我的应用程序有很多 Log i 添加用于调试的语句 现在如果需要将这样的应用程序上传到市场 是否应该删除这些日志 如果是 是否有比手动删除更简单的方法 如果不删除 如果用户从市场安装应用程序后运行应用程序 是否会出现这些日志 我尝试查看某些
  • 在 MP3 ID3v2 标签中设置歌词

    我想在 Android 应用程序中将歌词写入 mp3 我找到了一个用于读取的 java 库mp3文件并读取 操作 ID3 标签 ID3v1 和 ID3v2 2 到 ID3v2 4 名为mp3agic https github com mpa