Strudelify

I Got Rhythm

Mike Oldfield

KeyA majorTempo64 bpm
0:00/0:00
// I Got Rhythm — Oldfield, Mike
// 64 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (2/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 72 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(64/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · epiano2 · "E.piano 2"
const epiano2 = note("<A@5 B@2 C@2 D@2 E@2 F@2 G H@2 I J K L M N O P ~@27 Q R@3 S T@4 U@8 V@2>".pickRestart({
  A: "[~@17 b4 a4 g#4 [e4,f#4]@2 e4 ~@2 b4 a4 g#4 [e4,f#4]@2 e4 ~@2 b4 a4 g#4 f#4 e4 f#4 g#4 e4!2 f#4 e4 f#4 ~ e4 ~@2 b4 a4 g#4 [e4,f#4]@2 c#5 b4 ~@2 a4 g#4 [e4,f#4]@2 e4 ~@2 b4 a4 g#4 ~ e4 f#4 g#4 [e3,e4]@8, ~@15 b4@2 ~ b3@3 ~ b3@2 c#3@7 b4@2 ~ a3@2 d4@2 a3@3 ~ b3@2 e4@2 b3@3 ~ b3@3 ~ b3@3 ~ b3@3 ~ b3@3 ~ a3@2 [d4,f#4]@2 a3@2 ~@8, ~@16 e3@7 b4@2 ~ b3@3 ~ b3@2 d3@7 ~ e3@7 ~ e3@8 c#3@8 d3@7 ~@9, ~@45 g#4@2 b4@2 ~@8 b4@2 ~@4 b4@2 ~@15]/5", // Esus2 E D
  B: "[~@2 [b3,b4]@2 ~@4 e4@2 [b3,e4,b4]@2 [e4,b4] ~@2 b4 a4@2 [a3,e4,a4]@2 e4 ~@2 [e4,a4]!2 ~ [b3,e4,g#4]@6, e3@11 ~@3 b3@2 ~@5 [e4,a4]@2 ~@9, e4@4 e4@4 c#3@8 d3@8 e3@7 ~, ~@5 b4@2 b4@3 ~@12 a3@2 ~@8, ~@6 b3@3 ~@4 [e4,b4]@2 e4@3 ~@2 d4@4 ~@8]/2", // B E5 A5 E A5 E5
  C: "[e4@2 [b3,e4,b4]@2 b4 ~@2 [e4,b4] e4@2 [b3,e4,b4]@2 b4 ~@2 b4 a4@2 [a3,e4,a4]@2 [e4,a4] ~@2 [e4,a4] e4@2 [b3,e4,g#4]@6, e3 c#3 d3 e3, g#4 ~@3 e4@2 b3@3 ~@3 e4@2 b3@3 ~@4 [e4,a4]@2 ~ a4 ~@7, ~@5 b4@2 ~ b4 ~@4 b4@2 e4@2 ~@3 d4@2 a3@2 ~@8]/2", // E5 A5 E A5
  D: "[~@2 [e4,e5]@2 e5 ~@2 a4 a4@2 [e4,a4,e5]@2 [a4,e5] ~@2 e5 d5@2 [d4,a4,d5]@2 [a4,d5] ~@2 [a4,d5]!2 ~ [e4,a4,c#5]@6, a3@8 f#3@8 g3@8 a3@7 ~, a4@4 a4@2 e4@3 ~@4 [a4,e5]@2 a4@2 ~@3 g4@5 ~@7, ~@5 e5@2 e5@3 ~@4 e4@3 ~@4 [a4,d5]@2 ~@9, ~@22 d4@3 ~@7]/2", // E A5 D5 A A5 D5
  E: "[~@2 [e4,e5]@2 ~ e5 ~ a4 ~ e5 [e4,e5]@2 ~@3 e5 ~@2 a4 ~ d5 [d4,d5]@2 [a4,d5] a4@2 [e4,a4,c#5]@6, a3@7 e5@2 ~@4 e5@2 a4@3 ~ g4@2 ~@11, a4@4 a4@2 e4@2 f#3@8 g3@7 ~ a3@8, ~@8 a4@2 a4 ~ a4@2 e4@2 ~@2 [d4,d5]@2 a4@3 ~ d5 ~@7]/2", // E D D5 A D
  F: "[e4@2 [b3,b4]@2 b4 ~@2 e4 e4@2 [b3,e4,b4]@2 [e4,b4] ~@2 b4 a4@2 [a3,e4,a4]@2 [e4,a4] e4 ~ [e4,a4] e4@2 [b3,e4,g#4]@6, e3 c#3 d3 e3, ~@4 e4@2 b3@3 ~@4 [e4,b4]@2 e4@2 ~@3 d4@2 a3@3 ~@7, ~@5 b4@2 b4@2 ~@5 b3@3 ~@4 a4@2 ~ a4 ~@7]/2", // B E5 A5 E E5
  G: "~@2 [b3,b4]@2 b4!2 ~@2 e4 ~ [b3,e4,b4]@2 [e4,b4] e4 ~ b4, e3@7 b4@3 ~@3 b4@2 ~, e4@2 e4 b3 c#3@4, ~@7 b3", // B E5
  H: "[e4@2 [a3,e4,a4]@2 [e4,a4] ~@2 [e4,a4]!2 ~@14 b4 ~ b4 a4 g#4 [e4,f#4]@2 e4 b4, d3@7 ~ e3@16 e3@7 ~, b4 ~@3 d4@2 a3@3 ~ [b3,e4,g#4]@15 ~ b3@2 ~@2 b3@2, ~@5 [e4,a4]@2 ~@25]/2", // A5 Esus2 E A5
  I: "~@2 a4 g#4 [e4,f#4]@2 e4 b4 ~ b4 a4 g#4 f#4 e4 f#4 g#4, c#3 d3, ~ b4@2 ~@9 d4@2 ~@2, ~@2 b3@2 ~@2 b3@3 ~ a3@3 ~ a3@2", // Esus2
  J: "e4!2 f#4 e4 f#4 g#4 e4 b4 ~@2 a4 g#4 [e4,f#4]@2 c#5 b4, e3@7 ~ e3@8, ~@2 b3@2 e4@2 b3@3 b4@2 ~@5, ~@5 b3 ~ b3", // Esus2
  K: "~ b4 a4 g#4 [e4,f#4]@2 e4 b4 ~ b4 a4 g#4 f#4 e4 f#4 g#4, c#3 d3, ~@2 b3@2 ~@2 b3@3 ~ a3@2 d4@2 a3@2", // Esus2
  L: "e4!2 f#4 e4 f#4 g#4 e4 e5 ~@2 d5 c#5 [a4,b4]@2 a4 e5, e3@8 ~ e5@2 ~@5, ~ b3 e4 b3 a3@4, ~@10 e4@3 ~ e4@2", // Asus2
  M: "~@2 d5 c#5 [a4,b4]@2 a4 e5 ~@2 d5 c#5 b4 a4 b4 c#5, f#3 g3, ~ e5@2 ~@6 e5@2 ~@5, ~@2 e4@2 ~@2 e4@3 ~ d4@2 g4@2 d4@2", // Asus2
  N: "a4!2 b4 a4 b4 c#5 a4 e5 ~@2 d5 c#5 [a4,b4]@2 f#5 e5, a3@7 ~ a3@8, ~@2 e4@2 a4@2 e4@2 ~ e5@2 ~@5, ~@5 e4 ~ e4", // Asus2
  O: "~ e5 d5 c#5 [a4,b4]@2 a4 e5 ~ e5 d5 c#5 b4 ~ b4 c#5, f#3 g3, ~@2 e4@2 ~@2 e4@3 ~ d4@2 g4@2 d4@2, ~@13 a4@2 ~", // Asus2
  P: "[a3,a4]", Q: "~@47 e5",
  R: "[~@5 e5@3 d5@3 c#5@3 [a4,b4]@6 ~ a4@3 e5@3 ~@6 d5@3 c#5@3 [a4,b4]@6 a4@3 ~ e5@3 ~@3 e5@3 d5@3 c#5@3 b4@3 a4@3 b4@3 c#5@3 a4@3 a4@3 ~ b4@3 a4@3 b4@3 c#5@3 ~@3 e5@3 ~@6 d5@3 c#5@3 ~ [a4,b4]@6 f#5@3 e5@3 ~@3 e5@3 d5@3 c#5@3 [a4,b4]@6, ~@2 a3@22 ~@3 f#3@25 ~@24 a3@25 a3@25 f#3@18, ~@8 e4@6 ~@7 e4@9 e5@6 ~@28 g4@6 ~@19 a4@6 ~@9 e5@6 ~@34, ~@33 e4@12 e4@9 ~@4 d4@9 ~@3 d4@6 ~@7 e4@6 ~@6 [e4,a4]@9 ~@3 e4@6 ~@7 e4@12 e4@12]/3", // Asus2 A5
  S: "~ a4@3 e5@3 ~@3 e5@3 d5@3 c#5@3 b4@3 a4@3 b4@3 c#5@3 a4@3 ~ a4@3 b4@3 a4@3 [a4,b4]@3 c#5, ~ e4@9 ~@3 d4@6 g4@6 d4@6 a3@17, ~@19 e4@3 ~@2", // Asus2
  T: "[~@5 e5@3 ~@3 e5@3 e4@4 c#5@3 [a4,b4]@6 a4@3 e5@3 ~@6 d5@3 c#5@3 [a4,b4]@6 ~ a4@3 e5@3 ~@3 e5@3 d5@3 c#5@3 b4@3 a4@3 b4@3 c#5@3 ~ a4@3 a4@3 b4@3 a4@3 b4@3 c#5@3 ~@3 e5@3 ~@3 e5@4 d5@3 c#5@3 [a4,b4]@6 f#5@3 e5@3 ~@3 e5@3 d5@3 c#5@3 ~ [a4,b4]@6 a4@3 e5@3 ~@3 e5@3 d5@3 c#5@3 b4@3 a4@3 d4@4 c#5@3 a4@3 a4@3 [e4,b4]@3 a4, ~@2 [e4,a4]@6 a3@22 ~@3 f#3@25 a3@25 a3@24 a3@25 f#3@25 g3@25 a3@10, ~@14 d5@3 ~@10 e4@9 e5@6 ~@28 g4@6 ~@19 a4@6 ~@68 g4@6 b4@3 ~@14, ~@39 e4@13 e4@9 ~@3 d4@9 ~@3 d4@6 ~@7 e4@6 ~@6 [e4,a4]@9 ~@4 e4@6 ~@6 e4@12 e4@13 e4@9 ~@3 d4@6 ~@23]/4", // Asus2 E5 A5
  U: "[~@2 b4@3 c#5@3 ~@3 e5@3 ~@4 e5@3 d5@3 c#5@3 [a4,b4]@6 a4@3 e5@3 ~@6 d5@3 ~ c#5@3 [a4,b4]@6 a4@3 e5@3 ~@3 e5@3 d5@3 c#5@3 b4@3 a4@3 ~ b4@3 c#5@3 a4@3 a4@3 b4@3 a4@3 b4@3 c#5@3 ~@3 e5@3 ~@7 d5@3 c#5@3 [a4,b4]@6 f#5@3 e5@3 ~@3 e5@4 d5@3 c#5@3 [a4,b4]@6 a4@3 e5@3 ~@3 e5@3 d5@3 c#5@3 g4@4 a4@3 b4@3 c#5@3 a4@3 a4@3 b4@3 a4@3 b4@3 c#5@3 ~@4 e5@3 ~@6 d5@3 c#5@3 [a4,b4]@6 f#5@3 e5@3 ~@4 e5@3 d5@3 c#5@3 [a4,b4]@6 a4@3 e5@3 ~@3 e5@3 d5@3 c#5@3 ~ b4@3 a4@3 b4@3 c#5@3 a4@3 a4@3 b4@3 a4@3 b4@3 c#5@3 ~@4 e5@3 ~@3 e5@3 d5@3 c#5@3 [a4,b4]@6 a4@3 e5@3 ~@7 d5@3 c#5@3 [a4,b4]@6 a4@3 e5@3 ~@3 e5@3 d5@3 ~ c#5@3 b4@3 a4@3 [d4,b4]@3 c#5, ~@2 a4@6 [e4,a4]@6 a3@22 ~@3 f#3@25 g3@25 a3@25 a3@25 ~@36 b4@3 ~@22 a4@6 ~@10 e5@6 ~@15 f#3@25 g3@25 a3@25 a3@22 ~@3 f#3@25 ~@12 g4@6 ~@4, ~@21 e4@6 ~@6 e4@9 e5@6 ~@28 g4@6 ~@19 a4@6 ~@10 e5@6 ~@15 f#3@25 g3@25 a3@25 a3@25 ~@43 d4@6 ~@6 e4@6 ~@7 [e4,a4]@6 ~@6 e4@6 ~@6 e4@13 e4@12 e4@9 ~@3 d4@9 ~@8, ~@45 e4@13 e4@9 ~@3 d4@9 ~@4 d4@6 ~@6 e4@6 ~@6 [e4,a4]@9 ~@4 e4@6 ~@6 e4@13 e4@12 e4@9 ~@3 d4@9 ~@4 d4@6 ~@6 e4@6 ~@6 [e4,a4]@9 ~@4 e4@6 ~@6 e4@13 e4@12 e4@9 ~@3 d4@6 ~ g4@6 ~@18 a4@7 ~@34 e5@6 ~@15 g3@23]/8", // Asus2 G A5
  V: "[~@2 a4@6 c#5@6 b4@37 ~@45, ~ a3@25 ~@22]/2",
})).s("gm_epiano2").gain(0.25)

// chords · acoustic guitar steel · "Steel-str Gt"
const acoustic_guitar_steel = note("<~@30 A B C D@3 E F G H I J K@2 E L ~@4 M N O P@2 ~@17>".pickRestart({
  A: "a3@6 [a3,c#4,e4,a4]@6 ~@3 a4@6 a4@8 ~@10 e4 ~@5 a4@2 ~, ~@12 d4@24 d4@11 ~, ~@15 [c#4,e4]@14 a4@9 ~ a4@6 ~@3, ~@15 [a3,c#4,e4]@5 [a3,c#4,e4]@4", // A C#m A
  B: "e3@6 b3 ~@8 b3 ~@5 e4@9 ~@9 b3 [g#3,b3]@5 e4@3, ~@6 [e3,g#3,e4]@6 a3@24 a3@11 ~, ~@7 b3@8 [e3,g#3]@15 [e3,g#3,b3,e4]@10 ~@8, ~@5 e4@2 ~@6 e4@2 ~, ~@8 b3@7 ~@9", // G#m E
  C: "a3@6 [a3,c#4,e4,a4]@6 ~@3 a4@6 a4@8 ~ [a3,c#4,e4]@6 ~@3 [a3,c#4,e4,a4]@6 a4@3, ~@12 d4@24 d4@11 ~, ~@15 [a3,c#4,e4]@14 a4@10 ~@9", // A
  D: "[e3@5 ~ [e3,g#3,b3]@6 ~@3 e4@6 e4@8 ~ [g#3,b3]@6 ~@3 b3 ~@8 a3@6 [a3,c#4,e4,a4]@6 ~@3 a4@6 a4@9 ~@9 e4 a4@5 ~@3 e3@5 ~ b3 ~@8 b3 ~@5 e4@9 ~@9 b3 ~@5 e4@3, ~@5 e4@7 a3@24 a3@9 e4@9 ~@6 d4@24 d4@12 ~@5 e4@7 a3@24 a3@12, ~@15 [e3,g#3,b3]@14 e4@10 [g#3,e4]@8 ~@31 [a3,c#4,e4,a4]@10 [a3,c#4,e4]@8 ~@6 [e3,g#3]@9 [e3,g#3]@15 [e3,g#3,b3,e4]@10 [g#3,b3]@8, ~@40 b3@8 ~@15 [c#4,e4]@15 ~@15 a4@51, ~@103 b3@8 e4 b3@14 ~@9 e4@6 ~@3]/3", // E G#m A E C#m A E G#m …
  E: "a3@6 ~@9 a4@6 a4@9 [a3,c#4,e4,a4]@6 ~@3 a4@5 a4@3 ~, ~ [a3,c#4,e4] d4@4 d4@2, ~@7 a4@8 [a3,c#4,e4]@15 ~@9 [a3,c#4,e4]@9", // A
  F: "e3@6 ~@9 e4@6 ~@3 g#4@6 g#4@3 ~@6 b3 ~@2 f#4@2 ~ f#4@3, ~ [e3,g#3,b3] a3@4 a3@2, ~@7 e4@8 [e3,g#3,b3]@15 [g#3,b3,e4]@6 f#4@3 e4 b3@8, ~@7 e4@3 ~ g#4@5, ~@39 g#3@5 e4@3 ~", // E
  G: "[a3,e4]@6 [a3,c#4,e4,a4]@6 ~@3 a4@6 a4@9 ~@9 e4 a4@4 a4@3 ~, ~ d4@2 d4, ~@15 [c#4,e4]@15 [a3,c#4,e4,a4]@10 [a3,c#4,e4]@8", // A5 A C#m A
  H: "e3@5 ~ b3 ~@8 b3 ~@5 e4@9 ~@9 b3 ~@5 e4@3, ~@5 e4@7 a3@24 a3@12, ~@6 [e3,g#3]@9 [e3,g#3]@15 [e3,g#3,b3,e4]@10 ~@8, ~@7 b3@8 e4@6 ~@18 e4@6 ~@3, ~@8 b3@7 ~@5 [g#3,b3]@4", // E G#m
  I: "a3@2 ~@3 a4@2 a4@3 [a3,c#4,e4,a4]@2 ~ [a3,c#4,e4,a4]@2 a4, ~ [a3,c#4,e4] d4@4 d4@2, ~@7 a4@8 [a3,c#4,e4]@15 ~@18", // A
  J: "[e3,g#4]@6 ~@12 f#4@3 e4@3 e4@6 [g#3,b3,e4]@6 ~@3 b3 ~@5 e4@3, ~@3 [e3,g#3,b3]@3 a3@12 a3@2 b3@4, ~@6 g#4@3 g#4@38 ~, ~@7 e4@8 [e3,g#3,b3]@15 ~@9 [g#3,e4]@8 ~, ~@12 f#4@3 e4@6 f#4@26 ~", // E C#m
  K: "[[a3,e4]@6 [a3,c#4,e4,a4]@6 ~@3 a4@6 a4@9 ~@9 e4 a4@5 a4@3 e3@5 ~ b3 ~@8 b3 ~@5 e4@9 ~@9 b3 ~@4 e4@3 ~, ~@12 d4@24 d4@11 ~@8 b3@8 e4@6 ~@18 e4@5 ~@4, ~@15 [c#4,e4]@15 [a3,c#4,e4,a4]@10 e4@13 e4@7 a3@24 a3@11 ~, ~@40 [a3,c#4]@8 ~@6 [e3,g#3]@9 [e3,g#3]@15 [e3,g#3,b3,e4]@10 ~@8, ~@64 b3@14 ~@10 [g#3,b3]@7 ~]/2", // A5 A C#m A E G#m
  L: "[e3,g#4]@6 ~@12 f#4@3 e4@3 e4@6 [g#3,b3,e4]@6 ~@3 b3 ~@4 e4@3 ~, ~@6 [e3,g#3,b3]@6 a3@24 a3@3 e4 b3@8, ~@2 g#4 g#4@13, ~@7 e4@8 [e3,g#3,b3]@15 ~@9 g#3@9, ~@4 f#4 e4@2 f#4@9", // E
  M: "d4@6 [d4,f#4,a4,d5]@6 ~@3 d5@6 d5@8 ~@10 a4 ~@5 d5@3, ~@12 g4@24 g4@11 ~, ~@15 [f#4,a4]@14 d5@9 ~ d5@6 ~@3, ~@15 [d4,f#4,a4]@5 [d4,f#4,a4]@4", // D F#m D
  N: "a3@6 e4 ~@8 e4 ~@5 a4@9 ~@9 e4 ~@5 a4@3, ~ [a3,c#4,a4] d4@4 d4@2, ~@7 e4@8 [a3,c#4]@15 [a3,c#4,e4,a4]@10 ~@8, ~@5 a4@2 ~@6 a4@2 ~, ~@8 e4@7 ~@5 [c#4,e4]@4", // A C#m
  O: "d4@6 [d4,f#4,a4,d5]@6 ~@3 d5@6 d5@8 ~ [d4,f#4,a4]@6 ~@3 d5@5 d5@3 ~, ~@12 g4@24 g4@11 ~, ~@15 [d4,f#4,a4]@14 d5@10 [d4,f#4,a4]@9", // D
  P: "[a3@6 e4 ~@8 e4 ~@5 a4@9 e4 [c#4,e4,a4]@6 ~@3 e4 ~@5 a4@4 a4@12 ~@34, ~@6 [a3,c#4,a4]@6 d4@25 d4@13 ~@46, ~@7 e4@8 [a3,c#4]@15 a3@10 ~@56, ~@15 a4@6 ~@19 a4@6 ~@50, ~@16 e4@14 ~@11 [c#4,e4]@9 ~@46]/2", // A C#m
})).s("gm_acoustic_guitar_steel").gain(0.54)

// chords · acoustic guitar steel · "Steel-str Gt" · soft notes
const acoustic_guitar_steel_2 = note("<~@30 A B ~ C A D ~ C A D ~ C A B ~ E ~@4 F G ~ H ~@18>".pickRestart({
  A: "~@5 a3@5 ~@6", B: "~@40 e3@7 ~", C: "~@30 e3@9 e3@8 ~", D: "~@5 e3", E: "~@10 e3@3 e3@3", F: "~@5 d4@5 ~@6",
  G: "~@5 a3", H: "~@41 a3@7",
})).s("gm_acoustic_guitar_steel").gain(0.34)

// chords · lead 2 sawtooth · "Saw Wave"
const lead_2_sawtooth = note("<~@26 A B C B A B C B A B C B A B C B A B C B ~@4 D E F G ~@18>".pickRestart({
  A: "[a3,c#4]@19 ~@5 [a3,c#4]@19 ~@5", B: "[e3,b3]@20 ~@4 [e3,b3]@19 ~@5", C: "[a3,c#4]@20 ~@4 [a3,c#4]@19 ~@5",
  D: "~ [d4,f#4]@18 ~@4 [d4,f#4]@20 ~@5", E: "[a3,e4]@19 ~@5 [a3,e4]@19 ~@5", F: "[d4,f#4]@19 ~@4 [d4,f#4]@19 ~@6",
  G: "[a3,e4]@19 ~@5 [a3,e4]@20 ~@4", // A5
})).s("gm_lead_2_sawtooth").gain(0.36)

// chords · synth strings 2 · "Syn Str. 2"
const synth_strings_2 = note("<~@13 A@2 B@4 C@2 D@2 E@2 F ~@46>".pickRestart({
  A: "[~@16 a4@8 [g#4,b4]@7 ~, b4 ~, ~ c#5@2 ~]/2", // G#m
  B: "[~@16 a4@8 [g#4,b4]@11 ~@21 a4@8, b4@2 ~@3 b4@2 ~, ~ c#5@2 ~@3 c#5@2]/4", // G#m
  C: "[[g#4,b4] ~@2 a4, ~ b4@2 ~, ~ c#5]/2", D: "[[g#4,b4] ~@2 d5, ~ e5@2 ~, ~ f#5]/2",
  E: "[[c#5,e5]@7 ~@18 d5@7, ~ e5@2 ~, ~ f#5]/2", F: "[c#5,e5]@3 ~",
})).s("gm_synth_strings_2").gain(0.15)

// bass · piano · "Piano 2"
const bass = note("<~@33 A B C B D B C B D B C B D E@4 F B G H I J K L@4 ~@11>".pickRestart({
  A: "~@23 e2@4 ~@3 e2@3 ~@3 e2@3 ~@3 e2@4 ~@2", B: "a2 ~ a2 ~ a2 ~ a2 ~", C: "e2@2 ~@2 e2@2 ~@2 e2@3 ~ e2@2 ~@2",
  D: "e2 ~ e2 ~ e2 ~ e2 ~", E: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", F: "d2 ~ d2 ~ d2 ~ d2 ~",
  G: "d2@2 ~@2 d2@3 ~ d2@2 ~@2 d2@2 ~@2", H: "a2@6 ~@6 a2@6 ~@6 a2@7 ~@6 a2@8 ~@3", I: "~ [d2,d3]@23",
  J: "~@4 [a2,a3]@43 ~", K: "~@5 [d2,d3]@43", L: "[~@7 [a2,a3]@50 [d2,d3]@99 ~@36]/4",
})).s("gm_piano").gain(0.5)

// other · overdriven guitar · "Overdrive Gt"
const overdriven_guitar = note("<~@41 A B C D E F G H I J K L M@5 N O@8 ~@4 P>".pickRestart({
  A: "~@18 b4@6 b5@5 ~ b5@5 ~ a5@3 g#5@3 f#5@3 e5@3", B: "e5@20 ~ b4@3", C: "b5@26 ~@16 e6@3 ~@3", D: "b5 ~",
  E: "~@18 b4@6 b5@5 ~ b5@5 ~@3 g#5@3 ~ f#5@3 e5@3, ~@9 a5 ~@2", F: "b5 a5 g#5 f#5 e5 d#5 c#5 b4",
  G: "a4@6 g#4@6 f#4@6 e4@6 d#4@6 c#4@6 b3@6 a3@2 b3 c#4@3", H: "b3 c4 c#4 d4 d#4 e4 f4 f#4 g4 g#4 a4 a#4 b4 c5 c#5 d5",
  I: "d#5 e5 f5 f#5 g5 g#5 a5 a#5 b5 c6 c#6 d6 d#6@2 e6 ~", J: "f#6@39 ~@3 e6@2 f#6@3 ~", K: "e6@13 ~ e6@2",
  L: "d6@40 ~@2 c#6@3 d6@2 ~",
  M: "[c#6@5 ~ c#6@6 b5@2 c#6@4 b5@4 ~@2 c#6@5 ~ c#6@2 ~ c#6@3 ~ b5@3 c#6@3 b5@4 a5@3 a5@4 f#5@40 e5@49 e5@5 ~ e5@2 d5@2 a4@46 ~@18 c#5@3 d5@3 c#5@6 ~ c#5@6 b4@3 c#5]/5",
  N: "~@2 b4@3 a4@3 ~ a4@3 f#4@36", O: "[~ e4@95]/8", P: "~@17 b3@2 ~@29, ~@15 [d4,e4]@2 ~@31, ~@8 c4 ~@15",
})).s("gm_overdriven_guitar").gain(0.4)

// other · overdriven guitar · "Overdrive Gt" · soft notes · Dsus2
const overdriven_guitar_soft = note(`<
  ~@41
  [~@42 g#5 ~@5]
  ~@29
  [~@24 b3@2 ~@5 b3@2 ~@15, ~@22 [d4,e4]@2 ~@5 [d4,e4]@2 ~@17, ~@23 c4@2 ~@5 c4@2 ~@16]
>`).s("gm_overdriven_guitar").gain(0.2)

// other · tubular bells · "Tubular bell"
const tubular_bells = note("<~@50 A@2 B C D E@2 F@2 G@2 ~@11>".pickRestart({
  A: "[d5@13 ~@34 c#5@44 ~@5]/2", B: "d5@15 ~", C: "c#5@9 ~@3 b4@9 ~@3 c#5@3 ~@3 c#5@3 ~@4 b4@3 c#5@3 b4@3 ~@2",
  D: "~@2 a4@9 ~@34 a4@3", E: "[~@4 c#5@43 c#5@6 d5@43]/2",
  F: "[~ d5@6 c#5@3 ~@3 c#5@3 ~@3 b4@3 c#5@3 b4@3 ~@3 a4@3 ~@4 c#5@3 ~@3 b4@3 c#5@3 b4@3 ~@3 a4@3 ~@37]/2",
  G: "[~@5 a4@28 ~@15]/2",
})).s("gm_tubular_bells").gain(0.6)

// other · music box
const music_box = note("<~@34 A B C D A B C D A B C D ~@4 E F G H I J@2 K@2 ~@13>".pickRestart({
  A: "~@2 a4@2 ~ a4@2 ~ g#4@3 a4@5", B: "~@2 b4@3 g#4@3 f#4@3 e4@5", C: "~@2 a4@2 ~ a4@3 g#4@3 a4@3 g#4 a4",
  D: "b4 ~ b4@2 a4 b4 a4@2 g#4@6 ~@2", E: "~@2 d5@2 ~ d5@3 c#5@3 d5@5", F: "~@2 e5 d5@2 c#5@3 d5 c#5@2 a4@5",
  G: "~@2 d5@2 ~ d5@3 c#5@3 d5@4 ~", H: "e5@2 e5 d5@2 e5 d5@2 c#5@8", I: "~@8 d5@7 ~@2 d5@9 ~ c#5@9 d5@12",
  J: "[~@10 e5@3 d5@3 d5@3 c#5@9 d5@3 c#5@7 a4@17 ~@5 d5@7 ~@3 d5@8 c#5@10 d5@8]/2",
  K: "[~ c#5@3 d5@3 e5@5 ~ e5@6 d5@3 e5@3 d5@6 c#5@62 ~@3]/2",
})).s("gm_music_box").gain(0.72)

// other · overdriven guitar · "Overdrive Gt"
const overdriven_guitar_2 = note(`<
  ~@48
  [a3@2 b3 c#4@3 b3@3 c4@3 c#4@3 d4@3 d#4@3 e4@3 f4@3 f#4@3 g4@3 g#4@3 a4@3 a#4@3 b4@3 c5@3]
  [c#5 d5 d#5 e5 f5 f#5 g5 g#5 a5 a#5 b5 c6 c#6 d6 d#6@2]
  [e6 ~@15]
  ~@21
>`).s("gm_overdriven_guitar").gain(0.2)

// drums · kick
const kick = s("bd").struct("<~@26 A@7 B A B A B A B A B A B A B C@3 D A E A F ~ G H I ~@14>".pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x ~@3 x!4", C: "x!2", D: "x ~@2 x ~@4", E: "x ~@6 x!5 ~ x ~ x",
  F: "x ~@23 x ~@5 x ~@6 x ~@5 x ~@4", G: "~ x ~@10", H: "~@5 x ~@42", I: "~@7 x ~@40",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@26 A@3 B A@3 B A C A D A C A D A C A D A@3 E A@3 F ~@18>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2", C: "~@2 x ~ x!4", D: "~@4 x ~@3 x ~ x ~ x ~ x!2", E: "~@4 x ~@3 x!5 ~@3",
  F: "~ x ~@2",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@33 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 B ~ A ~ C ~@18>".pickRestart({
  A: "~@4 x!4", B: "~@12 x!4", C: "~@24 x ~@5 x ~@6 x ~@5 x ~@4",
})).gain(0.29)

// drums · hihat
const hihat = s("hh").struct("<~@26 [x!4]!20 ~@4 [x!4]!3 [x!2 ~@2] ~@18>").gain(0.29)

// drums · crash
const crash = s("cr").struct("<~@50 A@3 B C D E F G ~@13>".pickRestart({
  A: "x", B: "x!2", C: "~@2 x ~@24 x ~@20", D: "~@4 x ~@24 x ~@18", E: "~@5 x ~@24 x ~@17",
  F: "~@7 x ~@11 x ~@12 x ~@15", G: "~ x ~@4",
})).gain(0.29)

stack(
  epiano2, acoustic_guitar_steel, acoustic_guitar_steel_2, lead_2_sawtooth, synth_strings_2, bass, overdriven_guitar,
  overdriven_guitar_soft, tubular_bells, music_box, overdriven_guitar_2, kick, snare, low_tom, hihat, crash
)

More by Mike Oldfield