
作者:
Eason20000 
创建时间: 2024/10/17 17:30

标题:
一些关于MIDI方面的Q&A VOL.2(原问题为
“MidiShow”网站问答区6609帖)Q:有什么办法能把bpm提到百万以上吗
A:我的方法是直接使用十六进制编辑器打开SMF并编辑。
使用此方法的前提有:
1. SMF中已经包含控制BPM值的元事件,否则需要手动添加,较为麻烦,因为在添加事件后需更改对应的轨道的数据长度信息。
2. 所使用的十六进制编辑器具有查看并替换特定字节的功能(即最基础的显示及编辑功能)。
具体步骤为:
1. 使用十六进制编辑器打开SMF,并找到值为【 0xFF 0x51 0x03 】的三个字节。这三个字节代表的是用于更改BPM值的元事件。
2. 在这三个字节后的三个字节代表的就是一拍的时间长度,将三个字节以顺序组合得到的就是具体数字,单位为微秒。如【 0x07 0xA1 0x20 】代表“0x7a120”,即为十进制下的“500000”,所以此处一拍的时间长度为500000微秒,又因为一分钟有60秒,即60000000微秒,此处一分钟的拍数(BPM)的值即为60000000 μs/500000 μs=120(所以SMF中最大BPM值为60000000 μs/1 μs即60000000BPM,此时一拍的时间长度为1微秒)。反向进行上面的步骤可以得到:(一拍的时间长度)=60000000 μs/(BPM)。如若需要1000000BPM,则一拍的时间长度即为60微秒,转换为十六进制即为“0x3c”,填入SMF时需要扩展为【 0x00 0x00 0x3C 】。其他BPM值同理。
3. SMF更改完成后保存并退出即可。
这样的方法即可实现突破SMF限制,但需要文件格式为SMF,在Domino中使用时只能导出后再导入。解决这个问题的方法很简单:新建一个Domino窗口并创建项目,确保其TPQN/PPQ与原Domino项目相同且其中包含控制BPM值的元事件,然后将这个项目导出为SMF,按照上述方法编辑后重新使用Domino打开,此时将Tempo事件复制到原有的Domino项目中即可。

共享 (0)
王傑1020 2024/10/17 20:25原谅我这一生不羁放纵爱自由,也会怕有一天会跌倒! Oh,no~ ~
这是甚么
xiaopi0213 2024/10/17 18:14没在B站关注小皮同学0213的都是坏坏!
。・゜・(ノД`)・゜・。
用不着,所以看不懂