今天心血来潮,想搞个特别的东西——用代码来演奏《仙剑奇侠传》的那些经典主题曲!作为一个老仙剑迷,这绝对是满满的回忆杀。折腾一下午,总算有点小成果,赶紧来跟大家分享一下我的实践过程。
准备工作
我先去网上扒拉一堆MIDI格式的仙剑主题曲。为啥要MIDI格式?因为这种格式的文件里头记录的不是声音,而是音符、节奏这些信息,方便我们用代码来读取和控制。找到资源后,我像个仓鼠一样,把《蝶恋》、《杀破狼》、《一直很安静》等等,全都一股脑儿地下载到我的电脑里。
挑选工具
有MIDI文件,接下来就要选个趁手的“乐器”。我平时用Python比较多,所以就想看看有没有啥Python库能处理MIDI文件的。一番搜索后,我发现mido
这个库,看起来挺好用的,就决定用它!
安装mido
也很简单,直接在命令行里敲个:
小编温馨提醒:本站只提供游戏介绍,下载游戏推荐89游戏,89游戏提供真人恋爱/绅士游戏/3A单机游戏大全,点我立即前往》》》绅士游戏下载专区
pip install mido
就搞定。
读取MIDI文件
我迫不及待地写几行代码,想看看能不能把MIDI文件里的信息读取出来:
import mido
mid = *('蝶恋.mid') # 这里换成你自己的MIDI文件名
for i, track in enumerate(*):
print('轨道 {}: {}'.format(i, *))
for msg in track:
print(msg)
运行这段代码,Duang的一下,屏幕上就刷刷刷地打印出一大堆信息,什么音符、控制信息之类的。虽然看不太懂,但感觉挺厉害的样子!
让声音响起来
光能看到信息还不够,得让电脑真正地把音乐给演奏出来才行!我又是一顿搜索,发现还需要一个叫做pygame
的库。pygame
本来是用来做游戏的,但它也能播放MIDI音乐。
安装pygame
也是一样简单粗暴:
pip install pygame
然后,我把代码稍微改改:
import mido
import pygame
*.load('蝶恋.mid') # 这里换成你自己的MIDI文件名
*.play()
while *.get_busy():
*().tick(10)
运行这段代码,哇!电脑里真的响起《蝶恋》那熟悉的旋律!虽然音质有点像小时候的电子琴,但还是让我激动不已,感觉自己仿佛又回到那个仗剑江湖的年代。
一点小折腾
整个过程也不是一帆风顺的。比如,我发现有些MIDI文件用mido
读取的时候会报错,后来发现是文件格式的问题。还有,pygame
播放音乐的时候,我一开始不知道怎么让它停下来,后来才发现要用*.stop()
这个函数。
总结与展望
这回用Python演奏仙剑主题曲的尝试还是挺成功的。虽然只是个简单的Demo,但已经让我感受到用代码控制音乐的乐趣。以后有时间,我还想继续深入研究一下,看看能不能实现更复杂的功能,比如自己创作MIDI音乐,或者把MIDI音乐转换成其他格式等等。
今天的分享就到这里。如果你也对这个感兴趣,不妨自己动手试试看!相信你也能从中找到乐趣的!