音乐文件添加封面与歌词

背景

  音乐文件可以携带music tag信息,其中包含曲目的标题、演唱者、专辑名和发行日期等信息,此外,还可嵌入专辑的封面以及曲目的歌词,在使用如AIMP的离线音乐播放器的时候,这种嵌入音频文件的信息能够直接被识别,提升音乐播放体验。

解决方案

  基本思路:通过读取音频文件的metainfo,之后调用接口获取对应专辑的封面,再获取对应的lyric歌词文件,也保存在本地。获取完所需的信息之后,更新metainfo,并写入文件,结束。
具体流程如下:

  1. 遍历音乐目录的每个文件,读取以ape, flac, wav, mp3结尾的文件,并使用参考链接[1]获取以下信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    tracktitle          # 音乐标题
    artist # 演唱者
    album # 专辑名
    albumartist # 专辑艺术家
    composer # 作曲家
    tracknumber # 曲目编号
    totaltracks # 专辑总曲目数
    discnumber # 碟号
    totaldiscs # 总碟数
    genre # 流派
    year # 年份
    comment # 注释
    lyrics # 歌词
    isrc # 国际编码
    compilation # 合辑
    artwork # 专辑封面
  2. 使用参考链接[2]进行简繁体转换(可选步骤),将artist, tracktitle和album统一转换成简体或繁体;

  3. 移除comment和genre;

  4. 定义专辑封面保存路径,为该音频文件所在目录+专辑名,文件后缀根据具体封面的格式而定;

  5. 判断专辑封面是否存在,即判断该音频所在目录中,是否存在专辑封面保存路径+webp, jpg, png, jpeg的文件,如果有则打开并读取;否则调用参考链接[3]提供的接口获取专辑封面,获取的专辑封面有很多,通常直接取第一个匹配结果,解析获取到的专辑封面信息,如果与曲目对应的专辑不匹配,则打印告警信息,之后获取封面的url,请求该url获取封面并保存到本地;

  6. 获取歌词,先判断音频文件所在目录是否存在对应的lrc文件,如果有则直接打开;否则再判断是否在失败列表里,如果在则跳过;否则获取歌词文件;

  7. 调用参考链接[4]提供的接口获取歌词,使用网易的接口,通过title, artist和album组合,搜索出最符合的结果,具体为:

    1) 将title, artist和album全部转成简体,英文全部转小写;

    2) 定义待搜索列表[“title artist album”, “title album”, “title artist”, “title”];

    3)每次搜索获取20个结果,遍历每个结果,获取其中的”音乐标题 演唱者 专辑名”,并转换成简体和小写,与待搜索列表的第0个对比;

    4)对比的得分为[0, 100],当得分为100时,则是最佳匹配,直接下载;如果搜索列表的每个条目都已搜索完毕仍然没有找到得分为100的曲目,则需要根据得分进行判断,如果最佳得分小于60,认为不存在,直接返回失败;如果最佳得分小于等于93,则需要人工确认;

  8. 如果没有获取到歌词,则将曲目地址保存到失败列表;否则,将获取到的歌词保存到metainfo,同时保存一份到本地;

  9. 歌词简繁转换(可选步骤),将歌词转换成简体或繁体,写入metainfo中;

  10. 随机sleep1-5秒,防止过度爬取导致歌词接口无法正确返回歌词信息

注意事项

TODO

参考链接