这批 MIDI 面向三种目标:PC 蜂鸣器、OPL2 声卡,以及早期的通用 MIDI 音源。
它们的共同点是能力窄:复音数在一到九之间,没有力度曲线,音源严格照谱发声。现代软音源会掩盖的问题,在这些设备上全都听得见,因此只能在写谱阶段处理,回放阶段无法补救。
parlour arrangement 的旧义就是这个意思:把熟悉的曲子改编到家中那件乐器能演奏的程度。
复音数是实测出来的
复音数指同时发音的上限。每首曲子标注的是实测峰值,即一台设备播完整首曲子所需的同时发音数。
- 卡农 4 复音,2 分 09 秒,63 bpm。主题在通道 0 上是一条不断的线,单音蜂鸣器只取那一条就能完整演奏。
- 时暮的思眷(Le Souvenir avec le crépuscule)7 复音,是这批里最高的一首。复音数不到六的设备够不到它。
- 致爱丽丝 4 复音。整个回旋曲与两个插部都在。
- 嘎达梅林 6 复音。低音线降到了底八度。
- 绿袖子 5 复音,2 分 57 秒,是这批里最长的。
- 献给已逝公主的七重奏 6 复音。1815 个音,83 小节,27 个速度变化,是最忙的一份。
- 雪城之夜(莫斯科郊外的晚上)5 复音。它是这批里唯一的 2/4 拍曲子。
- Tico-Tico no Fubá 4 复音。190 bpm,是最快的一首。
- 成功音效 3 复音,0.5 秒,五个音。
谱面写成 Python 脚本
每首曲子是一个 Python 脚本,谱面作为字面数据写在源码里,不用 MIDI 库,也没有编辑器工程。运行脚本会在 output/ 下逐字节复现那个文件。
曲子用于循环播放,配在其他内容底下。音效不循环,半秒左右播完,单独收听,因此另放一个目录。
硬伤与软伤的分类
midi_check.py 把文件的问题分成两类。
- 硬伤:设备做不到。复音数超过预算、音符短于目标能发音的最短长度、同一通道撞上正在响的同音高,都算。文件在修正之前都是错的。
- 软伤:文件能播,但写法是否合适属于判断。长时间保持的撞音、低音区浑浊的间距、演奏者够不到的音域与重击、起音偏离网格的距离,都需要逐一复核。
midi_stats.py 只计数与测量,不做判断。
复音预算和最短音符长度都可以从命令行给定,便于按目标设备复核。
编曲与两个检查脚本在 https://github.com/lunzima/parlour-midi。
评论
点击下面的按钮加载评论框。评论提交后需经确认,不会立即显示。
已提交,确认后会显示。