Strudelify

That's the Way

Katrina and the Waves

KeyD majorTempo128 bpm
0:00/0:00
// That's the Way — Katrina and the Waves
// 128 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 114 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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 · rock organ · "ORGAN 3"
const rock_organ = note(`<
  A B C D@2 E F G H I J K L M C N L O@8 P@2 Q@5 R S T U V S T S W M X K Y B X K Z AA@2 AB AC AD@3 AE S T U AE U AF U AE
  AG AH AG AH AI AH AG AJ AK AF S AL U AF S AM@7 AN@2 S AF S W U T U AE U T U V AO AF AP AE U T S AE S AF S AQ@2
>`.pickRestart({
  A: "~@18 g3 ~@2 f4 [g4,a4] [b4,c5], ~@9 [a3,b3] d4 ~, ~@19 c4@2 e4@2 ~", B: "[d5,f#5,a5]@9 ~ [d5,g5,b5]@14",
  C: "[d5,g5,b5]@9 ~ [e5,a5,c#6]@14", D: "[[f#5,a5]@9 ~ [g5,b5]@13 ~ [g5,b5]@9 ~ [d5,f#5,a5]@14, d5@11 ~@5]/2",
  E: "[d6,f#6,a6]@9 ~ [d6,g6,b6]@13 ~", F: "[e6,g6,b6]@9 ~ [e6,f#6,a6,c#7]@14", G: "[d6,f#6,a6]@9 ~ [d6,g6,b6]@14",
  H: "[d6,g6,b6]@2 [d6,g6,b6]@2 [d6,g6,b6]@6 [d6,f#6,a6]@13 ~", I: "[f#5,a5]@10 [g5,b5]@13 ~, d5@23 ~",
  J: "[d5,g5,b5]@5 [e5,a5,c#6]@7", K: "[d5,f#5,a5]@9 ~ [d5,g5,b5]@13 ~", L: "[d5,g5,b5]@9 ~ [d5,f#5,a5]@14",
  M: "[d5,f#5,a5]@5 [d5,g5,b5]@7", N: "[f#5,a5]@9 ~ [g5,b5]@14, d5@23 ~",
  O: "[[f#4,a4,d5]@24 e5@12 ~@12 [a4,f#5]@24 ~@6 e5@6 [b4,g5]@5 [a4,f#5]@7, ~@48 [g4,b4]@49 ~@47 [g4,b4]@23 ~@25, ~@72 d5@119 ~]/8", // D Em D G
  P: "[[d5,f#5], a4@15 ~]/2", Q: "[[g4,e5] g5 [a4,f#5]@2 [b4,e5,g5], b4@49 ~@71, ~@24 d5@95 ~]/5",
  R: "[b4,d5,g5]@5 [a4,d5,f#5]@7", S: "[a4,d5,f#5]@9 ~ [b4,d5,g5]@14", T: "[b4,d5,g5]@9 ~ [c#5,e5,a5]@14",
  U: "[a4,d5,f#5]@9 ~ [b4,d5,g5]@13 ~", V: "[b4,d5,g5]@10 [a4,d5,f#5]@13 ~", W: "[b4,d5,g5]@9 ~ [a4,d5,f#5]@14",
  X: "[d5,g5,b5]@9 ~ [e5,a5,c#6]@13 ~", Y: "[d5,g5,b5]@9 ~ [d5,f#5,a5]@13 ~",
  Z: "[d5,g5,b5]@9 ~ [f#5,a5]@13 ~, ~@10 d5@11 ~@3", AA: "[[f#4,d5], a4@23 ~]/2", AB: "[g4,b4,e5]", AC: "[b4,d5,g5]",
  AD: "[[a4,f#5]@2 [b4,e5,g5], d5@71 ~]/3", AE: "[b4,d5,g5]@9 ~ [a4,d5,f#5]@13 ~",
  AF: "[b4,d5,g5]@9 ~ [c#5,e5,a5]@13 ~", AG: "[a4,d5,f#5] ~@2", AH: "[b4,d5,g5]@9 ~ [a4,d5,f#5]@9 ~@5",
  AI: "[a4,d5,f#5]@3 ~@5", AJ: "[b4,d5,g5]@9 ~ [a4,d5,f#5]@8 ~@6", AK: "[a4,d5,f#5]@10 [b4,d5,g5]@13 ~",
  AL: "[b4,d5,g5]@9 ~ [a4,d5,f#5]@12 ~@2", // G D
  AM: "[[b4,d5,g5]@9 ~ [a4,d5,f#5]@5 ~ [a4,d5,f#5] ~ [a#4,c#5,f#5]@3 ~ [b4,d5,f#5]@43 ~ [a#4,c#5,f#5]@3 ~ [b4,d5,f#5]@43 ~ [a#4,c#5,f#5]@3 ~ [b4,d5,f#5]@48 ~@2]/7", // G D F# Bm F# Bm F# Bm
  AN: "[[c#5,e5]@47 ~, a4@15 ~]/2", AO: "[a4,d5,f#5]@5 [b4,d5,g5]@7", AP: "[a4,f#5]@9 ~ [b4,g5]@14, d5@23 ~",
  AQ: "[[b4,d5,g5]@9 ~ [a4,d5,f#5,a5]@27 ~@11]/2", // G D
})).s("gm_rock_organ").gain(0.33).pan(0.4)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@5 A B C D E F G H I J K L C M N O P Q R S T U V W P@2 X Y Z AA AB AC Z F AD AE G AF AG AH AI AJ AK AL AM AN AO AP AQ
  AR AS AT AU F AK AE K AV AK AW AX AY AX AZ BA BB BC BD Z BE K BF K AA K BG@2 BH@2 BI@2 BJ BK BL K AA K BM ~@3 BN BO BP
  BQ BR K BS BT AE K AA K BU K AA BT BV@2
>`.pickRestart({
  A: "d2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~ d2@3 ~ d2 ~",
  B: "d2@2 ~@2 d2 ~ d2@3 ~ d2 ~ d2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~", C: "d2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~ d2@3 ~ d2 ~ d2@3 ~ d2 ~",
  D: "d2@3 ~ d2 ~ d2@2 ~@2 d2 ~ d2@3 ~ a2@2 b2@2 a2@2 f#2 ~",
  E: "d2@2 ~@2 d2 ~ d2@2 ~@2 d2@2 g1@2 ~@2 g1@2 g1@3 ~ g1 ~", F: "g1@2 ~@2 g1 ~ g1@2 ~@2 g1@2 a1@3 ~ a1 ~ a1@3 ~ a1@2",
  G: "d2@2 ~@2 d2 ~ d2@2 ~@2 d2@2 g1@2 ~@2 g1 ~ g1@3 ~ g1 ~", H: "g1@3 ~ g1 ~ g1@2 ~@2 g1 ~ d2@3 ~ d2 ~ d2@2 ~@2 d2 ~",
  I: "d2@3 ~ d2 ~ d2@2 ~@2 d2@2 g1@2 ~@2 g1 ~ g1@3 ~ g1 ~", J: "g1@2 ~@2 g1 ~ g1@3 ~ g1@2 a1@3 ~ a1 ~ a1@3 ~ a1@2",
  K: "d2@3 ~ d2 ~ d2@3 ~ d2@2 g1@3 ~ g1 ~ g1@3 ~ g1 ~", L: "g1@3 ~ g1 ~ g1@3 ~ g1 ~ d2@2 ~@2 d2 ~ d2@3 ~ d2@2",
  M: "d2@2 ~@2 d2 ~ d2@3 ~ d2 ~ d2@2 ~@2 d2 ~ d2@2 ~@2 d2@2", N: "e1@3 ~ e1 ~ e1@3 ~ e1 ~ e1@2 ~@2 e1@2 f#1@3 ~ e1@2",
  O: "g1@2 ~@2 g1 ~ g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@3 ~ a1 ~", P: "d2@3 ~ d2 ~ d2@3 ~ d2 ~ d2@3 ~ d2 ~ d2@2 ~@2 d2 ~",
  Q: "d2@3 ~ d2@2 d2@3 ~ d2 ~ d2@3 ~ d2 ~ d2@3 ~ d2@2", R: "e1@2 ~@2 e1 ~ e1@3 ~ e1 ~ e1@3 ~ e1@2 f#1@3 ~ e1@2",
  S: "g1@3 ~ g1 ~ g1@3 ~ g1@2 d2@2 ~@2 d2 ~ d2@4 a1@2", T: "d2@3 ~ d2 ~ d2@3 ~ d2 ~ d2@2 ~@2 d2 ~ d2@3 ~ d2 ~",
  U: "d2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~",
  V: "e1@2 ~@2 e1 ~ e1@3 ~ e1 ~ e1@2 ~@2 e1@2 f#1@3 ~ e1@2", W: "g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@4 a1@2",
  X: "e1@3 ~ e1 ~ e1@3 ~ e1 ~ e1@3 ~ e1 ~ f#1@3 ~ e1@2", Y: "g1@3 ~ g1 ~ g1@2 ~@2 g1@2 d2@2 ~@2 d2 ~ d2@3 ~ a1@2",
  Z: "d2@3 ~ d2@2 d2@3 ~ d2@2 g1@3 ~ g1 ~ g1@3 ~ g1 ~", AA: "g1@3 ~ g1 ~ g1@3 ~ g1 ~ a1@3 ~ a1 ~ a1@3 ~ a1@2",
  AB: "d2@2 ~@2 d2 ~ d2@3 ~ d2@2 g1@3 ~ g1 ~ g1@3 ~ g1 ~", AC: "g1@3 ~ g1@2 g1@3 ~ g1@2 d2@3 ~ d2@2 d2@4 a1@2",
  AD: "d2@2 ~@2 d2 ~ d2@3 ~ d2@2 g1@2 ~@2 g1 ~ g1@3 ~ g1 ~", AE: "g1@3 ~ g1 ~ g1@3 ~ g1@2 d2@3 ~ d2 ~ d2@3 ~ a1@2",
  AF: "g1@3 ~ g1 ~ g1@3 ~ g1@2 a1@2 ~@2 a1 ~ a1@2 ~@2 a1@2", AG: "d2@3 ~ d2 ~ d2@3 ~ d2 ~ g1@3 ~ g1 ~ g1@3 ~ g1 ~",
  AH: "g1@3 ~ g1 ~ g1@3 ~ g1@2 d2@2 ~@2 d2 ~ d2@3 ~ d2 ~", AI: "d2@3 ~ d2 ~ d2@2 ~@2 d2@2 g1@3 ~ g1 ~ g1@3 ~ g1 ~",
  AJ: "g1@3 ~ g1 ~ g1@3 ~ g1@2 a1@2 ~@2 a1 ~ a1@3 ~ a1@2", AK: "d2@3 ~ d2 ~ d2@3 ~ d2@2 g1@2 ~@2 g1 ~ g1@3 ~ g1 ~",
  AL: "g1@3 ~ g1 ~ g1@2 ~@2 g1@2 d2@2 ~@2 d2 ~ d2@2 ~@2 d2@2",
  AM: "d2@3 ~ d2 ~ d2@2 ~@2 d2 ~ d2@3 ~ d2 ~ d2@2 ~@2 d2 ~", AN: "d2@3 ~ d2 ~ d2@2 ~@2 d2 ~ d2@3 ~ d2 ~ d2@3 ~ d2@2",
  AO: "e1@3 ~ e1 ~ e1@3 ~ e1 ~ e1@3 ~ e1@2 f#1@3 ~ e1@2", AP: "g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@3 ~ a1@2",
  AQ: "d2@2 ~@2 d2 ~ d2@3 ~ d2 ~ d2@3 ~ d2 ~ d2@3 ~ d2 ~", AR: "d2@3 ~ d2 ~ d2@3 ~ d2 ~ d2@3 ~ d2 ~ d2@3 ~ d2 ~",
  AS: "e1@2 ~@2 e1 ~ e1@3 ~ e1 ~ e1@3 ~ e1@2 f#1@4 e1 ~", AT: "g1@3 ~ g1 ~ g1@2 ~@2 g1@2 d2@2 ~@2 d2 ~ d2@4 a1@2",
  AU: "d2@2 ~@2 d2 ~ d2@3 ~ d2@2 g1@2 ~@2 g1 ~ g1@2 ~@2 g1 ~",
  AV: "g1@3 ~ g1 ~ g1@2 ~@2 g1 ~ a1@2 ~@2 a1 ~ a1@3 ~ a1@2", AW: "g1@3 ~ g1 ~ g1@2 ~@2 g1@2 d2@3 ~ d2 ~ d2@3 ~ a1@2",
  AX: "d2 ~@3", AY: "g1@2 a1 b1@2 d2@6 ~", AZ: "g1@4 a1@2 b1@4 d2@11 ~@3", BA: "d2@7 ~@17", BB: "g1@2 a1 b1@2 a1@6 ~",
  BC: "d2@3 ~@5", BD: "g1@3 ~ a1@2 b1@4 d2@9 ~@5", BE: "g1@3 ~ g1 ~ g1@3 ~ g1@2 a1@3 ~ a1@2 a1@3 ~ a1@2",
  BF: "g1@3 ~ g1 ~ g1@3 ~ g1@2 d2@3 ~ d2@2 d2@4 a2@2",
  BG: "[g1@3 ~ g1 ~ g1@3 ~ g1@2 d2@3 ~ a1@2 a#1@4 b1@6 b1 ~ b1@3 ~ b1@2 b1@3 ~ b1 ~ b1@3 ~ b1 ~]/2",
  BH: "[b1@3 ~ b1 ~ b1@3 ~ b1 ~ b1@2 ~@2 b1@2 a#1@3 ~ b1@5 ~ b1 ~ b1@3 ~ b1 ~ b1@2 ~@2 b1 ~ b1@3 ~ b1 ~]/2",
  BI: "[b1@3 ~ b1 ~ b1@3 ~ b1 ~ b1@3 ~ b1@2 a#1@3 ~ b1@5 ~ b1@2 b1@3 ~ b1 ~ b1@3 ~ b1 ~ b1@3 ~ b1 ~]/2",
  BJ: "b1@3 ~ b1 ~ b1@3 ~ b1 ~ b1@4 f#1@2 a1@4 b1@2", BK: "a1@3 ~ a1 ~ a1@3 ~ a1 ~ a1@3 ~ a1 ~ a1@3 ~ a1 ~",
  BL: "a1@5 ~ a1@6 a1@5 ~ a1@5 ~", BM: "g1@3 ~ g1 ~ g1@3 ~ g1@2 d2@3 ~ d2 ~ d2@3 ~ d2 ~",
  BN: "g1@3 ~ g1@2 g1@3 ~ g1@2 d2@3 ~ d2 ~ d2@2 b1@2 a1@2", BO: "d2@3 ~ d2 ~ d2@3 ~ d2 ~ g1@3 ~ g1@2 g1@3 ~ g1 ~",
  BP: "g1@3 ~ g1 ~ g1@3 ~ g1 ~ a1@4 a1 ~ a1@3 ~ a1@2", BQ: "d2@3 ~ d2 ~ d2@3 ~ d2@2 g1@3 ~ g1@2 g1@4 g1@2",
  BR: "g1@3 ~ g1@2 g1@3 ~ g1@2 d2@3 ~ d2 ~ d2@4 a1@2", BS: "g1@3 ~ g1@2 g1@3 ~ g1 ~ a1@3 ~ a1 ~ a1@3 ~ a1@2",
  BT: "d2@3 ~ d2 ~ d2@3 ~ d2@2 g1@3 ~ g1@2 g1@3 ~ g1 ~", BU: "g1@3 ~ g1 ~ g1@3 ~ g1 ~ d2@3 ~ d2 ~ d2@3 ~ a1@2",
  BV: "[g1@5 d2@13 ~@6]/2",
})).s("gm_fretless_bass").gain(0.49)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@5 A B@2 C D E F G D E F G ~@8 H I J K L M N O D E F G D E F G D E F G D E F G H I J K H M N O D E F G D E F G ~@8 D
  E F G D E F P ~@8 D E F G D E F G D E F G D E F G D E F G D E F Q ~
>`.pickRestart({
  A: "d3@3 ~ d3@2 [d3,a3]@3 ~ d3@2 [d3,a3]@4 d3@2 [d3,a3]@4 d3@2", // D5
  B: "[d3@3 ~ d3@2 [d3,a3]@4 d3@2 d3@4 a3@2 a3@2 ~@4 d3@3 ~ [d3,a3]@2 [d3,a3]@4 [d3,a3]@2 [d3,a3]@4 d3@2 [d3,a3]@4 [d3,a3]@2, ~@4 d3!2 ~@6, ~@11 a3@2 ~@11]/2", // D5
  C: "[d3,a3]@4 [d3,a3]@2 [d3,a3]@4 d3@2 [d3,a3]@4 d3@2 [d3,a3]@3 ~ [d3,a3]@2", // D5
  D: "f#4@4 f#4@2 ~@4 g4@2 g4@4 [d4,g4]@2 [b3,d4,g4]@3 ~@3, [a3,d4]@3 ~@2 b3@4 ~@3, ~@5 d4@3 ~@4", // G5 G D5
  E: "[d4,g4]@4 [d4,g4]@2 ~@4 a4@2 a4@4 [e4,a4]@2 [e4,a4]@3 ~@3, b3@6 ~@4 c#4@11 ~@3, ~@5 e4@3 ~@4", // G5 A5
  F: "[a3,d4,f#4]@2 [a3,d4,f#4] ~@2 g4 g4@2 [d4,g4]!2 ~@2, ~@10 b3@11 ~@3, ~@5 d4@3 ~@4", // D G5
  G: "[b3,d4,g4]@4 [d4,g4] ~@5 [d4,f#4]@6 [d4,f#4]@2 [a3,d4,f#4]@4 [d4,f#4]@2, ~@5 a3@4 ~@3", // G G5 D
  H: "~@2 [a3,d4] ~@3 a3@4 [a3,d4]@6 [a3,d4] ~@7, ~@6 d4 ~@17", // D5
  I: "~@2 [a3,d4] ~@3 d4 e4@3 [a3,d4]@6 [a3,d4]@2 ~@6, ~@3 a3@2 ~@7", // D5
  J: "~@2 [b3,d4] ~@3 [b3,d4] e4@3 [b3,d4]@6 [b3,d4] ~@7", // Bm
  K: "~@2 [b3,d4] ~@3 d4 e4@3 [b3,d4]@6 [b3,d4] ~@7, ~@3 b3@2 ~@7", // Bm
  L: "~@2 [a3,c#4] ~@3 a3@4 [a3,d4]@6 [a3,d4] ~@7, ~@6 d4 ~@17", // A D5
  M: "~@2 [a3,d4] ~@3 a3@4 [a3,d4]@6 [a3,d4]@2 ~@6, ~@6 d4 ~@17", // D5
  N: "~@2 [b3,d4] ~@3 [b3,e4]@4 [b3,d4]@6 [b3,d4] ~@7, ~@6 d4 ~@17", O: "[b3,d4]@4 [b3,d4] ~@5 [f#3,a3,d4]@12 ~@2",
  P: "[b3,d4,g4]@4 [d4,g4] ~@5 [d4,f#4]@6 [d4,f#4]@2 [a#3,c#4,f#4]@4 [d4,f#4]@2, ~@5 a3@4 ~@3", // G G5 D F# D
  Q: "[b3,d4,g4]@4 [d4,g4] ~@5 [a3,d4,f#4]@13 ~", // G G5 D
})).s("gm_electric_guitar_clean").gain(0.28).pan(0.7)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@5 A B ~ C D E F G D E F G ~@8 H ~ I ~ H@2 ~@2 D E F G D E F G D E F G D E F G H ~ I ~ H@2 ~@2 D E F G D E F G ~@8 D
  E F G D E F J ~@8 D E F G D E F G D E F G D E F G D E F G D E F G ~
>`.pickRestart({
  A: "a3@3 ~ a3@2 ~@4 a3@2 ~@4 a3@2 ~@4 a3@2", B: "a3@3 ~@9 a3@4 ~@4 a3@2 ~@2", C: "~@8 a3 ~@3", D: "~@10 g3@11 ~@3",
  E: "~@10 a3@11 ~@3", F: "~@6 g3 g3@3 ~@2", G: "~@10 f#3@13 ~", H: "~@7 e4@3 ~@14", I: "~@5 g3@3 ~@4",
  J: "~@10 f#3@7 ~@7",
})).s("gm_electric_guitar_clean").gain(0.08).pan(0.7)

// other · recorder
const recorder = note(`<
  ~@9 A B@2 ~ A C@2 ~@20 D ~@3 E A F@2 ~ A G@2 ~@7 H I ~@3 J ~@3 J ~@27 J ~@3 J A F@2 ~ A K@2 ~ L@2 M N O P Q R@2
>`.pickRestart({
  A: "a3@3 b3@2 a3 d4@3 e4@2 d4", B: "[f#4@10 e4@6 d4@2 b3@4 d4@8 b3@4 a3@5 ~@9]/2",
  C: "[[f#4,a4,d5]@5 [e4,a4,c#5]@3 [d4,f#4] [b3,e4]@2 [d4,f#4,a4]@4 [b3,e4,a4]@2 [a3,d4,g4]@3 ~@4, ~@8 a4@3 ~@13]/2", // D A D E5 D Esus4 Dsus4
  D: "g4@10 f#4@13 ~", E: "g4@10 f#4@9 ~@5", F: "[f#4@5 e4@3 d4 b3@2 d4@4 b3@2 a3@3 ~@4]/2",
  G: "[[f#4,a4,d5]@10 [e4,a4,c#5]@6 [d4,f#4]@2 [b3,a4]@4 [d4,f#4,a4]@8 [b3,e4,a4]@4 [a3,d4,g4]@7 ~@7, ~@16 a4 ~ e4@3 ~@27]/2", // D A D B7 D Esus4 Dsus4
  H: "~@6 b4@4 b4 ~ b4@4 a4 ~ b4@5 ~", I: "b4@10 a4@11 ~@3", J: "g4@10 f#4@11 ~@3",
  K: "[[f#4,a4,d5]@5 [e4,a4,c#5]@3 [d4,f#4] [b3,e4,a4]@2 [d4,f#4,a4]@4 [b3,e4,a4]@2 [a3,d4,g4]@3 ~@4, ~@16 a4 ~@31]/2", // D A D Esus4 D Esus4 Dsus4
  L: "a3@3 b3@2 a3 d4@3 b3@3", M: "a3@3 b3@2 a3 e4@3 d4@3",
  N: "a3@3 b3@2 a3 [f#4,a4,d5]@3 [e4,b4]@2 [d4,f#4,a4], ~@6 g4 ~", O: "a3@6 b3@4 a3@2 d4@6 b3@5 ~",
  P: "a3@3 b3@2 a3 d4@3 b3@2 ~", Q: "a3@6 b3@4 a3@2 e4@6 d4@5 ~", R: "[[b3,d4,g4]@5 [a3,d4,f#4]@13 ~@6]/2",
})).s("gm_recorder").gain(0.35)

// chords · recorder
const recorder_2 = note(`<
  ~@33 A B C ~ A B C ~@17 A B C ~ D B E ~@2 F@2 ~@2 G@2 ~@10 H@2 I@2 ~@3 A B E ~ D B E ~@18
>`.pickRestart({
  A: "~@18 [a3,d4,f#4]@3 ~ [b3,d4,f#4,a4]@2", B: "~@16 [f#3,f#4]@3 ~ [e3,e4]@4", C: "d4 ~@3, d3 ~@5",
  D: "~@9 [a3,d4,f#4]@2 [b3,d4,f#4,a4]", E: "[d3,d4] ~@3", F: "[~@8 [d5,f#5,a5] [e5,g5,b5]@2 [f#5,a5,d6]@3 ~@10]/2",
  G: "[~@16 [d5,f#5,a5]@2 [e5,g5,b5]@4 [f#5,a5,d6]@5 ~@21]/2", // D Em D
  H: "[~@6 [f#4,a4]@4 ~@2 [f#4,a4]@3 ~ [e4,g#4]@4 ~@2 [d4,f#4]@8 ~@18]/2", // F#m E D
  I: "[~@12 [f#4,a4]@4 ~@2 [f#4,a4]@3 ~ [e4,g#4]@5 ~ [d4,f#4]@7 ~@13]/2", // F#m E D
})).s("gm_recorder").gain(0.35)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@8 A@2 ~@10 B C D@2 E ~@3 B C ~@17 F G ~@16 H I H J K L M N ~@2 O@2 P Q R S@8 T ~@25
>`.pickRestart({
  A: "[~@2 d4 [d3,d4]@2 [d3,d4] [a3,d4]@2 d4 d4@2 ~ a3@8 ~@4, d3@3 a3@3 d3@5 [d3,d4]@9 ~@4, ~@2 a3 ~@3]/2", // D D5 D
  B: "[a4,d5]@2 [a#4,b4,d#5,e5]@2 [b4,e5]@2 ~ [a#4,d#5]@2 [a4,d5]@3 [e4,a4]@2 f#4@2 ~@3 a#4 [e4,a4]@2 a4 ~, ~@6 [b4,e5]@2 ~@6 f4 ~ b4@2 b4@2 ~@4, ~@17 f#4@2 ~ f4 ~@3", // D5 Emaj7 E5 D#5 D5 A5 E5
  C: "[d3,a3,d4]@13 ~@11", D: "[~@16 [f#4,b4]@2 [f4,a#4] e4@3 [e4,f4,a4,a#4] [f#4,b4]@21 ~@2 a4 ~, ~@6 a4 ~@9]/2",
  E: "f#4@4 e4@2 b3@4 d4@11 ~@3", F: "[a3,d4]@4 [d4,f#4] ~@5 [g4,d5]@6 [g4,d5]@4 ~@4, f#4 ~@7",
  G: "g4@2 f#4 g4 ~ d4 d4@6, ~@2 d4@3 ~@7, ~ f#4@2", H: "[d3,a3,d4] ~@2", I: "f#2@3 ~ a2@2 b2@3 ~ d3@10 ~@4",
  J: "g2@3 ~ a2@2 b2@3 ~ d3@8 ~@6", K: "[d3,a3,d4]@7 ~@17", L: "g2@4 a2 ~ b2@3 ~ a2@11 ~@3", M: "[d3,a3,d4] ~@3",
  N: "g2@3 ~ a2@2 b2@3 ~ d3@12 ~@2", O: "[~@22 f5@4 d5@2 b4 ~ e5@3 ~ d5@9 ~@5]/2", P: "g5@3 ~@3 g5@3 ~ g5@9 ~@3 d5@2",
  Q: "f#5@3 ~ d5 ~ a5@3 ~ a5@8 ~@6", R: "g5@3 ~@3 g5@3 ~ g5@6 ~@6 f5@2",
  S: "[~@2 d5@2 b4@2 e5@3 ~ d5@4 ~@2 a2@2 a#2@3 ~@19 d4@4 ~@4 [a3,d4]@16 a2@2 a#2@4 ~@18 d4@4 ~@4 d4@4 [a3,d4]@12 a2@2 a#2@3 ~ b2@18 d4@3 ~@21 a2@2 b2@3 ~@7 [e3,a3]@20, ~@22 b2@41 ~@7 b2@41 ~@33 d4@18 ~@30, ~@44 a3@6 ~@18 a3@12 ~@3 a2@13]/8", // D5 A5
  T: "[e3,a3,c#4]@3 ~@7 [a2,e3,a3,c#4]@14", // A
})).s("gm_overdriven_guitar").gain(0.32).pan(0.3)

// chords · overdriven guitar · "OVERDRIVE" · soft notes
const overdriven_guitar_soft = note("<~@8 A ~@11 B ~ C ~@5 B ~@18 D ~@29 E ~@3 F ~@3 G@2 ~ H ~@25>".pickRestart({
  A: "a3@2 a3 ~@9", B: "~@14 b4 ~@9", C: "~@22 f#4 ~", D: "~@4 d4 ~", E: "~@20 e4 ~@3", F: "~@2 a3",
  G: "[~@2 b2@3 ~]/2", H: "~@5 f4@2 ~@5",
})).s("gm_overdriven_guitar").gain(0.16).pan(0.3)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar_2 = note("<~@77 A B C@2 ~@33>".pickRestart({
  A: "a4@3 ~@3 a4@4 b4@10 ~@4", B: "b4@3 ~@3 c#5@3 ~ c#5@8 ~@6",
  C: "[a4@3 ~@3 a4@3 ~ b4@11 ~ b4@4 a4@2 f#4 ~ b4@2 ~@2 a4@12 ~@2]/2",
})).s("gm_overdriven_guitar").gain(0.32).pan(0.6)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar_3 = note("<~@73 A B C@2 A B C@2 ~@33>".pickRestart({
  A: "e4@3 ~@3 e4@4 d4@12 b3@2", B: "d4@6 e4@2 ~@2 e4@6 d4@2 b3@3 ~ a3@2",
  C: "[e4@2 ~@4 e4@3 d4@9 ~@4 f4@4 ~@2 b3 ~ e4@2 ~@2 d4@10 ~@4, ~@27 d4@2 ~@19]/2",
})).s("gm_overdriven_guitar").gain(0.49)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A B A@3 B A@3 B A C A B A B A B A@5 B A B A@3 B A@3 B A@3 B A@3 D A@3 B A B A B A C A B A@3 B A@2 E F@5 C F A B
  A@3 D A G H B H B H B A ~ A B A@3 B A@3 B A@13 F ~
>`.pickRestart({
  A: "x!2", B: "x ~@5 x ~@4 x", C: "x", D: "x ~@4 x!2 ~@4 x", E: "x ~@4 x!2 ~@5", F: "x ~@4 x ~@6", G: "x ~@10 x",
  H: "~ x",
})).gain(0.49)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B@3 C B@3 D B@3 E B@7 D B@7 F B@3 D B@3 C B@3 D B@3 G B@7 E B@3 D B@3 C B H B H I H J I B@3 K B@11 L B@3 M B@3 N
  B@3 D B O B P B O B M B O B ~@2
>`.pickRestart({
  A: "~@2 x", B: "~ x ~ x", C: "~@3 x ~@4 x!4", D: "~@3 x ~@3 x ~ x ~@2", E: "~@3 x ~@2 x!6", F: "~@3 x ~@3 x!5",
  G: "~@3 x ~@2 x ~ x!4", H: "~@3 x ~@4 x ~@3", I: "~@3 x ~@4 x!2 ~@2", J: "~@11 x", K: "~@3 x ~@3 x ~ x ~ x",
  L: "x!12", M: "~@3 x ~@5 x!3", N: "~ x ~ x ~@3 x!5", O: "~@3 x ~@5 x ~ x", P: "~ x ~ x ~@3 x ~ x ~ x",
})).gain(0.38)

// drums · low tom
const low_tom = s("lt").struct("<~@66 A ~ A ~ A ~@9 B ~@33>".pickRestart({
  A: "~@11 x", B: "~@2 x",
})).gain(0.49)
// … 68 more lines

More by Katrina and the Waves