6

我已经研究了一段时间,但仍然没有弄清楚。我使用 midas3 库 (Midi-actionscript3) 将 midi 导入闪存。我在时间线上得到每个笔记项目。我得到了除数(192),所有的“GET-TEMPO”元素都等于 81。

我尝试了很多组合来获得 midi 的实际时间,但仍然不好(例如 timeline*192/60)。

我知道它与实际时间不同步的原因是,当我将音符可视化为 Flash 中的简单矩形时 - 我检查它们是否与 mp3 文件播放的内容完全一致(我已经使用简单的转换将 midi 文件转换为这个 mp3程序)

我已经阅读了很多关于如何计算所有内容的信息,但仍然没有弄清楚我需要使用的数字才能正确计算(时间轴 * MysteriusConstant = ReaTIME,MysteriusConstant 的值是多少?它真的是恒定的吗?如果不是如何我要计算它是如何变化的吗?)

谢谢阿隆

4

1 回答 1

8

如果我正确理解您的问题,您基本上希望将每个 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

请记住,此处给出的值是自上一个secondsMIDI 事件以来的秒数,而不是从序列开始的秒数。您需要保持该值的总和以构建一个连贯的序列。

于 2011-03-14T10:14:41.310 回答