You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript中结合timeDivision将MIDI deltaTime转为毫秒时间戳

MIDI DeltaTime 转毫秒时间戳计算方法

核心逻辑前提

你的MIDI文件timeDivision值为192,代表每1个四分音符对应192个tick,这是MIDI标准里基于音符的时间划分规则。deltaTime存储的是前后两个MIDI事件之间的tick差值,要转成毫秒,必须结合MIDI文件的BPM(每分钟节拍数)——这是MIDI元事件里的速度信息,你需要从解析后的JSON中提取这个值。

具体计算公式

  1. 计算单个tick的毫秒时长
单tick毫秒数 = (60000 / BPM) / 192
  • 60000是每分钟的毫秒总数,除以BPM得到1个四分音符的毫秒时长;再除以192(每四分音符的tick数),就得到单个tick对应的时间。
  1. 将deltaTime转换为毫秒差值
deltaTime毫秒值 = deltaTime × 单tick毫秒数

示例计算(假设BPM=120)

  • 单tick毫秒数 = (60000 / 120) / 192 = 500 / 192 ≈ 2.604ms
  • 若某事件的deltaTime=192,对应的毫秒值为 192 × 2.604 ≈ 500ms(正好是1个四分音符的时长)

构建累计时间戳对象

  1. 初始化一个累计时间变量,比如current_ms = 0
  2. 遍历解析后的事件列表:
    • 当前事件的毫秒时间戳 = current_ms + 当前deltaTime转换后的毫秒值
    • 更新current_ms为这个时间戳,用于计算下一个事件的时间
  3. 最终每个事件都会对应一个基于起始点的毫秒时间戳

内容的提问来源于stack exchange,提问作者Adebowale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 16:33:27