我有一些由 Sibelius (v.4?..) 制作的 MIDI 文件,其中包含“不寻常”的乐器;我听不见旋律。我决定我需要将乐器“重置”为 0(我相信原声三角钢琴)。
因此,我使用python-midi和mingus编写了一个 Python 程序;这些程序可以改变 MIDI 乐器,但它们都极大地改变了节奏。
Rosegarden很好地完成了这项工作,但我不能批量使用它。
接下来,在阅读了一些 MIDI 格式信息(例如here和here)之后,我编写了一个简单的 Python 脚本(见下文),它只是将一些字符串替换为另一个字符串 --- 将 0xC0[byte] 替换为 0xC000 等等。
现在那些 MIDI 文件听起来不错,我可以听到所有的声音。
所以,我的问题是——这样做是否“安全”(在任何意义上)?我怎样才能更好地更换乐器?如何更好地“检测” MIDI 文件中的 0xCx 命令?
谢谢!
#!/usr/bin/env python
#
import sys
import re
patt = re.compile('(\xC0|\xC1|\xC2|\xC3|\xC4|\xC5|\xC6|\xC7).')
try:
filein = sys.argv[1]
except IndexError:
print "Specify input file as an argument."
sys.exit(1)
try:
fileout = sys.argv[2]
except IndexError:
fileout = '%s-out2.mid' % filein.replace('.mid', '')
filein_data = open(filein, 'rb').read()
open(fileout, 'wb').write(patt.sub('\1\x00',filein_data))