File size: 656 Bytes
f23825d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
export interface Measure {
  startTick: number
  measure: number
  numerator: number
  denominator: number
}

export const calculateMBT = (
  measure: Measure,
  tick: number,
  ticksPerBeatBase: number,
) => {
  const ticksPerBeat = (ticksPerBeatBase * 4) / measure.denominator
  const ticksPerMeasure = ticksPerBeat * measure.numerator

  let aTick = tick - measure.startTick

  const deltaMeasure = Math.floor(aTick / ticksPerMeasure)
  aTick -= deltaMeasure * ticksPerMeasure

  const beat = Math.floor(aTick / ticksPerBeat)
  aTick -= beat * ticksPerBeat

  return {
    measure: measure.measure + deltaMeasure,
    beat: beat,
    tick: aTick,
  }
}