目录
- 1、准备条件
- 2、实现方式
- 3、代码环境和maven依赖
- 4、Java代码
- 5、示例1结果
- 6、示例2结果
- 7、一个小问题
- 8、“音乐标签”下载地址
1、准备条件
- 网易云下载的MP3、flac后缀的歌曲若干首(ncm后缀的歌曲需要还原格式,不然会随着VIP过期而无法听)
- “音乐标签”软件下载(用来下载tag版本的歌词,下载地址在结尾)
- Android File Transfer电脑软件下载(mac电脑和黑砖二代文件传输使用,下载地址自行百度)
2、实现方式
第一步:借助“音乐标签”工具可以批量给歌曲生成tag形式的歌词,是音乐文件附加的tag信息,但是,但是,不是“xxx.lrc”格式的文件。
第二步:借助Java代码进行音乐文件的tag里的歌词拉取,再导出成同名文件,“.lrc”后缀的文件。
第三步:使用Android File Transfer进行传输到黑砖二代。
3、代码环境和maven依赖
- java8
- 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