Strudelify

Roxanne

Michael George

KeyB minorTempo80 bpm
0:00/0:00
// Roxanne — Michael George
// 80 bpm, 4/4, key B 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 83 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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.

// bass · acoustic bass
const bass = note(`<
  ~ A B A C D E F G H I@2 ~ J K L M N O P Q R S L T U V W X Y Z AA AB AC AD AE AF AG@4 AH AI AJ AK AL AM AN AO AP AQ AR
  AS AT AU AV AW AX AY AZ BA BB BC BD@2 BE BF@2 BG L BH@2 BI BJ BK@2 BL BM BN@2 BO@3
>`.pickRestart({
  A: "b1@6 ~@4 f#2@2 b2@9 ~@3", B: "b1@6 e3@4 d3@2 c#3@4 a2@2 f#2@5 ~", C: "b1@3 e3@2 d3 c#3@2 a2 f#2@2 c#2",
  D: "b1@10 f#2@2 b2@7 ~ f#2@2 b2@2", E: "a2@3 ~ a1@6 e2@2 a2@8 ~@2 a2@2", F: "g2@4 e2 d2 g1@5 e1",
  G: "f#1@4 c#2 e2 f#2@4 d2 d#2", H: "e2@4 d2 b1 e1@3 e2@3", I: "[a1@11 ~ a2@6 a1@4 b1@26]/2",
  J: "b1@4 ~ b1 d2@3 f#2@2 b2", K: "a2@5 d2 a1@5 a2", L: "g1@5 d2 g2@6", M: "f#1@5 ~ c#2@3 f#2@3", N: "e2@5 b1 g1@6",
  O: "a1@5 e2 a2@3 a1@3", P: "b1 ~ f#1 b1", Q: "~ f#1@3", R: "b1@5 c#2 c#2@4 c#2 b1", S: "a1@3 a2@2 e2 a1@3 a2@2 a1",
  T: "f#1 a2 f#2 b2@2 b2@2 a2 f#2 e2 d2 b1", U: "e1@3 ~@2 e1 e2@3 g1@2 g#1", V: "a1@5 g2 a2@3 a1@3",
  W: "b1@5 f#1 b1@5 ~", X: "e3@3 d3@2 b2@3 f#2@3 e2", Y: "e1@5 e1 g1@2 e1 g1@3", Z: "a1@5 e2 a2@4 f#2 e2",
  AA: "b1@4 ~ e2 f#2@3 a1@3", AB: "b2@4 c#3 d3 b2@3 f#2@3", AC: "e1@2 e1!2", AD: "a1@5 e2 a2@3 ~ f#2 d2",
  AE: "b1 b2@2 b1", AF: "e2", AG: "[b1@10 f#2@2 b2@22 f#2@2 b1@22 f#2@2 b2@22 a2@2 f#2@4 d2@2 a1@3 ~ f#1@2]/4",
  AH: "b2@5 ~ f#2@2 b2@3 a#2", AI: "a2@4 ~ a2 a1@2 a2@3 d2", AJ: "g1@9 ~ d2@2 g2@9 ~ e2 ~",
  AK: "f#2@4 a2@4 f#2 ~ c#2 ~ a1@4 f#1@6 ~@2", AL: "e1@11 ~ e2@5 ~ b1@6", AM: "a1@10 e2 ~ a2@6 a1@5 ~", AN: "b1",
  AO: "~@3 f#3@7 ~@2", AP: "b1@2 f#2 b2", AQ: "d2 ~ d2 ~ d2@4 d3@2 d3@2 e3@8 ~@4", AR: "g1@9 ~ g1@2 d2@6 g1@6",
  AS: "e3@4 a3@4 f#3 ~ c#3 ~ f#3@6 ~@2 d3 ~ a2@2", AT: "g2@8 d2 ~ b1 ~ g1@10 d2 ~", AU: "g2@5 ~ f3@11 ~@5 b1 ~",
  AV: "~ b1@5", AW: "b2@9 ~@2 f#1", AX: "e1@4 ~ e1@3 e1@3 b1", AY: "a1@5 b1 d2@2 b1 a1@3",
  AZ: "b1@6 ~@2 f#2@2 a2 ~ a2@2 ~@2 a2@6 f#2@2", BA: "e2@2 ~@2 d2@4 b1 ~ a#1@2 a1@4 f#1@4 e1@2 f#1@2",
  BB: "e2@8 d2 ~ b1@2 g1@6 b1@4 d2 ~", BC: "a1@9 ~ e2 ~ a2@6 ~@2 d2@2 a1 ~", BD: "[b1@6 b2@3 ~ b1@8 b1@28 f#2@2]/2",
  BE: "g1@7 ~@3 d2@2 g2@3 ~ g2@4 d2@2 e2@2", BF: "[f#1@6 c2@5 b1@5 c#2 d2 f#2@2 a2@2 f#2 a2]/2",
  BG: "b2@4 a2 f#2 e2@2 d2@2 b1 a1", BH: "[f#1@6 c2@5 b1@4 ~@2 a3@7]/2", BI: "~@2 e3@5 ~ b1@4",
  BJ: "g2@7 ~ d2@2 b1@2 g1@4 g2@4 e2@2 f2@2", BK: "[f#2@7 ~@5 c2@9 ~ b1@5 ~ b1@2 b2@4 d2@2 e2@3 ~ f#2@2 a2@4 b2@2]/2",
  BL: "b1@3 ~ b1@2 d2@4 e2@2 f#2@4 d2@2 b2@4 a2@2", BM: "g2@4 d2 b1 g1@6", BN: "[f#1 c2@3]/2", BO: "[a#1 b1@8]/3",
})).s("gm_acoustic_bass").gain(0.4)

// other · trumpet
const trumpet = note(`<
  A B@4 C@3 D E F@3 ~@16 G H I@2 G H J@2 K@4 L M N D E O L P L M N O Q R S@2 T U Q V T U ~@2 W X@3 Y X@3 W X@3 Z AA@2
  AB@3
>`.pickRestart({
  A: "d#4", B: "e4/2", C: "[~ b4@2 c#5@2 d5]/3", D: "e5@6 a4@5 ~", E: "f#4 a4", F: "[c#5@6 a4@5 b4@24 ~]/3", G: "f#4",
  H: "e4@3 ~ f#4@2 ~@4 a4@14", I: "[b4@47 ~]/2", J: "[~@5 d#4, b4]/2", K: "[e4@47 ~]/2", L: "b4", M: "c#5", N: "d5",
  O: "c#5@6 a4@5 ~", P: "~ a4@3", Q: "b4 a4", R: "d5@6 e5@5 d5", S: "[~ d5@11]/2", T: "b4@23 ~",
  U: "a4@4 a4 ~@5 a4@13 ~", V: "f#4@2 e4 d4", W: "[a4,c#5]@3 ~ [a4,c#5] ~@11 [a4,c#5] ~@7",
  X: "[a4@11 ~ a#4@10 [f#4,b4]@45 ~@5]/3", Y: "[a4,c#5]", Z: "[a4,c#5,e5]@3 ~ [a4,c#5,e5] ~@11 [a4,c#5,e5] ~@7",
  AA: "[a4@11 ~ a#4@36]/2", AB: "[[f4,a#4] [f#4,b4]@6 ~@2]/3",
})).s("gm_trumpet").gain(0.1).pan(0.8)

// chords · clarinet
const clarinet = note(`<
  A B@4 C D@2 E F G@3 ~@16 H I J@2 H I K@2 L@4 C D@2 E F C D M C D@2 E F N@3 D O P Q D O R@2 S T@3 U T@3 V T@3 W X@2 Y@3
>`.pickRestart({
  A: "c5", B: "c#5/2", C: "e4", D: "f#4", E: "a4", F: "g4", G: "[e4@11 f#4@24 ~]/3", H: "d4",
  I: "c#4@3 ~ d4 ~@5 c#4@14", J: "[d4@47 ~]/2", K: "[~@5 c5, d4]/2", L: "[c#5@47 ~]/2", M: "~ e4@3",
  N: "[g4@6 f#4@5 f#4@2 ~ f#4@22]/3", O: "e4@4 f#4 ~@5 e4@13 ~", P: "b4 a4", Q: "f#4@12 e4@6 d4@5 ~", R: "d4/2",
  S: "[e4,a4]@3 ~ a4@2 ~@10 a4@2 ~@6, ~@4 e4 ~@11 e4 ~@7", T: "[e4@12 d4@10 e4@47 ~@3, a4@22 a4 ~@49]/3", U: "[e4,a4]",
  V: "~@2 a4 ~@5 a4 ~@3, ~@4 e4 ~@11 e4 ~@7", W: "a4 ~ a4 ~@5 a4 ~@3, e4 ~@3 e4 ~@11 e4 ~@7",
  X: "[[e4,a4] [d4,a#4]@3]/2", Y: "[[c#4,g#4] [d4,a4]@6 ~@2]/3",
})).s("gm_clarinet").gain(0.08).pan(0.6)

// chords · piano
const piano = note(`<
  A B C D E F G H I J K@3 F L H M N@2 O P Q R S T U V W@2 X Y Z@2 AA AB AC@2 AD@3 AE AF AG H AH AI AJ O P F AK AL AM AN
  AO AP@3 Y AQ@2 AR Y AS@2 AT AU@3 AV AW@3 AT AX@3 AY AZ@2 BA@3
>`.pickRestart({
  A: "[a#3,c#4,d#4,f4,g#4,c5]", B: "[b3,d4,e4,f#4,a4,c#5]", C: "[f#3,b3,d4,e4,f#4,a4]", D: "[b3,d4,f#4,a4,c#5]@3 ~",
  E: "[d4,e4,f#4,a4,b4,c#5,e5]", F: "[b2,f#3,a3,b3,d4]", G: "~@3 f#4, [a2,d3,f#3,a3,b3]", H: "[g2,d3,f#3,g3,b3]",
  I: "[f#2,e3,a3,b3,c#4]", J: "[e2,e3,g3,a3,b3,d4]", K: "[~@6 b4@5 [b2,d3,f#3,a3,b3]@24 ~, [a2,d3,e3,a3,b3]@11 ~@25]/3",
  L: "[a2,d3,f#3,a3,b3]", M: "~ e4, [f#2,e3,a3,b3,c#4]",
  N: "[~ [a2,d3,e3,g3,b3], [e2,b2,g3,a3,b3,d4]@25 ~@23, ~@5 g4@8 ~@11]/2", O: "[b2,f#3,a3,d4,f#4,b4]",
  P: "~ [f#2,c#3,a#3,c#4,e4,a4]@3", Q: "~ d5, [b2,f#3,a3,d4,f#4,b4]", R: "[a2,f#3,d4,f#4,a4,c#5]",
  S: "[g2,d3,g3,d4,f#4,b4]", T: "[f#2,c#3,f#3,b3,c#4,e4,a4]", U: "[e2,b2,e3,b3,d4,e4,a4]", V: "[a2,e3,a3,b3,d4,e4,a4]",
  W: "[a4@3 a4, [b2,f#3,b3,d4,f#4,b4]]/2", X: "[e2,b2,e3,g3,b3,d4,e4,f#4]", Y: "[a2,e3,a3,b3,c#4,e4,a4]",
  Z: "[b2,f#3,b3,d4,f#4,a4,b4]", AA: "a4!2, [e2,b2,e3,b3,d4,e4]", AB: "~ a4, [a2,e3,a3,d4,e4,f#4,b4]",
  AC: "[[b2,f#3,b3,d4,e4,f#4,b4]@39 ~ [a#3,c#4,d#4,f4,g#4,c5,d#5]@8]/2", AD: "[b3,d4,e4,f#4,a4,b4,c#5,e5]",
  AE: "~ a5, [b3,d4,e4,f#4,a4,b4,c#5,e5]", AF: "[b2,d3,f#3,a3,b3]", AG: "[a2,d3,a3,b3,c#4]",
  AH: "~ a5, [f#2,e3,a3,b3,c#4]", AI: "[e2,b2,g3,a3,b3,d4]", AJ: "[a2,d3,e3,g3,b3]", AK: "[d2,d3,f#3,b3]",
  AL: "[e2,b2,e3,g3,a3,b3,d4]", AM: "[f#2,c#3,f#3,b3,c#4,e4,a4]@23 ~", AN: "[g2,d3,g3,d4,e4,f#4,b4]",
  AO: "[g2,d3,g3,e4,f#4,a4,c#5]@12 [f#2,c#3,f#3,a#3,e4,a4]@10 [b2,d3,f#3,a3,d4,f#4,a4,c#5] ~", // Dmaj7 F#7 Bm7
  AP: "[~ [a4,c#5]@5 ~@6 [e2,b2,e3,g3,a3,b3,d4]@6, ~ [d3,f#3,f#4]@12 ~@5, ~ [b2,a3,d4]@11 ~@6, ~ [a4,c#5,e5]@2]/3", // A Em7 D Bm7 A
  AQ: "[[d4,f#4]@5 ~@9 d4@4 d4@3 [d4,e4]@3, [b2,f#3,b4], [b3,e4]@9 a3@5 e4@7 ~@3, ~@5 f#4@13 [a3,f#4]@6, ~@5 d4@9 [b3,a4]@10]/2", // D Dsus2 B5 E5 D B7
  AR: "[e2,b2,e3,a3,b3,d4,e4]", AS: "[b4@40 b4@5 ~@3, [b2,f#3,b3,d4,e4,a4]@23 ~]/2",
  AT: "[g2,d3,f3,b3,e4,a4,c#5]@3 ~ [d3,f3,b3,e4,c#5] ~@11 [g2,d3,f3,b3,e4,a4,c#5]@2 ~@6, ~@2 [g2,a4] ~@9", // G7 Bdim G7 Gsus2
  AU: "[[f#2,c#3,f#3,a#3,c#4,e4,a4]@12 [c3,g3,a#3,d4,e4]@9 ~@43 b4@4 b4@4, ~@11 [b2,f#3,a3,b3,d4,f#4]@24 ~]/3", // F#7 C7 Bm7
  AV: "[g2,d3,f3,b3,e4,a4,c#5]", AW: "[[f#2,c#3,f#3,a#3,c#4,e4,a4]@6 [c3,g3,a#3,d4,e4]@5 [b2,f#3,a3,b3,d4,f#4]@24 ~]/3",
  AX: "[[f#2,c#3,f#3,a#3,c#4,e4,a4]@12 [c3,g3,a#3,d4,e4]@9 ~@47 f#5@2 ~@2, ~@11 [b2,f#3,a3,b3,d4,f#4]@24 ~, ~@30 [e5,c#6]@5 ~, ~@32 a5@3 ~]/3", // F#7 C7 Bm7 C#m
  AY: "[g2,d3,f3,b3,e4,a4,c#5]@3 ~ [d3,f3,b3,e4,c#5] ~@13 [g2,d3,f3,b3,e4,a4,c#5]@2 ~@4, ~@2 [g2,a4] ~@9", // G7 Bdim G7 Gsus2
  AZ: "[[f#2,c#3,f#3,a#3,c#4,e4,a4] [c3,g3,a#3,d4,e4]@3]/2", // F#7 C7
  BA: "[[a#3,c#4,f4,g#4,c5,d#5] [b3,e4,f#4,a4,c#5,e5]@6 ~@2]/3", // A#m7 F#m7
})).s("gm_piano").gain(0.24)

// other · taiko drum
const taiko_drum = note("<~@28 [~@14 d6 ~@3 f5 ~@3 c5 ~] ~@27 [~@20 f5 ~ a4 ~] ~@26>").s("gm_taiko_drum").gain(0.35)

// chords · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~ A B C D E F G H I J@3 K@2 L@4 M@8 N@5 O@5 P@2 Q R@3 S@8 T@6 U@8 V@7 W@8 X@3
>`.pickRestart({
  A: "a3 ~@2 [f#3,a3,d4] ~@2 a3 ~@2 [a3,d4] ~@2", B: "[a3,c#4] ~@2 [f#3,a3,c#4] ~@2 a3 ~@2 [f#3,a3,c#4] ~@2",
  C: "[f#3,a3,d4] ~@2 [f#3,a3,d4] ~@2 d4 ~@2 [f#3,a3,d4] ~@2", // D
  D: "[f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2 a3 ~@2 [f#3,a3,c#4] ~@2", E: "[f#3,b3,d4] ~@2 [f#3,b3,d4] ~@5 [f#3,d4] ~@2",
  F: "~@3 [a3,d4,f#4] ~@2 a3 ~@2 [a3,d4,f#4] ~@2", G: "[b3,d4,f#4] ~@5 [b3,d4]@2 ~@10 [b3,d4,f#4]@2 ~@4",
  H: "[a3,e4]@2 ~@4 [a3,c#4,e4]@2 ~@10 [a3,c#4,e4] ~@5", I: "[b3,d4] ~@2 [b3,d4] ~@2 b3 ~@2 [g3,b3,d4] ~@2",
  J: "[[g3,d4]@2 ~@4 [g3,a3,d4]@2 ~@4 a3@2 ~@4 [g3,a3,d4] ~@3 [f#3,b3,d4]@48 ~@2]/3", // G5 Gsus2 Bm
  K: "[~ [f#3,b3,d4]@2 d4@2 [a3,d4,f#4]@2 [a3,d4,f#4], ~@3 [f#3,b3]@5]/2", // Bm D B5
  L: "[~ [b3,d4,f#4]@2 ~@2 [a3,c#4,e4]@2 ~@2 [g3,b3,d4]@2 [b3,d4]@2 [a3,b3,d4]@2 [a3,b3,d4], ~@3 f#4@8 ~@5, ~@3 [b3,d4]@6 ~@2 g3@5, ~@7 [c#4,e4]@8 ~, ~@7 a3@6 ~@3]/4", // Bm A G Bm Bm7 Bm C#m
  M: "[~ [b3,d4,f#4]@2 ~@2 f#3@4 [f#3,b3,d4]@2 d4@2 [a3,d4,f#4]@2 ~@2 [g3,b3,f#4]@2 ~@2 [a3,c#4,e4]@2 ~@2 [g3,b3,d4]@2 [b3,d4]@2 [a3,b3,d4]@2 [a3,b3,d4], ~@3 f#4@8 b3@6 ~@2 f#4@8 ~@5, ~@3 [b3,d4]@6 ~@2 f#3@8 [g3,b3]@6 ~@2 g3@5, ~@5 [a#3,c#4,e4]@8 ~@2 d4@8 [c#4,e4]@8 ~, ~@15 a3@6 ~@2 a3@6 ~@3]/8", // Bm D Gmaj7 A G Bm Bm7 Bm …
  N: "[~@5 [a3,d4,f#4]@4 ~@8 [d4,f#4]@10 [b3,d4,f#4]@6 [b3,d4]@6 [a3,b3,d4]@6 [b3,d4]@6 [f#3,d4]@6 [f#3,b3,d4]@3, ~ [b3,e4,g#4]@4 [e4,g#4]@8 ~@7, ~@9 [a3,d4,f#4]@8 a3@22 ~@6 a3@15, ~@5 b3@4 ~@2 f#4@8 ~]/5", // D Bm Bm7 Bm D Bm E D
  O: "[~ [f#3,b3,d4]@2 [b3,d4]@2 [b3,d4,f#4]@2 b3@2 [a3,b3,e4]@2 a3@2 [a3,c#4]@2 [f#3,a3,c#4]@5, ~@3 f#3@8 [b3,e4]@8 ~, ~@7 [d4,f#4]@8 ~@5]/5", // Bm Asus2 A F#m E5 D
  P: "[[b3,d4] [f#3,b3,d4] d4 f#3 ~ [f#3,a3,c#4] ~ [f#3,a3,c#4], ~@3 [b3,d4]@5]/2", // Bm F#m Bm
  Q: "[b3,d4] [f#3,b3,d4] ~ [f#3,b3,d4]", // Bm
  R: "[~ [f#3,a3,c#4] ~ f#3@2 [f#3,b3,d4]@2 d4@2 [a3,d4,f#4]@2 [a3,d4,f#4], ~@3 c#4@8 ~, ~ a3@2 ~, ~@7 [f#3,b3]@5]/3", // F#m Bm D B5
  S: "[~ [b3,d4,f#4]@2 ~@2 [a3,c#4,e4]@2 ~@2 [g3,b3,d4]@2 [b3,d4]@2 [a3,b3,d4]@2 [b3,d4]@2 [b3,d4,f#4]@2 ~@6 [a3,d4]@2 a3@2 [a3,e4]@2 [a3,e4], ~@3 f#4@8 ~@8 d4@6 ~@2 d4@5, ~@3 [b3,d4]@6 ~@2 g3@8 ~@2 [f#3,a#3,c#4,e4]@8 ~@3, ~@7 [c#4,e4]@8 ~@4 [b3,f#4]@8 ~@5, ~@7 a3@6 ~@2 a3@8 ~@9]/8", // Bm A G Bm Bm7 Bm D5 A5 …
  T: "[~@3 [b3,d4]@6 b3@6 [b3,c#4,e4]@6 b3@6 [a3,b3,d4]@6 d4@6 a#3@6 ~@2 [b3,d4]@3 [b3,d4]@22, ~@3 [a3,d4]@6 ~@2 a3@8 ~@5, ~@7 c#4@6 d4@2 [a#3,c#4]@8 ~, ~@7 e4@6 e4@8 ~@3, ~@33 b3@14 ~@25]/6", // Bm C#m7 Bm7 Bm D5 A#m
  U: "[~ [g3,b3,f#4]@2 b3@2 [a3,b3,c#4,e4]@2 [a3,b3]@2 [a3,b3,d4]@2 [a3,b3,d4]@2 [a3,b3,d4]@2 b3@2 [g3,b3,f#4]@2 b3@2 [b3,c#4,e4]@2 [a3,b3]@2 [a3,b3,d4]@2 [a3,b3,d4]@5, ~@3 [g3,f#4]@8 ~@4 a3@6 ~@11, ~@7 [c#4,e4]@8 d4@8 [c#4,e4]@8 ~, ~@19 [g3,f#4]@8 ~@5]/8", // Gmaj7 A Asus2 Bm7 Gmaj7 C#m7 Asus2 Bm7 …
  V: "[b3 [f3,b3,e4] [f3,e4] ~ [f#3,d4] [f#3,a#3,d4] ~@10 [f3,b3,e4]!3 ~ [f#3,a#3,d4]!3 [f#3,d4] [f#3,a3,b3,d4]!2 [f#3,a3,d4] [f#3,a3,b3,d4], ~@3 f3@8 ~@2 [b3,e4]@3 ~@3 [f3,e4]@8 ~, ~@3 [b3,e4]@6 [b3,e4,g#4]@4 g#4@8 ~@7, ~@18 [f#3,a#3]@23 d4@16 b3@15 ~@12, ~@18 d4@11 [a3,d4,f#4]@12 [a3,f#4]@24 ~@4 a#3@15]/7", // E Fmaj7 D F#aug E F#aug D Bm7 …
  W: "[[f#3,a3,b3] [f#3,a3,b3,d4]!2 b3 b3 [f3,b3,e4] [f3,e4] ~ [f#3,d4] [f#3,a#3,d4] ~@10 [f3,b3,e4]!3 ~ [f#3,a#3,d4]@8, ~@9 a3@21 d4@11 [a3,d4,f#4]@12 [a3,f#4]@24 ~@19, ~@9 [f#3,d4]@15 ~@6 [f#3,a#3]@23 d4@19 ~@24, ~@7 f3@8 ~@2 [b3,e4]@3 ~@3 [f3,b3,e4]@8 ~, ~@7 [b3,e4]@6 [b3,e4,g#4]@4 g#4@8 ~@7]/8", // B7 Bm7 E Fmaj7 D F#aug E F#aug …
  X: "[[f3,g#3,a#3,c#4] [f#3,a3,b3]@6 ~@2]/3", // A#m7 B7
})).s("gm_electric_guitar_jazz").gain(0.08).pan(0.6)

// chords · electric guitar jazz · soft notes
const electric_guitar_jazz_2 = note(`<
  ~ A B C D E F G H I J ~@11 K@2 ~@7 L ~@3 M ~ N O P O ~@21 Q ~@2 R S ~@4 T U R S ~@5 V@3
>`.pickRestart({
  A: "[f#3,d4] ~@5 [f#3,d4] ~@2 f#3 ~@2", B: "f#3 ~@5 [f#3,c#4] ~@5", C: "~@6 [f#3,a3] ~@5", D: "~@6 [f#3,c#4] ~@5",
  E: "~@6 [f#3,b3,d4] ~@2 b3 ~@2", F: "[a3,d4,f#4] ~@5 [d4,f#4] ~@5", G: "~@3 f#4 ~@2 [b3,d4,f#4] ~@5",
  H: "c#4 ~@5 [a3,c#4,e4] ~@5", I: "g3 ~@2 g3 ~@2 [g3,d4] ~@5", J: "a3 ~@5 [g3,d4] ~@5", K: "[~@3 f#4@2 ~@3]/2",
  L: "~ b3@2 ~", M: "~ f#3@2 ~", N: "f#3 ~ [f#3,b3] ~", O: "[f#3,a3,c#4] ~ [f#3,a3,c#4] ~", P: "f#3 ~ [f#3,b3,d4] ~",
  Q: "~ a3@2 ~", R: "[f3,e4] ~ b3 ~", S: "a#3 ~@3", T: "~@2 b3 ~", U: "d4 ~@3", V: "[~ d4@6 ~@2]/3",
})).s("gm_electric_guitar_jazz").gain(0.06).pan(0.6)

// chords · tenor sax
const tenor_sax = note(`<
  A B@4 C@2 D E C F@3 ~@16 G H I@2 G H J@2 K@4 C@2 D E C L C M C@2 D E D N O@2 C P Q@2 R P S T U V@3 W V@3 X V@3 Y Z@2
  AA@3
>`.pickRestart({
  A: "[g#3,c#4]", B: "[a3,d4]/2", C: "[a3,d4]", D: "[g3,d4]", E: "[a3,b3]", F: "[[a3,d4]@11 [a3,d4]@24 ~]/3",
  G: "[f#3,b3]", H: "f#3 ~@11", I: "[[a3,b3]@15 ~]/2", J: "[[a3,b3]@5 [g#3,c#4]]/2", K: "[[a3,d4]@47 ~]/2",
  L: "[a3,d4]@11 ~", M: "~ [f#3,a#3]@3", N: "[b3,d4]@6 [a#3,c#4]@5 [a3,d4]", O: "[~ [a3,d4]@11]/2",
  P: "[a3,c#4]@3 ~ [a3,d4] ~@5 [a3,c#4]@14", Q: "[d3,f#3,a3,d4]/2", R: "[a3,d4]@23 ~", S: "[d3,f#3,b3]",
  T: "a3 b3 c#4 d4", U: "[d3,f3,b3]@3 ~ [d3,f3,b3]@2 ~@10 [d3,f3]@2 ~@6, ~@16 b3 ~@7",
  V: "[[e3,a3]@6 [f#3,a#3]@5 [a3,b3]@24 ~]/3", W: "[d3,f3,b3]", X: "~@2 [d3,f3,b3] ~@5 [d3,f3] ~@3, ~@16 b3 ~@7",
  Y: "[d3,f3,b3] ~ [d3,f3,b3] ~@5 [d3,f3] ~@3, ~@16 b3 ~@7", Z: "[[e3,a3] [f#3,a#3]@3]/2",
  AA: "[[f3,a#3]@7 ~ [f#3,b3]@48 ~@16]/3", // A#5 B5
})).s("gm_tenor_sax").gain(0.05).pan(0.4)

// chords · tenor sax · soft notes · F#m
const tenor_sax_soft = note("<~@30 [a3@2 ~@2 [f#3,a3] ~@5 [f#3,a3]@14] ~@3 [a3@2 ~@2 [f#3,a3] ~@5 [f#3,a3]@14] ~@48>")
  .s("gm_tenor_sax").gain(0.03).pan(0.4)

// chords · trombone
const trombone = note(`<
  A B@4 C D E F G H@3 ~@16 E I J@2 E I B@2 K L M N C D E F G O C P C Q E F E R S@2 G T U@2 G T B@2 V W@3 E W@3 V W@3 V
  X@2 Y@3
>`.pickRestart({
  A: "[a#2,f3]", B: "[b2,f#3]/2", C: "[b2,f#3]", D: "[a2,f#3]", E: "[g2,d3]", F: "[f#2,c#3]", G: "[e2,b2]",
  H: "[[a2,e3]@22 [b2,f#3]@47 ~@3]/3", I: "[a2,e3] ~ [a2,e3] ~@2 [a2,e3]@7", J: "[[b2,f#3]@23 ~]/2",
  K: "b2@4 ~ f#2 b1@6", L: "b2@9 ~ c#3@2 f#2@12", M: "b2@8 ~@2 f#2 ~ b1@12", N: "b2@5 c#3 f#2@6", O: "[a2,e3]",
  P: "~ [f#2,c#3]@3", Q: "[d3,a3]", R: "[g2,d3]@6 [f#2,c#3]@5 [b2,f#3]", S: "[~ [b2,f#3]@11]/2",
  T: "[a2,e3]@3 ~ a2@2 ~@4 [a2,e3]@14, ~@4 e3 ~@19", U: "[b1,f#2,d3]/2", V: "[g2,d3]@3 ~ [g2,d3] ~@11 [g2,d3]@2 ~@6",
  W: "[[f#2,c#3]@6 [f#2,f#3]@5 [b2,f#3]@24 ~]/3", X: "[[f#2,c#3] f#3@3]/2", Y: "[f3 f#3@6 ~@2]/3",
})).s("gm_trombone").gain(0.06).pan(0.2)

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

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

// drums · clap
const clap = s("cp").struct(`<
  ~ A@9 B ~ C A@6 D E A@7 F A@6 ~ C A@3 G A@6 D E A@5 H ~@2 A@6 ~ I J A K A J L K M J A K B A ~@5
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@4 x!2 ~@2", C: "~@3 x", D: "~@3 x ~@4 x ~@2 x", E: "x", F: "~@2 x ~@2 x ~@6",
  G: "~@3 x ~@4 x ~@3", H: "~@3 x ~@3 x!3 ~@2", I: "~@3 x!2 ~@4 x ~ x", J: "~@2 x!2", K: "~@3 x ~@2 x ~ x ~@3",
  L: "~@2 x ~@6 x ~@2", M: "~@3 x ~ x!2 ~@2 x ~@2",
})).gain(0.48)

// drums · clap · soft notes
const clap_soft = s("cp").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@2 B ~@4 A ~@7 A ~@11 A ~@2 B ~@4 A ~@3 C ~@3 A ~@3 D ~@3 A ~ E F G ~@3 H ~@6
>`.pickRestart({
  A: "~@2 x", B: "~@5 x", C: "~@3 x", D: "~@2 x ~@4 x!2 ~@3", E: "~ x ~@2", F: "~@2 x ~@8 x", G: "~ x!2",
// … 33 more lines

More by Michael George