今天跟大家聊聊我搞的这个“百万大歌星苏打绿”项目,一开始就是头脑发热,觉得好玩,想看看能不能把苏打绿的歌词和旋律给扒下来,然后搞点新花样。
起步:从哪里下手?
- 我得找到苏打绿的歌词和音频资源。这年头,网上一搜一大把,但是质量参差不齐。我花了老大力气,把各种网站、App翻了个底朝天,总算找到了一些比较靠谱的资源。
- 有了资源,下一步就是把歌词扒下来。这个简单,复制粘贴就行。但是!歌词的格式乱七八糟,还得手动整理,真是个体力活。
- 音频就比较麻烦了。我尝试用Python写了个爬虫,想把网上的音频直接扒下来,结果发现各种反爬机制,搞得我头都大了。后来还是老老实实地用录音软件,一首一首地录,累死个人。
核心:怎么把歌词和旋律对应起来?
这才是整个项目的难点。我想了好几个方案:
- 方案一:人工标注。 听一句歌,标一句歌词,然后手动对齐。这个方案最靠谱,但是太费时间了,估计得搞到猴年马月。
- 方案二:语音识别。 用语音识别技术把音频转换成文字,然后和歌词进行匹配。这个方案听起来很高端,但是实际操作起来,语音识别的准确率太低了,匹配效果惨不忍睹。
- 方案三:频谱分析。 分析音频的频谱,找到每个音节的起始位置,然后和歌词进行对齐。这个方案我研究了好久,但是没搞明白频谱到底是个什么玩意儿,直接放弃。
最终方案:半人工半自动
思来想去,我决定采用一个折中的方案:半人工半自动。
- 第一步:先用Python把歌词按照句子分割开来。
- 第二步:然后用音频处理软件,把音频也按照句子分割开来。
- 第三步:手动听一句歌,把对应的歌词文件和音频文件放在同一个文件夹里,并且按照顺序命名。
- 第四步:写一个Python脚本,把歌词文件和音频文件读取出来,然后用HTML生成一个网页,网页上可以播放音频,并且显示对应的歌词。
实现:代码堆砌
有了思路,就开始撸代码。我用Python写了几个脚本,主要的功能包括:
- 歌词分割:把完整的歌词文件按照句子分割成多个小文件。
- 音频分割:用pydub库把音频文件按照句子分割成多个小文件。
- 网页生成:用HTML和JavaScript生成一个网页,网页上可以播放音频,并且显示对应的歌词。
代码写得比较糙,各种if else满天飞,但是能用就行,毕竟咱也不是专业的程序员。
结果:勉强能用
最终,我把苏打绿的几首热门歌曲都做成了这种“百万大歌星”版本。虽然效果不算完美,但是勉强能用。你可以边听歌,边看歌词,还能跟着哼唱,感觉还不错。
瞎折腾也是一种乐趣
搞这个项目,我学到了不少东西。虽然过程很艰辛,但是也很有趣。最重要的,是让我体会到了瞎折腾的乐趣。以后有机会,我还会继续搞一些类似的小项目,说不定能搞出什么更有意思的东西来!