File size: 2,212 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import { Measure } from "../measure/Measure"
import { createBeatsInRange } from "./mapBeats"

describe("createBeatsInRange", () => {
  const timebase = 480

  it("should create beats", () => {
    const measures: Measure[] = [
      { startTick: 0, measure: 0, numerator: 4, denominator: 4 },
      { startTick: timebase * 4, measure: 1, numerator: 6, denominator: 8 },
      { startTick: timebase * 7, measure: 2, numerator: 3, denominator: 4 },
    ]

    const beats = createBeatsInRange(measures, timebase, 0, timebase * 15)

    expect(beats).toStrictEqual([
      // first measure (4/4)
      { measure: 0, beat: 0, tick: 0 },
      { measure: 0, beat: 1, tick: timebase },
      { measure: 0, beat: 2, tick: timebase * 2 },
      { measure: 0, beat: 3, tick: timebase * 3 },

      // second measure (6/8)
      { measure: 1, beat: 0, tick: timebase * 4 },
      { measure: 1, beat: 1, tick: timebase * 4.5 },
      { measure: 1, beat: 2, tick: timebase * 5 },
      { measure: 1, beat: 3, tick: timebase * 5.5 },
      { measure: 1, beat: 4, tick: timebase * 6 },
      { measure: 1, beat: 5, tick: timebase * 6.5 },

      // third measure (3/4)
      { measure: 2, beat: 0, tick: timebase * 7 },
      { measure: 2, beat: 1, tick: timebase * 8 },
      { measure: 2, beat: 2, tick: timebase * 9 },

      // fourth measure (3/4)
      { measure: 3, beat: 0, tick: timebase * 10 },
      { measure: 3, beat: 1, tick: timebase * 11 },
      { measure: 3, beat: 2, tick: timebase * 12 },

      // fifth measure (3/4)
      { measure: 4, beat: 0, tick: timebase * 13 },
      { measure: 4, beat: 1, tick: timebase * 14 },
    ])
  })

  it("should create default beats without the initial measure", () => {
    const measures: Measure[] = [
      {
        startTick: timebase * 4, // starts at out of the range
        measure: 0,
        numerator: 5,
        denominator: 8,
      },
    ]
    const beats = createBeatsInRange(measures, timebase, 0, timebase * 4)
    expect(beats).toStrictEqual([
      { measure: 0, beat: 0, tick: 0 },
      { measure: 0, beat: 1, tick: timebase },
      { measure: 0, beat: 2, tick: timebase * 2 },
      { measure: 0, beat: 3, tick: timebase * 3 },
    ])
  })
})