将使用SMPTE的MIDI文件修改为TPQN

经过我的研究,我好像发现了将使用SMPTE时间码的MIDI文件修改为TPQN时间码的方法。不保证准确性,仅供参考。

  1. 读取文件头内的resolution(大端),将其转换为二进制。
    高8位就是帧的补码,低8位就是子帧。
  2. 检查帧是否是下列值之一:-24、-25、-29、-30,如果不是,则代表resolution无效。
  3. 删除所有的set tempo事件,因为在SMPTE时间码下不生效。
  4. 对于-29,将resolution改为2997与子帧相乘的值,并添加设置MPQN为100,000,000的set tempo事件。注意可能会超过short的最大值32767。
  5. 对于其他值,将resolution改为帧的负数与子帧相乘的值,并添加设置MPQN为1,000,000的set tempo事件。

使用世界树和旧版Windows Media Player验证。如有任何问题,可在下方留言。

3 Likes