我已经研究了这个主题一段时间了,但仍然没有弄清楚.
我使用midas3库(Midi-actionscript3)将midi导入flash.我在时间轴上得到每个音符项目.我得到除法值(192),所有“GET-TEMPO”元素都等于81.
我使用midas3库(Midi-actionscript3)将midi导入flash.我在时间轴上得到每个音符项目.我得到除法值(192),所有“GET-TEMPO”元素都等于81.
我尝试了很多组合来获得midi的实际时间但仍然没有好处(例如时间线* 192/60).
我知道它与实际时间不同步的原因是当我将音符可视化为闪存中的简单矩形时 – 我检查它们是否与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
请记住,此处以秒为单位的值是自上一个MIDI事件以来的秒数,而不是序列开始时的秒数.您需要保持此值的运行总计以构建连贯的序列.