场景
这个博客的搭建主要是从洪卫の博客这个大哥那里直接克隆来的,最开始接触也是朋友推荐了解了这个大佬,也从而了解到Hexo这个博客搭建程序,铺垫结束了。
此前对这个主题上的这个音乐播放器很感兴趣,包括复写这个博客的时候也是运用了Aplayer这个插件,并且实现了完整功能。这次重新搭建这个博客的时候,发现音乐播放没有歌词了,确实是因为json文件里没有歌词,固然也是不显示,好,现在就加上歌词。
分析及实现
存放音乐信息最基本的文件结构如下:
/source_data/musics.json
[
{
"name": "三十二段留言",
"artist": "Vicky宣宣",
"url": "http://music.163.com/song/media/outer/url?id=1817160410.mp3",
"cover": "https://p2.music.126.net/VJvURwhahDjZNI5ppEll6Q==/109951165687836464.jpg?param=130y130"
},
{
"name": "请你吃个冰激凌",
"artist": "花粥",
"url": "http://music.163.com/song/media/outer/url?id=1357999885.mp3",
"cover": "https://p1.music.126.net/H6dt7IgvXNWhRM_w7XbcqQ==/109951163990575387.jpg?param=130y130"
},
{
"name": "世间美好与你环环相扣",
"artist": "柏松",
"url": "http://music.163.com/song/media/outer/url?id=1363948882.mp3",
"cover": "https://p1.music.126.net/DK1_4sP_339o5rowMdPXdw==/109951164071024476.jpg?param=130y130"
},
{
"name": "海盗船长2.0",
"artist": "花粥 / 风子",
"url": "http://music.163.com/song/media/outer/url?id=571601379.mp3",
"cover": "https://p1.music.126.net/OqfOJEOTevVEafeMRfpq5g==/109951163336170259.jpg?param=130y130"
}
]
Aplayer官网文档指出了三种将 LRC 传递给 APlayer的方式,总结一下大概就是要[00:00.00]APlayer\n[00:04.01]is\n[00:08.02]amazing这个格式内容,因此我们搞出这种格式,写入json文件中,那就直接收工了。
从网易云的请求中,我们可以直接拿到相对应的歌词文件,创建相对应的.txt文件,丢到我们的文件夹中就可以了。
从请求中拿到的歌词,如下:
[00:00.00] 作词 : 风子
[00:01.00] 作曲 : 风子
[00:17.05]青岛又吹起了风
[00:20.25]我一个人在海边的夜里发抖
[00:24.92]忽然又想起我那荒唐又无聊的人生
[00:31.92]我努力偏离了航道
[00:35.51]终于捕捉到你的信号
[00:39.06]我曾经伤害也曾经被伤害
[00:42.51]现在只想停泊靠岸
[00:49.45]于是我丢掉了船
[00:51.80]烧掉了帆
[00:54.15]砍断了我的桅杆
[00:57.97]回到那片熟悉的海滩
[01:01.17]却找不到属于我的港湾
[01:04.73]我穿过峡谷
[01:06.77]又翻过雪山
[01:09.15]路过无人的戈壁滩
[01:12.84]看遍人间的欢乐和悲惨
[01:16.12]却找不到我的答案
......
以下是通过Python实现.txt生成.lrc文件的具体操作:
import os
import re
def modify_files(folder_path):
oldFiles = []
newFiles = []
# 遍历文件夹下的所有文件
for file_name in os.listdir(folder_path):
if file_name.endswith('.txt'):
# 构建原始文件和新文件的路径
original_file_path = os.path.join(folder_path, file_name)
new_file = f"{os.path.splitext(file_name)[0]}.lrc"
new_file_path = os.path.join(folder_path, new_file)
# 检查是否存在相同命名的.lrc文件
if os.path.exists(new_file_path):
oldFiles.append(new_file)
continue
# 打开原始文件和新文件,指定编码方式为UTF-8,忽略无法解码的字符
with open(original_file_path, 'r', encoding='utf-8', errors='ignore') as f1, open(new_file_path, 'w', encoding='utf-8') as f2:
# 读取原始文件内容
content = f1.read()
# 使用正则表达式替换换行符为"\n"
new_content = re.sub(r'\n', r'\\n', content)
# 将修改后的内容写入新文件
f2.write(new_content)
newFiles.append(new_file)
print("已有的.lrc文件:", oldFiles)
print("新生成的.lrc文件:", newFiles)
# 调用方法,传入文件夹路径
folder_path = r'C:\Users\30735\Desktop\music'
modify_files(folder_path)
首先,定义了两个列表 oldFiles 和 newFiles,用于存储已有的 lrc 文件和新生成的 lrc 文件。
然后,使用 os.listdir() 函数遍历文件夹下的所有文件,并使用 os.path.join() 函数构建原始文件和新文件的路径。
如果原始文件的后缀名为 .txt,则检查是否存在相同命名的 .lrc 文件。如果存在,则将该文件添加到 oldFiles 列表中,并跳过该文件。
如果不存在相同命名的 .lrc 文件,则使用 open() 函数打开原始文件和新文件,并使用 re.sub() 函数替换换行符为 “\n”。
最后,使用 write() 函数将修改后的内容写入新文件,并将新文件添加到 newFiles 列表中。
此时,我们就在目标文件夹得到了对应的.lrc文件。