我已经研究了一段时间了,但仍然没有弄清楚。
我使用 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
是自上一个 MIDI 事件以来的秒数,而不是从序列开始的秒数。您将需要保持此值的运行总计以构建一个连贯的序列。
关于flash - 如何将midi时间线转换为应该播放的实际时间线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5288593/