Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/06108.jsonl.gz/22

效果如图
访问 http://tools.hbte.ch/music/ 即可体验。
开发经过
第一次有这个想法的时候，觉得实现这个应该很简单，想了一个（伪）流程图：
开始 -> 获取外文、翻译歌词 -> 分别正则匹配外文翻译、歌词的时间标签，歌词内容 -> 循环判断时间标签是否相等，如果相等把两者连接 -> 输出
如果外文和翻译歌词是一一对应的，即每一行外文歌词都有对应的翻译，那么按这个流程下来，理论上是能得到合并歌词的。事实也证明这个方案确实可行，但在处理网易云音乐的一些歌词的时候出了岔子，因为有些歌词的外文和翻译并非一一对应。
下面给出一些这类歌词的例子。
Faded
如图所示，在外文歌词中，开头的两行作曲、作词的内容在这里以两行歌词的形式来显示了。这无可厚非，的确也是常规操作，但这两行内容占用了外文歌词中的两个时间标签，在翻译中却没有这两个时间标签，这便会导致程序出错。也就是说，当外文与翻译歌词行数的不一致时，就无法正常合并。
与之类似的还有：
Way Back Into Love
这首歌的英文歌词中出现了空行，翻译却没有也用空行来占行。
对于以上这种情况，我想到的解决方法是，针对外文和翻译歌词使用两个不同的循环变量，将外文与翻译分成两部分进行循环判断。当有一部分与另一部分时间标签对应不上时，该部分的循环变量会 +1 ，再继续判断。
Soldier
中文翻译有一个“哇哦”，英文歌词中却没有。歌曲中确实唱有这一句，但英文歌词中却没有写出来，这就导致出错了。
Meet
这个和上面所说的错误类型不太一样，就是时间标签混乱，连网易云音乐客户端都出现错误（如下图），暂时无解。
只能说网易太不上心了……
That Girl
当我看到这个时间标签，只想把网易云的人打一顿，英文和中文翻译的歌词时间标签完全不一致！已经乱套了……
遇到这种情况，只能忽略掉时间标签，将行数相同的合并。
上面提到的的这些问题不仅仅是个例，这样例子还有很多，就不一一列举了。
总而言之，为了这些
辣鸡歌词，本来好好的20+的代码就可以实现的功能，硬是写成了130+行，但目前仍有少数歌曲的歌词做不到自动合并。目前想到了个万能的合并算法，但还没写成代码。
与网易云相比，TX音乐的歌词就显得友好了许多。例如上面说到的当在外文歌词中含有作词、作曲等内容时，在网易云中会导致外文与翻译歌词行数的不一致，但在TX音乐中，它使用了两条斜杠占位：
所以在对网易云音乐的各种奇葩歌词做了兼容后，在合并TX音乐的提供的歌词时，基本就没遇到什么问题了。
下一步的工作
目前这个歌词合并应用在了我搭建的在线播放器下，下一步打算应用到更多的地方，例如：
- 外文、翻译及合并后的 .lrc 歌词（批量）下载
- 做一个“歌词自动排版工具 (LyricPress) ”（名称暂定）
参考资料
其他
今晚就要开学了，从此开启真·高三生活。 估计整个高三也不会有多少时间打理博客，写写代码了。