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

news2024/9/23 7:31:25

目录

    • 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.coloradmin.cn/o/452870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《CTFshow-Web入门》06. Web 51~60

Web 51~60 web51题解 web52知识点题解 web53知识点题解 web54知识点题解 web55知识点题解 web56知识点题解 web57知识点题解 web58知识点题解 web59题解 web60题解 ctf - web入门 web51 题解 相比上一题多过滤了 tac 命令。那换一个即可。 题解&#xff1a; url ?cnl<f…

go/java/C++覆盖率工具原理汇总学习记录

go–goc goc采用的是插桩源码的形式&#xff0c;而不是待二进制执行时再去设置breakpoints。这就导致了当前go的测试覆盖率收集技术&#xff0c;一定是侵入式的&#xff0c;会修改目标程序源码。直接看案例 package mainimport "fmt"func main() {test2(3)fmt.Prin…

Vue项目基于driverjs实现新用户导航

引导页就是当用户第一次或者手动进行触发的时候&#xff0c;提示给用户当前系统的模块介绍&#xff0c;比如哪里是退出&#xff0c;哪里是菜单等等相应的操作。 无论是开发 APP 还是 web 应用&#xff0c;新手引导都是一个很常见的需求&#xff0c;一般在这2个方面需要新手引导…

Java阶段二Day07

Java阶段二Day07 文章目录 Java阶段二Day07V17UserControllerDispatcherServletControllerRequestMapping V18DispatcherServletHandleMapping V19BirdBootApplication 线程池线程的执行过程线程池API 数据库数据库的基本概念数据库管理系统中常见的概念 SQL分类DDL语言-数据定…

浅析流媒体技术的发展趋势及EasyCVR视频技术的应用

随着科技的不断发展&#xff0c;流媒体已经成为人们日常生活中必不可少的一部分。为了进一步提高流媒体的质量&#xff0c;未来的技术革新方向将集中在以下几个方面&#xff1a; 1&#xff09;提高视频编解码技术的质量和效率 随着高清视频的普及&#xff0c;人们对流媒体的质…

GD32F470 移植STM32F429工程 Keil调试笔记

keil版本&#xff1a;5.25 安装 GigaDevice.GD32F4xx_DFP.3.0.4.pack Keil.STM32F4xx_DFP.2.15.0.pack 一、GD32F470 与 STM32F429 切换编译 1、原项目为STM32F429 工程&#xff0c;切换到GD32F470 只需在 Options for Target"“对话框的Device菜单中选中“GD32F470II”…

Http协议—请求的构造

目录 一、通过 form表单 构造HTTP请求 1、form 发送 Get 请求 &#xff08;1&#xff09;form 的重要参数 &#xff08;2&#xff09;input 的重要参数 2、通过 form 构造 Post 请求 二、通过 ajax 构造 HTTP 请求 1、基于 jQuery 中的 ajax 构造 &#xff08;1&#x…

动态网站开发讲课笔记07:EL和JSTL

文章目录 零、本节学习目标一、EL&#xff08;一&#xff09;EL基本语法1、EL的概念2、EL的语法3、案例演示&#xff08;1&#xff09;用EL读取保存的信息&#xff08;2&#xff09;使用Java代码与EL获取信息的对比 4、EL基本语法的特点 &#xff08;二&#xff09;EL中的标识符…

从语言模型到ChatGPT,大模型训练全攻略

文&#xff5c;python 前言 你是否想过&#xff0c;为什么ChatGPT能够如此火爆呢&#xff1f;我认为这主要是因为ChatGPT提供了好玩、有用的对话式交互功能&#xff0c;能够为用户提供帮助&#xff0c;而不仅仅是依靠“大”模型的魅力。毕竟&#xff0c;GPT-3在2020年就已经推出…

RedHat yum没有已启用源的解决方法

一般安装的红帽系统&#xff0c;自带的yum在没有付费的情况下是无使用的&#xff0c;所以我们要进行换源。 1、环境准备 先检查以下我们的linux系统环境&#xff0c;看看是不是Redhat7的版本 &#xff0c;出现如下图所示的界面 cat /etc/redhat-release 检查系统中是否安…

科技云报道:重塑增长新动能,“数智融合”捷径该如何走?

科技云报道原创。 如果说&#xff0c;过去是数字化转型的试验阶段&#xff0c;实施的是开荒动土、选种育苗&#xff0c;那么当前要进行的是精耕细作、植树造林。 数字化转型已进入了由个别行业、个别场景的“点状应用”向各行各业全流程、全环节“整体渗透”的关键期。 云计算…

yolov5-7.0 训练自己的数据集之检测数据集

YOLOv5是一种单阶段目标检测算法&#xff0c;有很高的精度和速度&#xff0c;因为项目需求&#xff0c;需要利用yolov5-7.0训练自己的目标检测数据集。 假设&#xff0c;环境已经配置完成&#xff01; 1&#xff09;准备数据集 在D:\Graduation_Project_Coding\network_class…

QGIS中导入dwg文件并使用GetWKT插件获取绘制元素WKT字符串以及QuickWKT插件实现WKT显示在图层

场景 QGIS在Windows上下载安装与建立空间数据库连接&#xff1a; https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/124108040 在上面实现QGIS的安装之后&#xff0c;版本是3.26.3。 业务需求: 1、在dwg文件上绘制多边形区域&#xff0c;并获取绘制区域的wkt字…

如何在美国虚拟主机上安装WordPress?

如果你想在美国虚拟主机上搭建一个博客网站&#xff0c;那么WordPress是一个非常好的选择。本文将介绍如何在美国虚拟主机上安装WordPress&#xff0c;帮助你快速建立一个美观、高效的博客网站。 一、选择合适的虚拟主机服务商 在安装WordPress之前&#xff0c;你需要选择一个可…

[Netty] Netty自带的心跳机制 (十五)

文章目录 1.IdleStateHandler介绍2.IdleStateHandler源码解析3.IdleStateHandler总结 1.IdleStateHandler介绍 Netty服务端心跳机制: IdleStateHandler, 这个类可以对三种类型的心跳检测。 ChannelHandler.Sharable public class IdleHandler extends ChannelInboundHandlerA…

redis7详解

Redis基础 文章目录 一、Redis入门概述是什么&#xff1f;能干嘛&#xff1f;主流功能与应用优势 Redis7新特性 二、Redis安装配置Redis7安装步骤Redis7卸载步骤 三、Redis10大数据类型Redis 键(key)1、Redis 字符串&#xff08;String&#xff09;2、Reids列表&#xff08;Lis…

java版本电子招标采购系统源码—企业战略布局下的采购

​ 智慧寻源 多策略、多场景寻源&#xff0c;多种看板让寻源过程全程可监控&#xff0c;根据不同采购场景&#xff0c;采取不同寻源策略&#xff0c; 实现采购寻源线上化管控&#xff1b;同时支持公域和私域寻源。 询价比价 全程线上询比价&#xff0c;信息公开透明&#xff0…

谷歌云 | 内部 HTTP(S) 负载均衡器现在可以在全球范围内访问

【本文由Cloud Ace整理发布&#xff0c;Cloud Ace 是谷歌云全球战略合作伙伴&#xff0c;拥有 300 多名工程师&#xff0c;也是谷歌最高级别合作伙伴&#xff0c;多次获得 Google Cloud 合作伙伴奖。 作为谷歌托管服务商&#xff0c;我们提供谷歌云、谷歌地图、谷歌办公套件、谷…

店铺销售管理系统有哪些用?该如何选?

现在市场竞争越来越激烈&#xff0c;实体店想要吸引更多意向客户&#xff0c;快速提高销量&#xff0c;使用店铺管理系统来智能化管理店铺&#xff0c;已经成为不可或缺的手段。 店铺管理系统能够帮助实体店老板实现店铺销售和库存管理的自动化和集中化&#xff0c;提高门店的销…

Ceph入门到精通-podman 入门实战

目录 podman安装podman制作本地镜像podman(docker)命令回顾podman快速入门 一入编程深似海&#xff0c;从此节操是路人。 最近使用podman&#xff0c;就想着写一篇总结性的笔记&#xff0c;以备后续参考。就如同写代码&#xff0c;不写注释&#xff0c;过了一段时间可能会想这…