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

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

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

目录

    • 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结果

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

6、示例2结果

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

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