场景
这个博客的搭建主要是从洪卫の博客这个大哥那里直接克隆来的,最开始接触也是朋友推荐了解了这个大佬,也从而了解到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
文件。