Midi时间戳以秒为单位

时间:2011-08-15 09:29:15

标签: java midi

第二个时间戳的公式是什么? tick实际上是一个时间戳

来自Midi DumpSequence:

tick 0: Set Tempo: 88.0 bpm
tick 0: Time Signature: 4/4,

MIDI clocks per metronome tick: 24,
1/32 per 24 MIDI clocks: 8

tick 0: Sequence/Track Name:         
tick 0: Sysex message: F0 7E 7F 09 01 F7
tick 480: Sysex message: F0 43 10 4C 00 00 7E 00 F7
tick 600: Sysex message: F0 43 10 4C 02 01 40 03 00 F7
tick 602: Sysex message: F0 43 10 4C 02 01 5A 01 F7
tick 604: ch01
tick 606: ch01
tick 608: ch01
tick 613: ch01
tick 615: ch01
tick 617: ch01
tick 619: ch01
tick 621: ch01
tick 623: ch01
tick 625: ch02
tick 627: ch02
tick 629: ch02
tick 634: ch02
tick 636: ch02
tick 638: ch02
tick 640: ch02
tick 642: ch02
tick 644: ch02
tick 1920: Time Signature: 4/4, MIDI clocks per metronome tick: 24, 1/32 per 24 MIDI clocks: 8
tick 1920: ch01+B2
tick 2784: ch01-B2
tick 2880: ch01+G2
tick 3744: ch01-G2
tick 3840: ch01+A2
tick 4704: ch01-A2
tick 4800: ch01+D2

3 个答案:

答案 0 :(得分:1)

每分钟有88个节拍,每个节拍有24个MIDI时钟节拍。

那是88 * 24/60 =每秒35.2 MIDI时钟。

因此,以秒为单位的时间戳只是MIDI时钟刻度除以35.2。

答案 1 :(得分:1)

要计算MIDI事件的指标时间,您需要知道两个值:

  • 每个音符的节拍数(节拍)
  • 每小时
  • 微秒

第一个值包含在MIDI文件的标题块(MThd)的时分参数中。您的转储不包含此信息。

可以从设置速度事件中检索第二个值。你的转储从这个事件开始,但是我应该注意到,节奏以每个节拍的微秒而不是每分钟节拍(BPM)的形式呈现在MIDI文件中。在某些情况下,BPM可能不准确,因为它计算为60,000,000 / microseconds_per_beat。

使用这两个值,我们可以计算一个刻度的持续时间:

tick_duration = microseconds_per_beat / ticks_per_beat

或者你的节奏是BPM

tick_duration = 60,000,000 / (beats_per_minute * ticks_per_beat)

因此,对于任何时间戳,其度量表示可以通过以下公式计算:

microseconds = ticks * tick_duration

答案 2 :(得分:0)

我发现这是正确的公式。另一篇文章显示错误的方法。

BPM x PPQ =#(ticks / min)
(ticks / min)* 1/60000 =#ticks / millisecond

timestamp / 0.704 = #ms

来自:http://harmoniccycle.com/harmonicweb/music-25-MIDI-BPM-PPQ.htm