【Java代码】MP3、flac歌曲批量生成同名的“xxx.lrc”歌词文件导入索尼黑砖二代

news/2024/4/23 20:22:22/文章来源:https://blog.csdn.net/weixin_36894490/article/details/130327867

目录

    • 1、准备条件
    • 2、实现方式
    • 3、代码环境和maven依赖
    • 4、Java代码
    • 5、示例1结果
    • 6、示例2结果
    • 7、一个小问题
    • 8、“音乐标签”下载地址

1、准备条件

  1. 网易云下载的MP3、flac后缀的歌曲若干首(ncm后缀的歌曲需要还原格式,不然会随着VIP过期而无法听)
  2. “音乐标签”软件下载(用来下载tag版本的歌词,下载地址在结尾)
  3. Android File Transfer电脑软件下载(mac电脑和黑砖二代文件传输使用,下载地址自行百度)

2、实现方式

第一步:借助“音乐标签”工具可以批量给歌曲生成tag形式的歌词,是音乐文件附加的tag信息,但是,但是,不是“xxx.lrc”格式的文件。

第二步:借助Java代码进行音乐文件的tag里的歌词拉取,再导出成同名文件,“.lrc”后缀的文件。

第三步:使用Android File Transfer进行传输到黑砖二代。

3、代码环境和maven依赖

  1. java8
  2. maven依赖:第一个是只适用MP3,第二个依赖适用flac(看源码,对MP3也支持,待求证)。
<!--A java library for reading mp3 files and manipulating mp3 file ID3 tags (ID3v1 and ID3v2.2 to ID3v2.4).
--><dependency><groupId>com.mpatric</groupId><artifactId>mp3agic</artifactId><version>0.9.1</version></dependency><!--The aim of this project is to provide a world class Java library for editing tag information in audio files. Most existing solutions are not java based inhibiting the use of java applications with digital files.--><dependency><groupId>org</groupId><artifactId>jaudiotagger</artifactId><version>2.0.3</version></dependency>

4、Java代码

主要执行代码,输出歌词到原始目录。支持MP3和flac格式的歌曲。

@Test
public void write2File_multi() throws Exception{String folderUrl = "/Users/zhanglifang/Downloads/new-music/music-temp2";File folder = new File(folderUrl);File[] files = folder.listFiles();for (File file : files) {String lyrics;String suffix = ".flac";String filePath = file.getPath();if (filePath.endsWith(".mp3")){MP3Helper mp3Helper = new MP3Helper();lyrics = mp3Helper.getMP3Lyrics(file);suffix = ".mp3";} else if (filePath.endsWith(".flac")) {MP3Helper mp3Helper = new MP3Helper();lyrics = mp3Helper.getFlacLyrics(file);} else {continue;}if (lyrics == null){System.out.printf("lyrics is empty,filePath:[%s]", filePath);continue;}WriteFileHelper writeFileHelper = new WriteFileHelper();writeFileHelper.writeText2File(filePath.replace(suffix,".lrc"), lyrics);}
}

获取MP3文件的歌词

public String getMP3Lyrics(File file) throws Exception {Mp3File mp3File = new Mp3File(file);ID3v2 id3v2Tag = mp3File.getId3v2Tag();return id3v2Tag.getLyrics();
}

获取flac文件的歌词

public String getFlacLyrics(File file) throws Exception {AudioFileIO audioFileIO = new AudioFileIO();AudioFile audioFile = audioFileIO.readFile(file);Tag tag = audioFile.getTag();return tag.getFirst(FieldKey.LYRICS);
}

生成文件歌词lrc后缀文件

public void writeText2File(String fullFileName, String text) throws Exception{FileOutputStream fileOutputStream = new FileOutputStream(fullFileName);fileOutputStream.write(text.getBytes());fileOutputStream.close();
}

单侧示例1,获取MP3歌词示例

@Test
public void test_getLyrics_mp3() throws Exception {File file = new File("/Users/zhanglifang/Documents/workspace4/learning/src/test/java/com/zlf/learning/leetcode/data/7JZ 满舒克 - DAY LOVE NIGHT.mp3");MP3Helper mp3Helper = new MP3Helper();String mp3Lyrics = mp3Helper.getMP3Lyrics(file);System.out.println(mp3Lyrics);
}

单侧示例2,生成MP3歌词lrc文件示例

@Test
public void write2File() throws Exception{String fileUrl = "/Users/zhanglifang/Documents/workspace4/learning/src/test/java/com/zlf/learning/leetcode/data/7JZ 满舒克 - DAY LOVE NIGHT.mp3";File file = new File(fileUrl);MP3Helper mp3Helper = new MP3Helper();String mp3Lyrics = mp3Helper.getMP3Lyrics(file);WriteFileHelper writeFileHelper = new WriteFileHelper();writeFileHelper.writeText2File(fileUrl.replace(".mp3",".lrc"), mp3Lyrics);}

5、示例1结果

在这里插入图片描述

6、示例2结果

在这里插入图片描述

7、一个小问题

实际操作1000首歌曲在目录“/Users/zhanglifang/Downloads/new-music/music-temp2”下,拉取时单次未获取到全部歌曲,可能是文件个数太多了。建议单次200首左右,分多次执行。

8、“音乐标签”下载地址

windows版:https://www.cnblogs.com/vinlxc/p/11347744.html

安卓版:https://www.coolapk.com/apk/com.xjcheng.musictageditor

备用下载地址:https://dhzy.lanzout.com/b0dg8mjnc 密码:8t6a

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_102237.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【原理图专题】案例:从集成的电平转换芯片换成三极管分立电平转换怎么就报异常

本案例是一个已经小批量量产的设备,不是我测试出来的,但是也算是我之前一手造成的,因为原理图这部分是我修改的。 异常发现最近生产的整机有部分非接读卡时无法控制到蜂鸣器发声音。我们的设计是这样的,有两个MCU互相通信,一个MCU是控制蜂鸣器的,另一个MCU通过SPI与非接芯…

银行数字化转型导师坚鹏:银行业务数字化创新工作坊

银行业务数字化创新工作坊 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚如何进行业务数字化创新&#xff1f; 不知道如何开展银行数字化营销工作&#xff1f; 不知道零售业务数字化创新成功案例&#xff1f; 学员收获&#xff1a; 学习原创银行BLM…

docker容器内的应用利用k8s configmap做配置中心

ConfigMap 能带来什么好处&#xff1f; 传统的应用服务都有自己的配置文件&#xff0c;各自配置文件存储在服务所在节点。如果配置出现变更&#xff0c;就需要对应节点的配置文件。Kubernetes 利用了 Volume 功能&#xff0c;完整设计了一套配置中心&#xff0c;其核心对象就是…

阳光万里,祝你上岸——免统考在职研究生

什么是在职研究生 在职研究生&#xff0c;是国家计划内&#xff0c;以在职人员身份&#xff0c;部分时间在职工作&#xff0c;部分时间在校学习的研究生教育的一种类型。在职攻读硕士方式有三种&#xff1a; 1.双证非全日制研究生&#xff1a;为普通高等教育研究生学历&#x…

Android OpenGL 渲染相机预览画面显示体系

OpenGL能进行高效得渲染图形图像&#xff0c;并支持各种复杂的特效和动画。 而在 Android 当中&#xff0c;运用的是OpenGL ES&#xff0c;它是OpenGL的一个轻量级版本&#xff0c;专门用于在移动设备、游戏控制台、嵌入式系统等嵌入式环境中使用。 它可以做相机滤镜或者图片…

seata1.6.0 单机,集群搭建 基于nacos注册中心 mysql数据库

seata1.6.0 单机&#xff0c;集群搭建 基于nacos注册中心 mysql数据库 大纲 1 单机搭建2 集群搭建 由于项目中的dubbo版本为2.6.0 故客户端程序&#xff08;TM RM&#xff09;使用seata-all 1.4.2 &#xff0c;服务端&#xff08;TC&#xff09;使用seata-server-1.6.0.zip …

MIT6.S081操作系统实验2021(xv6系统)——lab1 Xv6 and Unix utilities

MIT6.S081操作系统实验2021——lab1 参考文章 sleep 要求为xv6实现UNIX 程序sleep&#xff1b;其应该暂停用户指定的ticks number。tick是 xv6 内核定义的时间概念&#xff0c;即计时器芯片的两次中断之间的时间&#xff08;两次时钟中断之间的时间&#xff09;。您的解决方…

关于函数栈帧的创建与销毁和可变参数列表

目录 1. 深刻理解函数调用过程1.1 基本概念1.2 函数栈帧的创建于销毁1.2.1 栈帧创建1.2.2 栈帧销毁1.2.3 有趣的现象 2. 了解可变参数列表的使用与原理2.1 可变参数列表与函数栈帧的关系2.2 宏的工作过程2.3 宏的具体实现原理 1. 深刻理解函数调用过程 1.1 基本概念 关于函数…

【MySQL】(7)复合查询

文章目录 单表查询回顾与练习多表查询自连接多行子查询&#xff08;单列&#xff09;in 运算符all 关键字any 关键字 多列子查询from 子句中的子查询合并查询 单表查询回顾与练习 注&#xff1a;下面的依旧基于 scott 数据库 MariaDB [scott]> select * from emp; -------…

ASEMI代理ADG736BRMZ-REEL7原装ADI车规级ADG736BRMZ-REEL7

编辑&#xff1a;ll ASEMI代理ADG736BRMZ-REEL7原装ADI车规级ADG736BRMZ-REEL7 型号&#xff1a;ADG736BRMZ-REEL7 品牌&#xff1a;ADI /亚德诺 封装&#xff1a;MSOP-10 批号&#xff1a;2023 安装类型&#xff1a;表面贴装型 引脚数量&#xff1a;10 类型&#xff1…

Mybatis框架超详解及运用总结

Mybatis 一、什么是Mybatils&#xff1f;二、第一个Mybatils程序2.1、创建springboot工程2.2、准备数据2.3、配置MyBatis2.4、编写SQL语句2.5、单元测试 三、JDBC四、数据库连接池五、lombok六、Mybatis基础操作6.1、删除6.2、新增6.2.1、主键返回 6.3、修改6.4、查询6.4.1、数…

推式配货(Push)、拉式配货(Pull)和配送需求计划(DRP)的区别

随着电子商务的迅猛发展&#xff0c;物流配送服务已然成为企业竞争最为核心的环节&#xff0c;一个全面、完善的物流配送方案&#xff0c;能够帮助企业满足客户交期、节约运输和库存成本&#xff0c;促进各环节沟通&#xff0c;提高生产稳定性。同时&#xff0c;物流配送的许多…

垃圾回收概述

什么是垃圾 垃圾收集&#xff0c;不是Java语言的伴生产物。早在1960年&#xff0c;第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题&#xff1a; 哪些内存需要回收&#xff1f;什么时候回收&#xff1f;如何回收&#xff1f; 垃圾收…

9.7 字符串的指针和指向字符串的指针变量

9.7 字符串的指针和指向字符串的指针变量 一.字符串表示形式二.字符串指针做函数参数1.数组名做函数参数2.数组指针做函数参数 三.字符指针变量与字符数组&#xff08;1&#xff09;字符数组是由若干个元素组成&#xff0c;每个元素中存放一个字符。&#xff08;2&#xff09;赋…

[HBZ分享] 小米手机如何解BL锁

第一步&#xff1a; 进入【设置—>我的设备–>全部参数–>连续疯狂的点MIUI版本那一行】 第二步&#xff1a;进入【更多设置–>开发者模式】&#xff0c;打开USB调试 与 USB安装 第三步&#xff1a;进入【更多设置–>开发者模式】&#xff0c;进入【设别解锁状…

人工神经网络

1. 单个神经元 &#x1f351; 神经网络 即 模型 &#x1f364; 输入 四个参数 --> 结果 &#x1f351; 模型训练(学习) 例子 &#x1f351; 模型的输入x 乘 权值ω 减去阈值θ --> 激活函数 f &#x1f351; 输出 yi &#xff08;向下传递 或 直接输出&#xff09; …

JVM性能监测工具-JConsole

JVM性能监测工具-JConsole JConsole工具是JDK自带的图形化性能监控工具。并通过JConsole工具&#xff0c; 可以查看Java应用程序的运行概况&#xff0c; 监控堆信息、 元空间使用情况及类的加载情况等。 JConsole程序在%JAVA_HOM E%/bin目录下 或者你可以直接在命令行对他进…

【致敬未来的攻城狮计划】— 连续打卡第十天:FSP固件库开发及FSP配置详解。

系列文章目录 1.连续打卡第一天&#xff1a;提前对CPK_RA2E1是瑞萨RA系列开发板的初体验&#xff0c;了解一下 2.开发环境的选择和调试&#xff08;从零开始&#xff0c;加油&#xff09; 3.欲速则不达&#xff0c;今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

手势语言识别模型训练及应用

使用训练集训练模型&#xff0c;使模型能够识别不同手势。 OpenCV-Python环境使用训练集训练模型&#xff0c;使模型能够识别不同手势。系统测试 本项目基于卷积神经网络&#xff0c;通过Python的翻转功能沿垂直轴翻转每个图像&#xff0c;实现手势语言识别的功能。系统流程如图…

数据治理与数据中台架构

随着工业 4.0 时代的到来&#xff0c;传统行业的数字化转型是大势所趋&#xff1b;将数据提高到数据要素层面&#xff0c;让传统的技术在新的场景下发挥出新的作用&#xff0c;是近期研究和探讨的焦点话题。数语科技支持和服务传统行业多年&#xff0c;聚焦于传统数据建模和数据…