最近做的项目中需要解析和编辑mid格式的文件,学习了一下midi格式。
总结来说midi格式是一种为了统一电子音乐之间的联系而进行规范的一种记录格式。
mid文件并不录制声音的具体波形或者内容,它只是记录某些具体声音出现的时间顺序力度等信息。
然后根据解析出来的文件进行相应的演奏。因此不同的解析工具解析同一文件演奏出的声音可能会不一样。
但也正因只是记录基本信息,mid格式的文件相当小巧,通常不会唱过几十k(一首3分钟左右的曲目)。
结合参考文档和一个解析出来的mid文件来具体分析这种文件格式:
分析文件:Auld Lang Syne.mid
4d 54 68 64 :ASCII字符“MThd”,用来鉴别是否Midi文件
00 00 00 06 :文件头描述部分的字节数,它总是6,所以一定是“00 00 00 06”
00 01 :midi文件格式,多音轨,且同步。
00 01 :音轨数目为1
01 e0 :指定基本时间,480
4d 54 72 6b :ASCII字符“MTrk”
00 00 03 3b :该轨道的字节数03 3b =827
00 ff 58 04 04 02 18 08 :时间差为0,ff 58设置节拍 ,04 字节数为04, 04 02设置节拍分子为4,分母为2的2次方,即4/4拍,18 08通常忽略字节
00 ff 59 02 00 00 :时间差0,ff 59设置调号,02 字节数为2,00 00为C大调
00 ff 51 03 0a 67 59 :时间差0,ff 51 设置速度,03 字节数为3,0a 67 59 一个四分音符的微秒数为 681817即0.681817秒
00 c0 00 02:时间差0,c0 00改变第一音轨乐器为大钢琴
02 b0 07 64: 时间差2,设置第一通道主音量值为64,
02 0a 40:时间差2,设置第一通道声相调整值为64,
02 5b 1e:时间差2,混音效果深度为30
02 5d 1e:时间差2,合唱效果深度为30
8b 18 90 51 50 :时间差 1432,按下81号键,力度80
83 30 51 00 :时间差 83 30,松开81号键,力度00
30 4f 50 :时间差30,按下79号键,力度80
85 4f 4f 00: 时间差85 4f,松开79号键,力度00
01 4c 50 : 时间差01,按下76号键,力度80
81 58 4c 00 :时间差81 58,松开76号键,力度00
剩余信息以此类推。
附:国际声学音高记法《科学音调记号法》
参考文档:
MIDI音乐格式分析--理论篇:http://www.midifan.com/modulearticle-detailview-901.htm
MIDI音乐格式分析--实践篇:http://www.midifan.com/modulearticle-detailview-902.htm
MIDI音乐格式分析--附件篇:http://www.midifan.com/modulearticle-detailview-903.htm
midi乐器列表https://wenku.baidu.com/view/61b67337cd7931b765ce0508763231126edb77a4.html
控制器编号:https://wenku.baidu.com/view/0c700a81f524ccbff121848a.html