flash - 如何将midi时间线转换为应该播放的实际时间线

标签 flash actionscript-3 midi timeline timecodes

我已经研究了一段时间了,但仍然没有弄清楚。
我使用 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/

相关文章:

php - 使用逗号将用户名插入数据库

flash - 将对象置于前面,在 Flash AS3 中

java - 使用Java发送sysex消息

java - 如何检查发射器是否处于 Activity 状态?

ios - AIR 上应用程序描述 rune 件的 UISupportedInterfaceOrientations

actionscript - 如何创建没有可见场景的Flash组件?

2020 年后的 Flash Player 投影仪

xml - 如何读取FLASH CS4/AS3中的MusicXML文件以直观显示数据

flash - 一位数前导零 (Flash)

audio - 如何将使用 DirectMusic 在内部播放 MIDI 的旧游戏转换为将原始 MIDI 输出到默认设备?