用java写一个音乐播放程序,同时显示歌词
目录
主题程序分为三部分{1.创建音乐播放窗口
2.计时器
3.对歌词进行处理
}
本程序运用了一个包,一个主程序,2个类进行处理歌词和时间
1.lrc歌词文件
在LRC歌词文本中,通常包含两类标签:时间标签和歌词文本标签。
- 时间标签:时间标签用于指定歌词的显示时间。它通常由方括号包围,并包含了歌词的起始时间和结束时间。时间标签的格式可以是分秒格式([mm:ss.xx])或者毫秒格式([mm:ss:xxx]),其中mm表示分钟,ss表示秒,xx或xxx表示毫秒。
示例:
[00:12.34]歌词内容 [01:23.45][02:34.56]歌词内容
- 歌词文本标签:歌词文本标签用于包含实际的歌词文本内容。它位于时间标签之后,直到下一个时间标签出现之前。歌词文本标签没有特定的格式要求,可以是任意文本内容。
示例:
[00:12.34]这是第一句歌词 [00:16.78]这是第二句歌词
通过使用这两类标签,LRC歌词文本可以指定每句歌词的显示时间,并且可以在指定的时间点显示相应的歌词内容。
2.解析歌词
这里以水星记歌词为例:
[ti:水星记]
[ar:郭顶]
[al:飞行器的执行周期]
[by:]
[offset:0]
[00:00.00]水星记 - 郭顶
[00:06.50]词:郭顶
[00:13.00]曲:郭顶
[00:19.50]着迷于你眼睛
[00:21.81]
[00:23.21]银河有迹可循
[00:25.34]
[00:26.46]穿过时间的缝隙
[00:29.28]
[00:30.04]它依然真实地
[00:33.05]
[00:33.76]吸引我轨迹
[00:36.53]
[00:40.74]这瞬眼的光景
[00:43.25]
[00:44.27]最亲密的距离
[00:46.85]
[00:47.77]沿着你皮肤纹理 走
[00:51.68]过曲折手臂
[00:54.34]
[00:55.26]做个梦给你
[00:57.53]
[00:58.88]做个梦给你
[01:01.55]
[01:03.97]等到看你银色满际
[01:06.56]
[01:07.37]等到分不清季节更替
[01:11.89]
[01:13.24]才敢说沉溺
[01:16.38]
[01:20.28]还要多远才能进入你的心
[01:26.50]
[01:27.47]还要多久才能和你接近
[01:33.61]
[01:34.63]咫尺远近却
[01:37.08]无法靠近的那个人
[01:42.30]也等着和你相遇
[01:47.91]
[01:49.33]环游的行星
[01:52.05]
[01:52.57]怎么可以
[01:55.47]
[01:56.43]拥有你
[01:58.29]
[02:14.03]这瞬眼的光景
[02:16.57]
[02:17.42]最亲密的距离
[02:19.98]
[02:20.93]沿着你皮肤纹理
[02:24.61]走过曲折手臂
[02:27.66]
[02:28.36]做个梦给你
[02:30.78]
[02:31.88]做个梦给你
[02:34.92]
[02:36.89]等到看你银色满际
[02:40.59]等到分不清季节更替
[02:44.96]
[02:46.17]才敢说沉溺
[02:53.44]还要多远才能进入你的心
[02:59.70]
[03:00.63]还要多久才能和你接近
[03:06.78]
[03:07.73]咫尺远近却
[03:09.86]无法靠近的那个人
[03:15.43]也等着和你相遇
[03:20.94]
[03:22.13]环游的行星
[03:25.04]
[03:25.69]怎么可以
[03:29.38]拥有你
[03:35.83]
[04:05.52]还要多远才能进入你的心
[04:11.17]
[04:12.23]还要多久才能和你接近
[04:18.33]
[04:19.35]咫尺远近却无法靠近的那个人
[04:26.99]要怎么探寻
[04:30.62]要多么幸运
[04:33.84]才敢让你发觉你并不孤寂
[04:40.08]
[04:40.81]当我还可以再跟你飞行
[04:46.88]
[04:47.99]环游是无趣
[04:50.87]
[04:51.64]至少可以
[04:54.94]
[04:55.54]陪着你
2.1对歌词进行解析
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
/*
* 使用try-with-resources语句,创建一个BufferedReader对象并初始化它
*BufferedReader将使用FileReader来读取指定文件的内容*/
String[] arrStr = new String[100];
int cnt = 0;//用于记录行数
String line;
while ((line = reader.readLine()) != null) {
arrStr[cnt] =