我已经研究这个主题有一段时间了,但仍然没有弄清楚。
我使用 midas3 库 (Midi-actionscript3) 将 midi 导入到 flash。我在时间线上得到了每个笔记项目。我得到分度值 (192),所有“GET-TEMPO”元素都等于 81。
我尝试了很多组合来获取 MIDI 的实际时间,但仍然不好(例如时间轴*192/60)。
我知道它与实际时间不同步的原因是,当我将音符可视化为 Flash 中的简单矩形时 - 我检查它们是否完全符合 mp3 文件播放的内容(我已使用简单转换将 midi 文件转换为此 mp3程序)
我已经阅读了很多关于如何计算所有内容的内容,但仍然没有弄清楚我需要使用多少数字才能正确计算(时间轴 * MysteriusConstant = ReaTIME,MysteriusConstant 的值是多少?它真的是常数吗?如果不是,如何计算我计算它是如何改变的吗?)
谢谢
阿隆
如果我正确理解您的问题,您基本上希望将每个 MIDI 音符的刻度转换为毫秒值,以便您可以沿着时间线直观地显示音符。
因此,首先,您需要使用分度和节奏来确定单个刻度的值。该转换基本上如下所示:
[ 1 min 60 sec 1 beat Z clocks ]
| ------- * ------ * -------- * -------- | = seconds
[ X beats 1 min Y clocks 1 ]
所以,在上面的转换中,X
是节奏,Y
是除法,并且Z
是来自传入事件的时钟数。您可以看到所有单位如何相互抵消,从而以秒为单位给出一个值。因此,该转换的精简版本是:
(60 * clocks) / (tempo * division) = seconds
请记住,此处给出的值seconds
是自以下时间以来的秒数previousMIDI 事件,不从序列开始。您将需要保留该值的运行总计以构建连贯的序列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)