Strudelify
KeyA majorTempo103 bpm
0:00/0:00
// QE2 — Oldfield, Mike
// 103 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(103/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 · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  A B C D E F G H C D C D I J K L M N O P M N O P Q R S T U V U W X Y Z AA X Y Z AA AB AC AD AE AF AG AH AI AJ AK AJ AL
  ~@4 M N O P M N O P Q R S T U V U AM X Y Z AA X Y Z AA AB AC AD AE AF AG AH AI AJ AK AJ ~
>`.pickRestart({
  A: "[c#4,f#4,a#4] ~ [c#4,f#4,a#4]!2 [c#4,f#4,a#4]@2 [c#4,g#4,b4]!2 [c#4,b4] ~ [c#4,g#4,b4]!3 ~ [c#4,a#4,c#5] ~, ~@4 g#4 ~@3", // F# C#7 F#
  B: "[c#4,f#4,a#4] ~ [c#4,f#4,a#4]!2 [c#4,f#4,a#4]@2 [c#4,g#4,b4]!3 ~ [c#4,a#4,c#5] ~ [c#4,f#4,a#4]@3 ~", // F# C#7 F#
  C: "[f#3,a#3]@2 [c#3,f#3,a#3]!2 [c#3,f#3] ~ [c#3,g#3,a#3,b3] [c#3,g#3,b3] [c#3,g#3,b3]@2 [c#3,g#3,b3]!3 ~ [c#3,a#3,c#4] ~, c#3 ~@3 a#3@2 ~@10", // F# F#5 C#7 F#
  D: "[f#3,a#3]@2 [c#3,f#3,a#3]!2 [c#3,f#3,a#3]@2 [c#3,g#3,b3]!3 ~ [c#3,a#3,c#4] ~ [c#3,f#3,a#3]@2 ~@2, c#3 ~@15", // F# C#7 F#
  E: "[e3,g#3]@2 [b2,e3,g#3]!2 [e3,g#3]@2 [b2,f#3,a#3]!2 [f#3,a#3]@2 [b2,f#3,a#3]!2 [b2,f#3,a#3]@2 [f#3,g#3,a#3] ~, b2 ~@3 b2 ~@3 b2 ~@5 [b2,b3]@2", // E Bmaj7 F# Bmaj7 F# B
  F: "[e3,g#3,b3] ~ [e3,g#3,b3]!2 [e3,b3] ~ [e3,a#3,c#4] ~ [e3,a#3,c#4] ~ [e3,b3,d#4] ~ [e3,b3,d#4]@3 ~, ~@4 g#3@2 ~@6 c4 ~@3", // E E5 A#dim Emaj7
  G: "[b3,d#4]@2 [e3,b3,d#4]!2 [b3,d#4]@2 [e3,c#4,e4]!2 [e3,c#4,e4]@2 [e3,c#4,e4]!2 [e3,c#4,e4]@2 [d#4,f#4]@2, e3 ~@3 e3 ~@9 e3 ~", // B Emaj7 B C#m D#m
  H: "[e3,d#4,f#4] ~ [e3,d#4,f#4]!3 ~ [e3,d#4,f#4]!3 ~ [e3,e4,g#4] ~ [e3,e4,g#4]@2 ~@2", // D#m E
  I: "[d#4,g#4,c5] ~ [d#4,g#4,c5]!2 [d#4,g#4,c5]@2 [d#4,a#4,c#5]!2 [d#4,c#5] ~ [d#4,a#4,c#5]!3 ~ [d#4,c5,d#5] ~, ~@4 a#4 ~@3", // G# D#7 Cm
  J: "[d#4,g#4,c5] ~ [d#4,g#4,c5]!2 [d#4,g#4,c5]@2 [d#4,a#4,c#5]!3 ~ [d#4,c5,d#5] ~ [d#4,g#4,c5]@3 ~", // G# D#7 Cm G#
  K: "[g#4,c5]@2 [d#4,g#4,c5]!2 [d#4,g#4] ~ [d#4,a#4,c5,c#5] [d#4,a#4,c#5] [d#4,a#4,c#5]@2 [d#4,a#4,c#5]!3 ~ [d#4,c5,d#5] ~, d#4 ~@3 c5@2 ~@10", // G# G#5 D#7 Cm
  L: "[g#4,c5]@2 [d#4,g#4,c5]!2 [d#4,g#4,c5]@2 [d#4,a#4,c#5]!3 ~ [d#4,c5,d#5] ~ [d#4,g#4,c5]@2 ~@2, d#4 ~@15", // G# D#7 Cm G#
  M: "~@2 [e4,a4,c#5]!3 ~ [e4,a4,c#5] [e4,g4,a4,c#5] [e4,a4,c#5] ~ [e4,a4,c#5]!3 ~ [e4,g#4,b4] ~", // A A7 A E
  N: "~@2 [e4,a4,c#5]!3 ~ [e4,a4,c#5]!3 ~ [e4,a4,c#5] ~ [e4,g#4,b4]@2 ~@2", // A E
  O: "[e4,a4,c#5]!3 ~ [e4,a4,c#5]!3 ~ [d4,f#4,a4]@3 [d4,f#4,a4]!2 ~ [d4,f#4,a4] ~", // A D
  P: "[d4,f#4,a4]@2 [d4,f#4,a4]!3 ~ [d4,f#4,a4] ~ [f#4,a4,d5] ~ [a4,c#5,e5] ~ [a4,c#5,e5]@3 ~", // D A
  Q: "[e4,g#4,b4] ~ [e4,g#4,b4]!3 ~ [e4,g#4,b4]!2 [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [e4,g#4,b4] ~", // E D E
  R: "[e4,g#4,b4] ~ [e4,g#4,b4]!3 ~ [e4,g#4,b4]!2 [c4,d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [e4,b4] ~, ~@7 g#4", // E D7 D E5
  S: "[e4,g#4,b4] ~ [e4,g#4,b4]!3 ~ [e4,g#4,b4]!2 [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [g#4,b4]@2, ~@14 e4 ~", // E D G#m
  T: "[d4,f#4,a4] ~ [d4,f#4,a4]!3 ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [e4,g#4,b4] ~ [e4,g#4,a4,b4]@3 ~", // D E
  U: "~@2 [c#4,f#4,a#4]!3 ~ [c#4,g#4,b4]!3 ~ [c#4,g#4,b4]!3 ~ [c#4,a#4,c#5]@2", // F# C#7 F#
  V: "~@2 [c#4,f#4,a#4]!3 ~ [c#4,g#4,b4]!3 ~ [c#4,a#4,c#5] ~ [c#4,f#4,a#4]@3 ~", // F# C#7 F#
  W: "~@2 [c#4,f#4,a#4]!2 [c4,c#4,f#4,a#4] ~ [c#4,g#4,b4]!3 ~ [c#4,a#4,c#5] ~ [c#4,f#4,a#4]@2 ~@2", // F# C#7 F#
  X: "[e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] [e4,g#4,b4] [e4,a4,c#5] [e4,b4,d5] [e4,c#5,e5] ~ [e4,a4,c#5] ~", // A E A E7 C#m A
  Y: "[e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] [e4,f#4,a4] [e4,g#4,b4] [e4,a4,c#5] [e4,g#4,b4] ~ [e4,g#4] ~", // E F#m7 E A E
  Z: "[c#4,f#4,a4] ~ [c#4,f#4,a4] ~ [c#4,f#4,a4] ~ [c#4,f#4,a4] ~ [d4,f#4,a4] [e4,g#4] [e4,f#4,a4] [g#4,b4] [a4,a#4,c#5] ~ [f#4,a4] ~", // F#m D E F#m7 G#m A F#m
  AA: "[e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,b4,d5] ~ [e4,b4,d5] ~ [e4,a4,c#5] ~ [e4,g#4,b4]@2", // E A E7 A E
  AB: "[f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4] [e4,g#4] [f#4,a4] [g#4,b4] [a4,c#5] ~ [f#4,a4] ~", // F#m E F#m G#m A F#m
  AC: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] [a4,d5] [c#5,e5] [a4,d5,f#5] [a4,c#5,e5]@3 ~", // A D5 C#m D A
  AD: "[b4,d#5] ~ [b4,d#5] ~ [b4,d#5] ~ [b4,d#5] ~ [b4,d#5] [a#4,c#5] [b4,d#5] [c#5,e5] [d#5,f#5] ~ [b4,d#5] ~", // B A#m B C#m D#m B
  AE: "[g#4,b4,e5] ~ [g#4,b4,e5]@2 [f#4,b4,d#5] ~ [f#4,d#5]@2 [e4,g#4,b4]@3 ~ [e4,g#4,b4]@2 c#5 d5, ~@6 b4 ~@9", // E B D#m E
  AF: "c#5@3 ~ [c#5,e5]@3 ~ [c#5,e5]@2 [b4,d5] [a4,c#5] [g4,b4] ~ [a4,c#5] ~, e5 ~@15", // C#m Bm A G A
  AG: "[b4,d5]@3 ~ [b4,d5]@3 ~ [b4,d5]@2 [a4,c#5] [g4,b4] [f#4,a4] ~ [g4,b4] ~", // Bm A G F#m G
  AH: "[a4,c#5]@3 ~ [a4,c#5]@3 ~ [a4,c#5]@2 [g#4,b4] [f#4,a4] e4@2 [f#4,a4] ~, ~@12 g#4 ~@3", // A G#m F#m
  AI: "[g#4,b4]@2 e4 ~ [g#4,b4]@3 e4 ~@4 [a#4,c#5]@3 ~, ~@2 [a#4,c#5] ~, ~@10 f#4@5 ~", // G#m A#m
  AJ: "~@2 [g#4,c#5,f5]!3 ~ [g#4,d#5,f#5]!3 ~ [g#4,d#5,f#5]!3 ~ [g#4,f5,g#5]@2", // C# G#7 C#
  AK: "~@2 [g#4,c#5,f5]!3 ~ [g#4,d#5,f#5]!3 ~ [g#4,f5,g#5] ~ [g#4,c#5,f5]@3 ~", // C# G#7 C#
  AL: "~@2 [g#4,c#5,f5]!3 ~ [g#4,d#5,f#5]!3 ~ [g#4,f5,g#5] ~ [g#4,c#5,f5]@2 ~@2", // C# G#7 C#
  AM: "~@2 [c#4,f#4,a#4]!3 ~ [c#4,g#4,b4]!3 ~ [c#4,a#4,c#5] ~ [c#4,f#4,a#4]@2 ~@2", // F# C#7 F#
})).s("gm_synth_brass_1").gain(0.56)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  A B A B C D@3 A B E B F G@3 H I J K H I J K L@3 M A B A B N O P Q N O P Q R N S T U V W X Y Z AA Z AB@4 H I J K H I J
  K L@3 M AC AD AE AD N O P Q N O P Q R N S T U V W X Y Z AA ~
>`.pickRestart({
  A: "[f#2,f#3] ~@13 [c#2,c#3] ~", B: "[f#2,f#3] ~@15", C: "[e2,e3] ~@13 [b1,b2] ~", D: "[e2,e3] ~@15",
  E: "[f#2,f#3,g3] ~@13 [c#2,c#3] ~", F: "[g#2,g#3] ~@13 [d#2,d#3] ~", G: "[g#2,g#3] ~@15",
  H: "a2 ~ a2 ~ [a2,b2] ~ a2 ~ a2 ~ a2 ~ e3 ~ e3@2", I: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ d3 ~ e3 ~ e3 ~",
  J: "a2 ~ a2 ~ a2 ~ a2 ~ d3 ~ d3 ~ d3 ~ e3 ~", K: "d3 ~ d3 ~ d3 ~ e3 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  L: "e2 ~ e2 ~ e3 ~ e2 ~ d2 ~ d2 ~ d2 ~ d2 ~", M: "d2 ~ d2 ~ d2 ~ d2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  N: "a2 ~ a2 ~ a3 ~ a2 ~ a2 ~ a2 ~ a3 ~ a2 ~", O: "e2 ~ [d2,e2] ~ e3 ~ e2 ~ e2 ~ e2 ~ e3 ~ e3 ~",
  P: "f#2 ~ f#2 ~ f#3 ~ f#3 ~ d2 ~ d2 ~ d3 ~ d2 ~", Q: "e2 ~ e2 ~ e3 ~ e3 ~ e2 ~ e2 ~ e3 ~ [d2,e2] ~",
  R: "d2 ~ d2 ~ d3 ~ d2 ~ d2 ~ d2 ~ d3 ~ d2 ~", S: "b2 ~ b2 ~ b3 ~ b2 ~ b2 ~ b2 ~ b3 ~ b2 ~",
  T: "e3 ~ e3 ~ b2 ~ b2 ~ e3 ~ e3 ~ e3 ~ e3 ~", U: "a2 ~ a2 ~ a3 ~ a2 ~ f#2 ~ f#2 ~ f#3 ~ f#2 ~",
  V: "g2 ~ g2 ~ g3 ~ g2 ~ e2 ~ e2 ~ e3 ~ e2 ~", W: "f#2 ~ f#2 ~ f#3 ~ f#2 ~ d2 ~ d2 ~ d3 ~ d2 ~",
  X: "e2 ~ e2 ~ e3 ~ e2 ~ f#2 ~ f#2 ~ f#3 ~ f#2 ~", Y: "[c#2,c#3] ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ [g#1,g#2] ~",
  Z: "[c#2,c#3] ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ g#2 ~", // C#
  AA: "[c#2,c#3,d3] ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ c#3 ~ [g#1,g#2] ~", AB: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ e2 ~",
  AC: "[f#1,f#2] ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ [c#1,c#2] ~", // F# C#
  AD: "[f#1,f#2] ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ c#2 ~", // F#
  AE: "[f#1,f#2,g2] ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ [c#1,c#2] ~", // Gmaj7 C#
})).s("gm_fretless_bass").gain(0.72)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  A B C D E F G H I J I K L M N O ~@27 P Q R S T U@4 V@4 ~ W ~ X ~ Y ~ Z ~ AA ~@2 AB@4 ~@11 P Q R S T AC@4
>`.pickRestart({
  A: "c#4@2 f#4@2 a#4@2 c#5@2 b4@2 c#5 [a#4,b4] b4@2 c#5@2", B: "c#4@3 f#4 a#4@2 c#5@2 b4@2 c#5@2 a#4@4",
  C: "[b5,c#6] [g#5,a#5] f#5 f5 [c#5,d#5] b4 [g#4,a#4] f#4 b4@2 [b4,c#5] a#4 b4@2 c#5@2", // Bsus2 G#sus2 C#sus2 G#sus2 Bsus2
  D: "[b5,c#6] [g#5,a#5] f#5 f5 [c#5,d#5] b4 [g#4,a#4] f#4 b4@2 b4 c#5 a#4@2 ~@2", // Bsus2 G#sus2 C#sus2 G#sus2
  E: "g#4@2 ~ g#4!2 ~ a#4 ~ a#4@2 b4 [g#4,a#4] a#4@2 b4 ~", F: "b4@2 c#5 [a#4,b4] b4@2 c#5@2 c#5@2 d#5@2 d#5@3 ~",
  G: "d#5@2 e5 [c#5,d#5] d#5@2 e5 ~ e5@2 e5 ~ e5@2 f#5@2", H: "f#5@3 f#5 f#5@2 f#5 ~ f#5@2 g#5@2 g#5@4",
  I: "[b5,c#6] a#5 [f#5,g#5] f5 [c#5,d#5] b4 [g#4,a#4] f#4 b4@2 [b4,c#5] a#4 b4@2 c#5@2", // Bsus2 F#sus2 C#sus2 G#sus2 Bsus2
  J: "[b5,c#6] a#5 [f#5,g#5] f5 [c#5,d#5] b4 [g#4,a#4] f#4 b4@2 b4 c#5 a#4@3 ~", // Bsus2 F#sus2 C#sus2 G#sus2
  K: "[b5,c#6] a#5 [f#5,g#5] f5 [c#5,d#5] b4 [g#4,a#4] f#4 b4@2 b4 c#5 a#4@2 ~@2", // Bsus2 F#sus2 C#sus2 G#sus2
  L: "[c4,c5]@2 ~ [c4,c5] [c3,c4,c5] ~ c#5 ~ c#5@2 d#5 [c5,c#5] c#5@2 d#5@2", // C C#maj7
  M: "[c#6,d#6] c6 [g#5,a#5] g5 [d#5,f5] c#5 [a#4,c5] g#4 c#5@2 c#5 d#5 c5@2 ~@2", // C#sus2 G#sus2 D#sus2 A#sus2
  N: "[c#6,d#6] c6 [g#5,a#5] g5 [d#5,f5] c#5 [a#4,c5] g#4 c#6@3 c6 c#6@4", // C#sus2 G#sus2 D#sus2 A#sus2
  O: "[c#6,d#6] c6 [g#5,a#5] g5 [d#5,f5] c#5 [a#4,c5] g#4 c#6 ~ c#6@2 c6@3 ~", P: "~@14 c#5 d5",
  Q: "e5@3 ~ e5 ~ e5 a5 e5@2 d5 c#5 b4 a4 b4 c#5", R: "d5@3 ~ [d5,g5]@3 ~ d5@2 c#5 b4 a4@2 g4 ~",
  S: "c#5@3 ~ c#5@3 d5 c#5@2 b4 a4 g#4@2 a4@2", T: "b4@4 b4@3 ~ c#5@3 ~ c#5@2 ~@2",
  U: "[~@2 [g#4,c#5,f5]!2 [g#4,c#5,f5]@2 [g#4,d#5,f5,f#5] [g#4,d#5,f#5] [g#4,d#5,f#5]@2 [g#4,d#5,f#5]!2 [g#4,d#5,f#5]@2 [g#4,f5,g#5]@4 [g#4,c#5,f5]!2 [g#4,c#5,f5]@2 [g#4,d#5,f#5]!2 [g#4,d#5,f#5]@2 [g#4,f5,g#5]@2 [g#4,c#5,f5]@6 [g#4,c#5,f5]!2 [g#4,c#5,f5]@2 [g#4,d#5,f#5]!2 [g#4,d#5,f#5]@2 [g#4,d#5,f#5]!2 [g#4,d#5,f#5]@2 [g#4,f5,g#5]@4 [g#4,c#5,f5]!2 [g#4,c#5,f5]@2 [g#4,d#5,f#5]!2 [g#4,d#5,f#5]@2 [g#4,f5,g#5]@2 [g#4,c#5,f5]@3 ~]/4", // C# G#7 C# G#7 C# G#7 C# G#7 …
  V: "[[a2,a3,a4]@61 ~@3]/4", W: "~@2 e5 a5 e5@2 c#5 e5 c#5 ~ a4@5 ~", X: "a4@2 b4 [f#4,a4] a4@2 b4 ~ d5@4 d5@3 ~",
  Y: "~@2 e5 a5 e5@2 c#5 e5 c#5@2 a4@2 b4@3 ~", Z: "a4@2 b4 [f#4,a4] a4@2 b4@2 d5@2 e5@2 e5@3 ~",
  AA: "e5@2 b4 [b4,e5] ~@2 e4@2 a5@2 f#5@2 g#5@3 ~, ~@4 g#4@5 ~@7", // E5
  AB: "[~@2 [c#4,f#4,a#4]!2 [c#4,f#4,a#4]@2 [c#4,g#4,a#4,b4] [c#4,g#4,b4] [c#4,g#4,b4]@2 [c#4,g#4,b4]!2 [c#4,g#4,b4]@2 [c#4,a#4,c#5]@4 [c#4,f#4,a#4]!2 [c#4,f#4,a#4]@2 [c#4,g#4,b4]!2 [c#4,g#4,b4]@2 [c#4,a#4,c#5]@2 [c#4,f#4,a#4]@6 [c#4,f#4,a#4]!2 [c#4,f#4,a#4]@2 [c#4,g#4,b4]!2 [c#4,g#4,b4]@2 [c#4,g#4,b4]!2 [c#4,g#4,b4]@2 [c#4,a#4,c#5]@4 [c#4,f#4,a#4]!2 [c#4,f#4,a#4]@2 [c#4,g#4,b4]!2 [c#4,g#4,b4]@2 [c#4,a#4,c#5]@2 [c#4,f#4,a#4]@3 ~]/4", // F# C#7 F# C#7 F# C#7 F# C#7 …
  AC: "[~@2 [g#4,c#5,f5]!2 [g#4,c#5,f5]@2 [g#4,d#5,f5,f#5] [g#4,d#5,f#5] [g#4,d#5,f#5]@2 [g#4,d#5,f#5]!2 [g#4,d#5,f#5]@2 [g#4,f5,g#5]@4 [g#4,c#5,f5]!2 [g#4,c#5,f5]@2 [g#4,d#5,f#5]!2 [g#4,d#5,f#5]@2 [g#4,f5,g#5]@2 [g#4,c#5,f5]@6 [g#4,c#5,f5]!2 [g#4,c#5,f5]@2 [g#4,d#5,f#5]!2 [g#4,d#5,f#5]@2 [g#4,d#5,f#5]!2 [g#4,d#5,f#5]@2 [g#4,f5,g#5]@4 ~@14]/4", // C# G#7 C# G#7 C# G#7 C#
})).s("gm_distortion_guitar").gain(0.64)

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~@52 [c#5 ~@3 c#5 ~ b4 ~ c#5 ~@3 c#5 ~ b4 ~]!3 [c#5 ~@3 c#5 ~ b4 ~ c#5 ~@7] ~@36>")
  .s("gm_acoustic_guitar_steel").gain(0.56)

// other · bagpipe · "BAG PIPE"
const bagpipe = note(`<
  ~@28 A ~@3 B C ~ D B C ~ E F G H I ~@2 J K L ~@23 B C ~ D M C ~ E F G H I ~@2 J K L ~@3
>`.pickRestart({
  A: "f#4 ~ f#4 ~ f#4 ~ f#4 ~@9", B: "c#5 ~ c#5 ~ c#5 ~ c#5 ~ c#5 b4 c#5 d5 e5@3 f#5", C: "e5@2 b4@3 ~@3",
  D: "b4 ~ b4 ~ c#5 ~ c#5 ~ d5 ~ d5@2 c#5@2 b4 ~", E: "b4 ~ b4 ~ c#5 ~ c#5 ~ d5 ~ d5@2 c#5@2 b4@2",
  F: "f#5 ~ f#5 ~ f#5 ~ f#5 ~ f#5 e5 f#5 g#5 a5@3 b5", G: "a5@4 e5@8 e5 a5@3",
  H: "d#5 ~ d#5 ~ d#5 ~ d#5 ~ d#5 c#5 d#5 e5 f#5 b4 d#5 f#5", I: "g#5 ~ g#5@2 f#5 ~ f#5@2 e5@7 ~",
  J: "c#6@3 ~ c#6@2 d6@2 c#6@2 b5 a5 g#5@2 a5@2", K: "b5@3 ~ b5@4 c#6@3 ~ c#6 d6 c#6 d6", L: "c#6@7 ~@9",
  M: "c#5 ~ c#5@2 c#5@2 e4@2 c#5 b4 c#5 d5 e5@3 f#5",
})).s("gm_bagpipe").gain(0.8)

// other · timpani
const timpani = note(`<
  ~@16 A B A C A B A D E F E G H@3 I J K L M J K L M N J O P ~@4 Q@3 R ~@4 A B A C A B A D E F E G H@3 I J K L M J K L M
  N J O P ~@4 Q@3 ~
>`.pickRestart({
  A: "a3 ~@15", B: "~@14 d#4 ~", C: "~@14 d#3 ~", D: "~@14 a3 ~", E: "e3 ~@15", F: "~@14 c#3 ~", G: "~@14 c#4 ~",
  H: "f#3 ~@13 c#4 ~", I: "f#3 ~@15", J: "a4 ~@15", K: "e4 ~@15", L: "f#4 ~@7 d4 ~@7", M: "e4 ~@3 a3 ~@3 e4 ~@3 a3 ~@3",
  N: "c#5 ~@15", O: "b4 ~@15", P: "d#5 ~@3 a#4 ~@3 d#5 ~@3 a#4 ~@3", Q: "c#3 ~@13 g#3 ~", R: "c#3 ~@15",
})).s("gm_timpani").gain(0.72)

// other · ocarina
const ocarina = note(`<
  ~@16 A ~ B ~ C ~ B ~ D ~ E ~@7 F ~@3 F ~@17 C ~ B ~ A ~ B ~ D ~ E G ~@6 F ~@3 F ~@13
>`.pickRestart({
  A: "~@2 e6 a6 e6@2 c#6 e6 c#6@2 a5 f#5 a5 ~ b5@2", B: "e6 a6 e6@2 c#6 e6 c#6@2 a5@3 f#5 a5 ~ b5@2",
  C: "~@2 e6 a6 e6 ~ c#6 e6 c#6 ~ a5 f#5 a5 ~ b5@2", D: "e6@2 b5 e6 b5@2 a5 b5 a5 ~ f#5 ~ a5@2 g#5@2",
  E: "e6 g#6 e6 ~ b5 e6 b5 ~ a5 ~ f#5 ~ a5@2 g#5 ~", F: "a5 ~ a5 ~ a5 ~ a5 ~ a5 g#5 a5 b5 c#6 f#5 a5 c#6",
  G: "f#6@2 g#6 [e6,f#6] f#6@2 g#6@2 f#6 [f#6,g#6] e6 ~ e6@3 ~", // Esus2 F#sus2
})).s("gm_ocarina").gain(0.64)

// drums · kick
const kick = s("bd").struct("<[x!4]!91 ~>").gain(0.72)

// drums · clap
const clap = s("cp").struct("<~@28 [~ x ~ x]!63 ~>").gain(0.72)

// drums · snare
const snare = s("sd").struct(`<
  [~ x ~ x]!3
  [~@4 x ~@7 x ~ x!2]
  [~ x ~ x]!3
  [~@4 x ~@7 x ~ x!2]
  [~ x ~ x]!47
  [~@4 x ~@7 x!4]
  [~ x ~ x]!35
  ~
>`).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!16 [x!16]!75 ~>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@16 [~ x ~@3 x ~@2]!12 ~@64>").gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@3 A ~@19 A ~@3 A ~@23 A ~@15 A ~@19>".pickRestart({
  A: "x",
})).gain(0.8)

// drums · ride bell
const ride_bell = s("rd").struct("<~@24 [~@3 x] ~@39 [~@3 x] ~@27>").gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@16 [~ x ~ x]!28 ~@12 [~ x ~ x]!12 ~@4 [~ x ~ x]!12 ~@8>").gain(0.8)

stack(
  synth_brass_1, bass, distortion_guitar, acoustic_guitar_steel, bagpipe, timpani, ocarina, kick, clap, snare, hihat,
  open_hat, crash, ride_bell, tambourine
)

More by Mike Oldfield