Strudelify

Parisienne Walkways

Gary Moore

KeyA minorTempo55 bpm
0:00/0:00
// Parisienne Walkways — Gary Moore
// 55 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 91 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(55/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 · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<~@9 A B C D E F G H ~@8 B C D E I J K L ~@58>".pickRestart({
  A: "~@5 a3@2 ~@4 a3, a2, ~ a3@4 ~@2 a3@4 ~, ~ c4 c4@2 c4!2, ~ e4@2 e4",
  B: "~@5 a3@2 ~@4 a3, d3, ~ a3@4 ~@2 a3@4 ~, ~ c4 c4@2 c4!2, ~ f4@2 f4",
  C: "~@5 a3@2 ~@4 a3, g2, ~ a3@4 ~@2 a3@4 ~, ~ c4 c4@2 c4!2, ~ f4@2 f4",
  D: "~@5 g3@2 ~@4 g3, c3, ~ g3@4 ~@2 g3@4 ~, ~ b3 b3@2 b3!2, ~ e4@2 e4",
  E: "~@5 a3@2 ~@4 a3, f2, ~ a3@4 ~@2 a3@4 ~, ~ c4 c4@2 c4!2, ~ e4@2 e4",
  F: "~@5 a3 ~@5 e3, b2@25 ~@3 e3@16 ~@4, ~ a3@4 ~ e2@6, ~@8 d4@8 d4@9 ~@7 g#3@8 g#3@8, ~@12 f4@13 ~@11 b3@12",
  G: "~@5 e3 ~@5 f#3, a2!2, ~ e3@4 ~@2 f#3@4 ~, ~@8 a3@8 a3@9 ~@7 b3@8 b3@8, ~@12 c#4@13 ~@11 d4@12",
  H: "[a2,e3,a3,c#4] ~@15", // A
  I: "~@20 a3@4 b2 ~@19 a3@4, b2 ~, ~ a3@4 ~@2 a3@4 ~, ~@8 d4@8 d4@9 ~@7 d4@8 d4@8, ~@12 f4@13 ~@11 f4@12",
  J: "b2 ~@19 b3@4 b2 ~@19 b3@4, ~ b3@4 ~@2 b3@4 ~, ~@8 d#4@8 d#4@9 ~@7 d#4@8 d#4@8, ~@12 f#4@13 ~@11 f#4@12",
  K: "~@4 e4@2 ~@4 b3@2 ~@4 d#4@2 ~@2 d#4@2 c4 ~, e3@24 f3@23 ~, ~ b3@3 e4@2 ~ c4@3 ~@2, ~@6 g#4@6 ~@6 a4@5 ~",
  L: "[e3,b3,e4,g#4] ~@15", // E
})).s("gm_electric_guitar_clean").gain(0.21)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B C D E F G H I J C D K L M N O C P@8 Q@8 ~@6 C D E F M R S R S R S R T R S R S R S R S R S R S R S R S R S R S R S
  R S R U V ~@4 W@3 ~@3 X
>`.pickRestart({
  A: "~@12 a3@7 ~@5 e3@7 ~@5 c3@8 ~@4", B: "a1@40 b1@4 c2@3 ~", C: "d2@10 e2 f2", D: "g2@19 ~ g2@2 f2@2",
  E: "c2@40 d2@4 e2@3 ~", F: "f2@39 ~ f2@4 e2@4", G: "b1", H: "e2", I: "a1@3 ~@9 a3@7 ~@5 e3@7 ~@5 c3@8 ~@4",
  J: "a1@10 b1 c2", K: "c2@10 d2 e2", L: "f2@37 ~@3 f2@4 e2@4", M: "b1 e2", N: "a1@23 ~ a1@22 ~@2", O: "a1 ~@23",
  P: "[g2@38 ~@6 f2@4 c2@40 d2@4 e2@3 ~ f2@39 ~ f2@4 e2@4 b1@48 e2@48 a1@23 ~ a1@24 a1@2 ~@46 d2@40 e2@4 f2@4, ~@5 g2@43]/8",
  Q: "[g2@40 ~@4 f2@4 c2@40 d2@4 e2@4 f2@38 ~@2 f2@4 e2@4 b1@46 ~@2 b1@23 ~ b1@24 [e1,e2]@23 ~ [f1,f2]@24 [e1,e2]@2 ~@94, ~@5 g2@38 ~@5]/8", // E F E
  R: "a1 d2", S: "a1@2 f1 e1", T: "a1@2 f1 g1", U: "a1@17 ~@3 a1@3 ~ d2@4 ~@4 e2@5 ~@3 f2@4 ~@4", V: "g1@23 ~",
  W: "[~@35 a2 ~ a2 ~ a2 ~ a2@2 ~ a2@2 a2@3 a2@7 ~ a2 a1@48 ~@38, ~@8 a1@47 ~ a1@2 ~@86]/3", X: "~@32 a1@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.5)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  A B C D E F G H I ~@7 J K@4 L@2 M ~@3 N O P ~@2 Q@7 R S T U V W X@2 Y Z AA AB AC AD AE@2 AF AG AH AI AJ@2 AK AL AM AN
  AO AP AQ@2 AR AS AT AU AV AW AX AY AZ@4 BA@3 BB@2 BC@5
>`.pickRestart({
  A: "~@12 a3@5 [f3,g3] [d3,e3] [a2,b2,c3] [f#2,g#2] [d#2,f2] ~@2 e3@4 [b2,c3] [g2,a2] [d2,e2,f2] ~@5 c3@4 [f2,g2,a2] [c2,d2,e2] g1 ~@5", // Fsus2 Dsus2 Am F#sus2 D#sus2 Cmaj7 Gsus2 Dm …
  B: "e5@20 d5@4 c5@8 b4@3 ~@5 a4@4 g4@4", C: "f4@20 e5@3 ~ c5@21 ~@3", D: "d5@20 c5@3 ~ b4@8 a4@3 ~@5 g4@3 ~ f4@4",
  E: "e4@18 ~ c5@23 ~@6", F: "c5@20 b4@4 a4@6 ~@2 [g4,a4] ~@3 f4@7 ~ e4@4, ~@36 g4 ~@11", G: "d4@17 ~@3 b4@28",
  H: "b4@20 a4@4 g#4@7 ~ f4@2 ~@6 e4@4 d4@4", I: "c4 ~@11",
  J: "~ [b3,c4] [d3,e3,f3,g3] [b2,c3] [f2,g2,a2] ~@4 [e3,f3] [g3,a3,b3,c4] [d4,e4,f4] c#5@7 ~ d5@4 e5@12 g5@12, [e3,a3,c#4,e4]@2 ~@10 g4 ~@35", // Cmaj7 Em7 Cmaj7 F Fmaj7 Cmaj7 Dm A
  K: "[f5@24 f5@29 e5 [a4,b4,c5,d5] [d4,e4,f4,g4] ~@6 [b2,c3] [d3,e3,f3,g3] b4@4 c5@3 d5@12 f5@7 [c5,d5,e5] [d4,e4,f4,g4,a4,b4] [f3,g3,a3,b3,c4] ~@2 f5@21 d5@2 ~@2 d5@37 c5 [e4,f4,g4,a4,b4] ~@5 a4 ~ b4 ~ c5@9 [a2,d3]@2 e5@11 ~@2]/4", // D7 Em7 Cmaj7 Em7 C Em7 F Em …
  L: "[d5@24 d5@31 [d4,e4,f4] [b3,c4] [f3,g3] [d3,e3] [a2,b2,c3] g2 ~@7 a4@4 b4@8 b4 ~@3 c5@9 ~@3, e5 ~@58 g#4@8 ~@29]/2", // Dm Cmaj7 Fsus2 Dsus2 Am
  M: "d5@9 c5 a4 c5 ~ a4 g4 a4 g4 e4 g4 a4 g4 e4 [d4,d#4] c4 ~ d4 c4 d4 e4 g4 d#4 d4 ~ c4 a3 c4 a3 g3 a3 g3 e3 g3 e3 d#3 d3 c3@3", // D#maj7
  N: "~@38 e5 ~ a4 ~@5 a4 ~", O: "~@4 d5 ~@43", P: "~@12 c5 ~@11",
  Q: "[[e2,b2]@2 ~@2 [g3,a3] [d3,e3,f3] [b2,c3] a2 ~@279 [c3,d3,e3,f3] ~@2 [c3,d3,e3,f3] ~ [c3,d3,e3,f3] ~@2 [c3,d3,e3,f3,g3] ~ [c3,d3,e3,f3] ~@2 [d3,e3,f3,g3] ~ [d3,e3,f3,g3] ~ [d3,e3,f3,g3] ~@2 [d3,e3,f3,g3] ~ [d3,e3,f3,g3] [a3,b3,c4] [b2,c3,c#3,d#3,e3,f3,g3] [d2,e2,f2,g2,a2,a#2] [f1,g1,a1,b1,c2] [c1,d1,e1] ~@3 a2 ~@3 c2@2 ~@12, ~@6 e5@151 ~@11]/7", // E5 Gsus2 Dm Cmaj7 Dm7 C Dm7 Em7 …
  R: "~@12 [e2,f2,a#2,c3,c#3,d3,d#3,e3] [c2,d2,e2,f2,g2,g#2,a2,b2] d2 ~@4 [g#4,a4,b4] d5@4 c5@8 b4@6 b4 ~ a4@4 g4@4, ~@20 c#5 ~@27", // Cmaj7 G#m
  S: "f4@20 e5@2 f5@2 c5@7 [c5,d5] a#4 c5@5 d5 ~@9", T: "~@16 c5@12 c5 ~@11 b4@2 a4@2 g4@2 f4@2",
  U: "e4@18 ~ c5@3 d5 ~ c5@12 [a#4,b4] [g4,g#4,a4] [d#4,e4,f4,f#4] d4 ~@5 g4 a4 b4", // Bmaj7
  V: "c5@20 b4@4 a4@6 ~ a4 g4 ~@6 g4 f4@4 e4@4", W: "d4@17 ~@3 b4@4 b4@17 ~@3 g#4 ~@3",
  X: "[a4@69 g4 ~@18 g4 ~@2 a4 ~@2 b4@2, g#4 ~@95]/2", Y: "~ g4 ~@3 e4@20 ~@15 c4 ~ d4@2 e4@2 c4@2",
  Z: "a3@2 e3@2 g3@12 a3 ~@23 g4 ~ a4 ~ b4 ~ g4@2", AA: "~@4 e4@2 g4@2 e4@19 ~@13 c4@2 d4@2 e4@2 c4@2",
  AB: "a3 e3 g3@20 a3 b3", AC: "c4@36 [g3,a3] [e3,f3] ~@6 b3@2 c4@2", AD: "d4@4 c4@33 ~ [a2,e3] e3 g4@8",
  AE: "[e4@68 ~@8 d4@4 e4@2 a4@2 ~ e4@2 a4 ~ c5@2 ~ a4 ~ g4 ~, ~@93 [a4,c5]@2 ~]/2", // Am
  AF: "a4@30 ~@5 c4 a4@4 b4@3 ~ b4@3 ~, ~@36 e4 ~@11",
  AG: "b4@25 ~@4 [f3,g3,a3] [c3,d3,e3] [f2,g2,a2,b2] [d2,e2] ~@3 b4@4 c5@3 ~ d5@3 ~", // F C G7 Dsus2
  AH: "e5@11 ~ e5@7 ~ e5@8 d5@6 ~ d5@7 ~ d5@5",
  AI: "~ d5@4 d5@3 ~@2 d5@3 ~ d5@3 ~ d5@5 g5 ~@2 e5 d5 ~ e5 d5 ~ c5 d5 c5 a4 ~ b4 a4 g4 e4 g4 a4 c5 d5 e5 g5@2",
  AJ: "[~@4 a5@19 ~ a5@4 a5@13 [f3,g3] [c3,d3,e3] [f2,g2,a2,b2] [a1,b1,c2,d2,e2] g1 ~ e5@8 ~ e5 g5 [d5,e5]@2 ~ g5@2 e5 g5 e5 d5@2 e5@2 g5@2 e5 [e5,g5] ~ e5@2 g5@2 e5 g5 e5 d5@2 e5@2 ~ e5 ~ [e5,g5] d5 ~ e5@2 g5@2, ~@30 e5 ~@6 d5 ~@5 g5 ~@4]/2", // Fsus2 C G7 Am Dsus2 Em
  AK: "e5 g5 e5 ~ e5@2 g5@2 e5 g5 [d5,e5]@2 ~ g5@2 e5@4 ~ e5@4 a5 e5@4 ~ e5@3 ~@2 e5@4 g5@2 e5@3 ~ e5@3, ~@3 d5@2 ~@7 e5@2 ~@5 g5@2 ~@8 g5@2 ~@3 a5@2 ~@8 a5@2 ~@2", // Dsus2
  AL: "g5@2 e5@3 d#5 d5 c5 a4 d5 a4 ~ c5 a4 g4 a4 g4 [a4,c5] d5 c5 a4 c5 a4 g4 ~ e4 g4 e4 d#4 d4 g4 d4 c4 d4 d#4 d4 ~ c4 d4 c4 ~@2 d1 ~@2 [c2,d2] [e2,f2]@2, ~@5 d4", // Am Csus2 Fmaj7
  AM: "[a2,e3]@4 ~ g5@19 b4 [g4,a4] [c4,d4,e4,f4] [g3,a3,b3] [d3,e3,f3] c3 ~@3 d5@4 g5@8 a5@3, ~@5 a5@2 ~@41", // A5 Gsus2 Dm7 G Dm
  AN: "~ c6@7 ~ c6@18 [e5,f5,g5,a5] [g4,a4,b4,c5,d5] [c4,d4,e4,f4] ~@2 d5@4 ~ g5@7 ~ a5@3", // Fmaj7 G Dm7
  AO: "~@5 d6@8 ~ d6@7 ~@2 d6@5 ~@2 d6@5 ~ d6@3 ~ d6@3 ~@2 d6@3",
  AP: "~ d6@3 ~ d6@2 ~ d6@2 ~ d6@2 ~ d6@2 ~ d6@2 ~ d6 ~@2 d6 ~ d6 ~ d6!2 ~ d6 c6 d6 c6 [a5,c6] a5 g5 a5 g5 e5 g5 e5@3 g5@2 e5@2", // Am
  AQ: "[~ a5@11 ~ a5 g5 e5 g5 e5@3 ~ e5@2 g5@2 a5@11 ~ a5 g5 e5 g5 e5@3 ~ e5@2 g5@2 a5@11 g5 ~ e5@4 ~ e5@4 g5@2 e5@4 g5@2 e5@4 ~ e5@3 g5@3 ~ g5 ~ g5 a5 c6, g5@2 ~@18 g5@2 ~@22 g5@2 ~@20 g5@2 ~@15 g5@2 ~@5 e5@2 a5@2 ~@2]/2",
  AR: "d6@2 ~@3 d6@18 ~ d6@15 ~@2 d6@7",
  AS: "~@3 d6@7 ~ d6@4 ~ d6@4 ~ d6@3 ~ d6@2 d6 ~@2 d6@9 b5 [d5,e5,f5,g5,a5] [f4,g4,a4,b4,c5] [f3,g3,a3,b3,c4,d4,e4] [g2,a2,b2,c3,d3,e3] [c2,d2,e2,f2] ~@3", // Dm F Fmaj7 Cmaj7 Dm7
  AT: "~@2 g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 ~ [g5,a#5] ~ [g5,a#5] ~ [g5,a#5] ~ g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5", // Gm
  AU: "a#5 g5 a#5 g5 a#5 ~ [g5,a#5] ~ g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 g5 a#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 ~ [d#5,f#5] ~ d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5", // Gm D#m
  AV: "d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 ~ [d#5,f#5] ~ d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 ~ d#5 f#5 d#5 f#5 d#5 f#5 d#5 f#5 [b4,d5] b4 d5 ~ b4 d5 b4 d5 b4 d5", // D#m Bm
  AW: "b4 d5 b4 d5 b4 d5 ~ [b4,d5] ~ [b4,d5] ~ [b4,d5] ~ [b4,d5] ~ [b4,d5] ~ [b4,d5] ~ [b4,d5] b4 d5 b4 d5 b4 d5 b4 d5 b4 d5 b4 d5 b4 d5 b4 d5 b4 d5 b4 d5 [d4,b4] [a3,b3,c4,d5] [d3,e3,f3,g3] [a2,b2,c3] g2 [b2,f#3]@3", // Bm G D7 Em7 Am B5
  AX: "~ e5@19 ~ d5@4 c5@8 b4@8 a4@7", AY: "~ g5@20 f5@4 e5@9 d5@7 c5@4 ~@3",
  AZ: "[~ b5@19 ~ a5@4 ~@9 f5@7 e5@7 ~@2 c6@19 b5@4 ~ a5@4 ~@11 e5@5 ~@3 c5@23 ~@12 a4 c5 d5@5 ~@2 c5@9 [a4,b4,c5] [f4,g4] e4 ~@8 e4 f4 a4@2 c5!2 ~@2 e5@4 d5 ~@2 a4 ~@2 c5@13, ~@25 g5@56 g5@56 ~@55]/4", // Am Fsus2
  BA: "[~@8 f4 [g4,a4] c5 e5@3 d5 [a4,c5] [c5,d5] [g4,a4] c5 [g4,a4] [e4,a4] [e4,g4] c4 [e4,g4] [a3,c4] [c4,e4] [g3,a3] c4 [g3,a3] [e3,a3] [e3,g3] g3@12 a3@2 c4@2 d4@2 e4@2 ~ d4@3 c4@3 d4@3 g4@4 e4@3 c5@5 b4@4 ~ d5@5 f5@5 g5@6 e5@6 b5@21 ~@3 g5@15 ~@5, ~@31 c3 ~@41 a4 ~@70]/3", // Gsus2 Am Csus2 Gsus2 A5 Em Am C …
  BB: "[~@5 a5@31 ~@8 g5 e5 e5@21 g5@2 d5@19 b4 g4@2 ~@5, ~@46 d5 ~@49]/2",
  BC: "[a4 b4@41 b4@55 d4@7 ~@12 c4@4 ~ a3@4 g3@4 ~ g3 a3@10 d3@6 c3@6 a2@7 g2@58 ~@7 a5@4 ~@11, ~@42 a4 ~@72 d4@3 ~@122]/5",
})).s("gm_overdriven_guitar").gain(0.68)

// other · overdriven guitar · "OVERDRIVE" · soft notes
const overdriven_guitar_soft = note(`<
  A ~@7 B ~@7 C ~ D ~ E ~ F ~@4 G H I J K L ~@4 M N O ~@6 P ~@2 Q ~ R S ~@2 T U ~@5 V W X ~@5 Y ~@3 Z ~@15 AA
>`.pickRestart({
  A: "~@21 c#2 [a#1,c2] ~@4 d3 ~@3 [b1,c2] ~@7 b2 ~@2 [a1,b1] ~@5", // A#sus2 Cmaj7 Asus2
  B: "~@4 [g#3,a3,a#3,b3] [f3,f#3,g3] [d3,d#3,e3] [b2,c3,c#3] a#2 ~@39", C: "~ d4 c3 ~@2 e2 ~@2 [b2,c3,d3] ~@39",
  D: "~@8 [g3,a3,b3,c4] [e3,f3,g3] ~@3 a2 ~@34", E: "~@15 [c4,d4,d#4] [g3,g#3,a#3] ~@31, ~@15 [a2,d3]@5 ~@28",
  F: "~@5 b4 [g4,a4] ~@2 a3 ~@38", G: "~@38 d5 ~@9", H: "c5 ~@11",
  I: "~@26 a4@13 ~ [e4,f4] d4 [b3,c4] a3 [f3,g3] [d3,e3] c3 b2", J: "~ d#4", K: "e4", L: "~ e4 d4 c4 b3 ~@43",
  M: "~@4 [b2,c3] ~ [b2,c3] ~@2 b2 ~ [b2,c3] ~@2 [b2,c3,d3] ~ [b2,c3] ~ [b2,c3] ~@2 [c3,d3,e3] ~ [c3,d3,e3] ~@2 [c3,e3] ~ [b2,c3] ~ [b2,c3,e3] d3 ~ [b2,c3,e3] ~ [b2,c3,d3,e3,f3] ~@2 [b2,c3,d3,e3,f3] ~ [b2,c3,d3,e3] ~@2 [c3,d3,e3,f3] ~ [b2,c3,d3,e3,f3] ~@2", // Cmaj7 Bm Cmaj7 C Cmaj7 Bdim Cmaj7 Dm7 …
  N: "~@23 [d3,f#3] ~@6 [g2,b2] ~@2 [d2,e2]@2 ~@3 e1 [d1,e1]@2 ~@7, ~@32 f2@2 ~ a1@3 c1@3 ~@7, ~@35 [e1,b1]@2 f1@3 ~@8, ~@12 g1 ~@3", // D G Dsus2 E5
  O: "~@14 [a1,b1,c2] ~@2 [b3,c#4] [d#4,e4,f#4] ~@29, ~@15 [e1,f1,g1]@2 ~@31, ~@8 [c1,d1] ~@15", // Am Bsus2 D#m Em Csus2
  P: "~@21 f4 [d4,e4] [b3,c4] ~@24", Q: "~@27 e4 ~@3 e4!2 ~@15", R: "~@38 [b2,c3,d3] [g2,a2] ~@8", S: "~@5 g6",
  T: "~@35 a3 ~@12", U: "~@26 [f4,g4,a4] [d4,e4] [b3,c4] ~@19", V: "~@42 e1 [f1,g1] [a1,b1] ~@3",
  W: "~@23 d5 [c5,e5] ~@23", X: "~@26 b5 ~@21", Y: "~@39 c6 ~@8", Z: "~@39 f4 [e4,g4] a#3 g#3 ~@5",
  AA: "~@37 [b4,c5,d5,e5] [e4,f4,g4,a4] [g3,a3,b3,c4,d4] [d3,e3,f3] ~@7", // Cmaj7 Fmaj7 G Dm
})).s("gm_overdriven_guitar").gain(0.34)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~ A B C D E F G H I J K L M N O P Q R S T F U V ~ Q W S X F Y Z AA ~@7 Q R S T AB AC AD AC AD AC AD AC AE AC AD AC AD
  AC AD AC AD AC AD AC AD AC AD AC AD AC AD AC AD AC AD AF AG AH AI AJ@5 AK@7
>`.pickRestart({
  A: "[a2,a3,c4,e4]@47 ~", B: "[d3,a3,c4,f4]@47 ~", C: "[g2,a3,c4,f4,g4]@47 ~", D: "[c3,b3,e4,g4]@47 ~",
  E: "[f2,c4,e4,a4]@47 ~", F: "[b2,d4,f4,a4]", G: "[e3,b3,e4,g#4]@47 ~", H: "[a2,c4,e4,a4] ~@23", I: "[a2,a3,c4,e4]",
  J: "[d3,a3,c4,f4]", K: "[g2,a3,c4,f4]", L: "[c3,g3,b3,e4]", M: "[f3,a3,c4,e4]", N: "[b2,a3,d4,f4] [e3,g#3,b3,e4]",
  O: "[a2,a3,c#4,e4]@8 [a2,b3,d4,f#4]@3 ~ [a2,b3,d4,f#4]@3 ~", P: "[a2,a3,c#4,e4] ~@23", Q: "[d3,c4,f4,a4]",
  R: "[g2,a3,c4,f4,g4]", S: "[c3,b3,e4,g4]", T: "[f2,c4,e4,a4]", U: "[e3,b3,e4,g#4]", V: "[a2,c4,e4,a4]",
  W: "[g3,a3,c4,f4,g4]", X: "[f3,c4,e4,a4]", Y: "[b2,a3,b3,d#4,f#4]", Z: "[e3,e4,g#4,b4] [f3,f4,a4,c5]",
  AA: "[e3,e4] ~@23, [g#4,b4] ~@47", AB: "[b2,d4,f4,a4] [e3,b3,d4,g#4]", AC: "[a2,c4,e4,a4]@23 ~ [d3,d4,f4,a4]@24",
  AD: "[a2,c4,e4,a4]@24 [f3,c4,e4,a4]@12 [e3,b3,d4,a4]@11 ~", // Am Fmaj7 Esus4
  AE: "[a2,c4,e4,a4]@24 [c4,e4,a4,c5]@12 [d4,g4,b4,d5]@11 ~", AF: "[a3,e4,g4,c5] [d3,c4,f4,a4]",
  AG: "[g4,c5,e5]@19 ~ [b4,d5]@4 [e4,a4,c5]@6 ~@2 [d4,g4,b4]@7 ~ [c4,f4,a4]@8, a3@12 f3@11 ~", // C Bm Am G F
  AH: "[a4,c5,e5,g5]@18 ~@2 [b4,d5,f5]@4 [a4,c5,e5]@6 ~@2 [g4,b4,d5]@7 ~ [f4,a4,c5]@7 ~, a3@24 d3@23 ~", // Am7 Bdim Am G F
  AI: "[e5,a5,c6]@17 ~@3 [d5,g5,b5]@3 ~ [d3,c5,f5,a5]@6 ~@2 [e3,b4,d5,g5]@7 ~ [f3,g4,c5,e5]@6 ~@2, a3@5 ~@7", // Am G Dm7 Em7 C
  AJ: "[c5@16 c4@6 ~ d4@7 ~@15 f3@10 e3@11 ~@2 f3@14 e3@6 ~ e3@145 ~@6, [g2,f4,a4]@47 ~, a3@31 c4@204 ~@5, ~@22 e3@23 ~@195, ~@6 g3@41 ~]/5", // Dm
  AK: "[~@26 b4@6 ~@13 g5@24 [d4,g4,b4]@24 [b3,c4,g4]@35 [c4,e4,g4]@15 [c4,e4,g4,b4]@52 [e4,g4,b4,d5]@32 [e4,a4,c5]@16 ~ e4@25 [a2,c4,e4,g4,b4]@51 [a1,a2,c4,e4,a4]@2 ~@14, ~@9 a1@298 ~@29, ~@9 a2@256 ~@71, ~@12 a3@5 c4@3 d4@3 g4@9 ~@6 b4@4 c5@28 ~@173 [g4,b4,d5]@26 ~@67, ~@15 b3@17 [d4,e4,a4]@38 ~@58 a3@67 ~@141]/7", // G Cmaj7 C Cmaj7 Em7 Am Am7 Am …
})).s("gm_synth_strings_1").gain(0.22).pan(0.8)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@9 A@2 B@2 C@2 D E F G H I@2 J K L M N@2 O@2 P Q R ~@7 F G H S@2 T U@2 V T U@2 V T U@2 V T U@2 V T U@2 V T U@2 V T
  U@2 V T U@2 V T W@6 ~@7
>`.pickRestart({
  A: "[e5@6 d5 c5]/2", B: "[d5@6 c5 b4]/2", C: "[c5@3 b4]/2", D: "a4", E: "a4 ~@47", F: "[a3,a4]@3 [c4,c5]",
  G: "[b3,b4]@47 ~", H: "[b3,b4]@2 [c4,c5] [b3,b4]", I: "[[a3,a4]@60 [c4,c5]@12 [b3,b4]@11 ~ [a3,a4]@12]/2",
  J: "[g#3,g#4]", K: "[a3,a4]@23 ~", L: "a4 ~@23, a3 ~@47", M: "~ e5 d5 c5", N: "[b4@5 d5 ~ b4, ~@9 c5@2 ~]/2",
  O: "[a4@59 c5@12 ~ b4@12 a4@12]/2", P: "f#4", Q: "[e4,e5] [f4,f5]", R: "[e4,e5] ~@15",
  S: "[[a3,a4]@60 [c4,c5]@12 [b3,d4,g#4]@23 ~]/2", T: "[c4,e4,a4]@24 [d4,f4,a4]@23 ~",
  U: "[[c4,e4]@35 ~ [b3,d4]@11 ~ [c4,e4]@24 [d4,f4]@23 ~, a4@95 ~]/2", V: "[c4,e4]@35 ~ [b3,d4]@10 ~@2, a4@23 ~",
  W: "[[c4,e4,a4]@26 ~@20 c5@237 ~@5]/6", // Am
})).s("gm_string_ensemble_1").gain(0.24).pan(0)

// other · whistle
const whistle = note("<~@33 A@2 ~@56>".pickRestart({
  A: "[~@43 g#7@8 ~@13 d7@8 ~@18 a7@6]/2",
})).s("gm_whistle").gain(0.13)

// drums · kick
const kick = s("bd").struct("<~ A@7 B A@7 B A@7 B A@7 C ~@5 D E A@38 F C ~@11>".pickRestart({
  A: "x ~@4 x!2 ~@4 x", B: "x ~@10 x", C: "x", D: "~ x", E: "~@11 x", F: "x ~@4 x!2 ~ x ~ x ~",
})).gain(0.71)

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

// drums · low tom
const low_tom = s("lt").struct("<A ~@7 A ~@7 A ~@7 A ~@14 A ~@51>".pickRestart({
  A: "~@10 x!2",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B@3 C B@2 D A B@3 C B@2 E A B@3 C B@2 D F B@3 C B@2 G H@6 I A B@3 C J K J K J K J K J K J K J K J K J K J K J K J
  K J K J K J K J K J K ~@12
>`.pickRestart({
  A: "x!8 ~ x!3", B: "x!12", C: "x!7 ~ x!4", D: "x ~@10 x", E: "x ~@2 x ~@5 x ~ x", F: "x!2 ~ x!5 ~ x!3", G: "x!2 ~ x",
  H: "~ x ~ x", I: "~@3 x ~@5 x ~ x", J: "x!3 ~ x!2", K: "x!6",
})).gain(0.43)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A ~@3 B ~@2 C A ~@3 B ~@2 C A ~@3 B ~@2 C A ~@3 B ~@8 D C A ~@3 B E F E F E F E F E F E F E F E F E F E F E F E F E
  F E F E F E F E F ~@12
>`.pickRestart({
  A: "~@2 x", B: "~@7 x ~@4", C: "~@5 x", D: "~@9 x ~@6", E: "~ x ~ x ~@2 x!2 ~ x ~ x", F: "~ x ~ x ~ x ~ x ~ x ~ x",
})).gain(0.07)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@7 A ~@7 A ~@7 A ~@14 A ~@51>".pickRestart({
  A: "~@10 x!2",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct("<~@25 A ~@12 B ~@40 C ~@4 D ~@6>".pickRestart({
  A: "~ x ~@4", B: "~ x", C: "x ~@2 x!13 ~@32", D: "~@8 x ~ x!22 ~@16",
})).gain(0.14)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@79 [~@16 x!6 ~@26] ~@11>").gain(0.07)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@7 A ~@7 A ~@22 A ~@4 A ~@3 A ~@3 A B ~ C A D A D A D A D A D A D A D A D A D A D A E A ~@11
>`.pickRestart({
  A: "x", B: "~ x", C: "x!2", D: "x ~ x!2", E: "~@3 x!3",
})).gain(0.36)

// … 21 more lines

More by Gary Moore