Strudelify

Stop

Sam Brown

KeyB minorTempo63 bpm
0:00/0:00
// Stop — Sam Brown
// 63 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 27, 4/4 at bar 27, 2/4 at bar 42, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 66 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(63/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 · "ACOU BASS"
const bass = note(`<
  A B C D A B C E F G H D A B C E F I H J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK R W X Y Z AA
  AB AC AD ~ AL AM AN AO AL AM AN AO AP
>`.pickRestart({
  A: "~ e2", B: "b1 d2 e2@2", C: "b1 d2 b1@2", D: "f#1@6 a1@6 b1 ~@11", E: "f#1 a1 b1!2", F: "f#1 a1 e2@2",
  G: "b1@6 d2@6 e2@11 ~", H: "f#2@5 ~ f#2@2 c#2@2 f#1@2 b1@12", I: "b1@6 d2@6 e2@9 ~ e2@2", J: "f#1 a1 b1 c#2",
  K: "d2@6 f#2@6 g2@5 ~ g2@2 d2@2 b1@2", L: "f#2@7 ~ f#1 ~ f#1@2 b1@8 f#1 ~ f#1@2",
  M: "e1@6 e2@6 g2@5 ~ g2@2 d2@2 b1@2, ~@6 d#2 ~@17", N: "f#2@9 ~ f#1@2 b1@3 c#2@3 d2@3 f#2@3", O: "e2!2",
  P: "g2@5 g#2 a2@3 a2 a1!2", Q: "b1@2 f#1 a1", R: "b1 ~@23", S: "e2@10 ~ b1!2 ~ b1!2 ~@2 d2@2 b1@2 d2@2",
  T: "e2@2 b1 d2", U: "b1@11 f#1!2 ~ f#1!2 ~@2 a1@2 f#1@2 a1@2", V: "b1@5 ~ b1@6 f#1@6 a1@5 ~",
  W: "e2@11 ~ b1!2 ~ b1!2 ~ d2@2 b1@2 d2@2", X: "e2@9 ~ e2@2 f#2@5 ~ f#2@2 c#2@2 f#1@2",
  Y: "b1@12 f#1!2 ~ f#1!2 ~ a1@2 f#1@2 a1@2", Z: "b1@6 c#2@6 d2@6 f#2@5 ~",
  AA: "g2@5 ~ g2@2 d2@2 b1@2 f#2@7 ~ f#1 ~ f#1@2", AB: "b1@8 f#1 ~ f#1@2 e1@6 e2@6, ~@18 d#2 ~@5",
  AC: "g2@5 ~ g2@2 d2@2 b1@2 f#2@9 ~ f#1@2", AD: "b1 c#2 d2 f#2 e2@4", AE: "e2@7 ~ e1 ~ e1 ~ g1@5 ~ g1@2 g1@2 g1@2",
  AF: "a1@5 ~ a1@4 d1@2 e1@5 ~ e2@4 c#2@2", AG: "d2@3 d1@2 f#1 g1@3 d2 g2 c#2",
  AH: "d2@5 ~ d2@2 d2 ~ d2@2 e1@6 e2@4 f1@2", AI: "f#1@4 f#1@2 c#2@2 f#2@2 f#1@2 g1@6 g1@3 ~ g1@2",
  AJ: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", AK: "b1@5 ~ b1@3 ~ b1 ~ f#1@6 a1@5 ~",
  AL: "g1@3 d2 g2 d2 a1@3 e2@3", AM: "e1@3 g1 b1 g1 a1@3 e2 a2 e2", AN: "g1@5 ~ g1@6 a1@6 c#2@2 d2@2 e2@2",
  AO: "e1@3 g1 b1 g1 a1@3 c#2 e2 c#2", AP: "e1@17 ~@7",
})).s("gm_acoustic_bass").gain(0.46)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A@2 B C ~@4 D@2 ~ E ~@3 F@2 ~@2 G H I J K ~ L M N O ~ P ~ Q R ~ S T U V W X Y Z AA AB AC AD AE ~@3 S AF AG AH AI@2 AJ
  AK AJ AK AJ AK AJ AK AL
>`.pickRestart({
  A: "[~@6 [e4,g4]@6 [d4,f#4] [e4,g4]@2 [f#4,a4]@3 [b3,g4]@6, ~@12 b3@23 ~@13]/2", B: "~ g4 [d4,f#4]@2, b3@23 ~, f#3 ~",
  C: "[a3,c#4] [b3,d4]!3 [a3,c#4] [f#3,a3] [f#3,b3] ~@5", // A Bm A F#m B5
  D: "[~@18 [b3,e4,g4]@12 [f#3,b3] ~ [b3,d4] ~ [b3,f#4] ~ [b3,e4]@12]/2", // Em B5 Bm B5 E5
  E: "~@4 [b3,d4,f#4] ~ [b3,e4,g4]@6 [b3,d4,f#4] ~@11", F: "[~@7 b3 c#4 d4 e4 ~ b4@3 c#5@3 e4@6, ~@22 f#4@13 ~@13]/2",
  G: "~@6 b4 a4 b4 c#5 b4 c#5", H: "d5@2 e5@2 f#5@4 d5@2 b5 ~@13",
  I: "~@2 [f#3,f#4] ~ [g#3,g#4] ~ [a#3,a#4] ~ [b3,b4] ~ [c#4,c#5] ~ b3 [c#4,c#5] [d4,d5]@2 ~@8, ~@6 b4 ~@5", // F# G# A# B C# D
  J: "~ e5 d5 ~@9", K: "~@7 f#5", L: "~@2 a4 b4 a4@3 ~ a4 ~ b4 ~ d5 ~@2 c#5@4 ~ f#4 ~ a4 ~",
  M: "b4 ~ a4 b4 c#5@4 d5 ~ b4 ~ e5@2 f#5 d5 c#5@4 b4 ~ a4 ~", N: "b4 ~@23",
  O: "~@6 [e4,g4]@5 ~ [f#3,b3] [a3,d4] [f#3,b3] ~@9", // Em B5 D5 B5
  P: "~@6 [d4,f#4,b4]@4 [b3,d4,d5] ~ [b3,d4,b4] [a#3,c#4,a#4] [b3,d4,b4] ~@9", // Bm A#m Bm
  Q: "~@4 [e4,b4,e5]@6 ~@6 [g3,b3] ~ [b3,f#4] ~@3 [b3,g4] ~", // E5 G B5 Em
  R: "[b3,f#4] ~ [g3,b3,e4]@4 ~@3 [e4,a4] [c#4,f#4] [b3,e4]", // B5 Em A5 F#5 E5
  S: "b4@2 a4@2 b4@2 c#5@2 b4@2 c#5@2 d5@2 e5@2 f#5@4 d5@2 b5 ~",
  T: "~@12 [a#4,c#5]@2 [b4,d5]@2 [c#5,e5] ~ [c#5,e5]@2 d5@2 [a#4,c#5]@2, ~@20 b4 ~@3", // A#m Bm C#m A#m
  U: "[b4,d5] [c#5,e5] d5 b5, ~ f#5", V: "d5@2 ~@10 [a#3,c#6]@2 ~ [b3,b5]@2 ~ [c#4,a#5]@2 ~@4, b5 ~@23",
  W: "d6@3 c#6@3 [b5,d6]@3 f#5@4 ~@11", X: "~@12 d5@6 b4@4 g5 f#5", Y: "e5 a4 b4@2", Z: "~ [g4,b4]",
  AA: "[f#4,a4]@6 d4@6 [g4,b4]@6 [g4,b4]@2 [g4,b4] ~ [b4,d5]@2", // F#m G Bm
  AB: "[c#5,e5]@8 [b4,d5]@2 [a4,c#5]@2 [b4,d5]@4 [g4,b4]@2 b4@2 f#5 ~ g5@2, ~@18 d5@5 ~", // C#m Bm A Bm G
  AC: "[c#5,e5]@9 e5 f#5 g5, ~@3 [a4,c#5]", // C#m A
  AD: "f#5@5 ~ [e4,e5]@2 [f#4,f#5] ~ [f#4,f#5] ~ [e4,e5]@2 [f#4,f#5] ~ [f#4,f#5] ~ [b3,b4] [c#4,c#5] [d4,d5] [e4,e5] [f#4,f#5] [a4,a5]", // E F# E F# B C# D E …
  AE: "[b4,b5] ~@23", AF: "~@14 [f#3,f#4] ~ [g#3,g#4] ~ [a#3,a#4] ~ [b3,b4] ~ [c#4,c#5] ~",
  AG: "b3 [c#4,c#5] [d4,d5]@2 ~@10 e5@2 d5@2 c#5@3 ~@3, b4 ~@11", AH: "~@12 c#5@2 ~ b4@2 ~ a#4@3 ~@3",
  AI: "[~@3 c#6@3 b5@3 f#5@3 [e2,e5]@31 ~@5]/2", AJ: "b3 ~ d4 ~ g4 ~ a4 ~ g4 ~ d4 b3 c#4 ~ e4 ~@9",
  AK: "e4 ~ g4 ~ b4 ~ e5 ~@5 c#4 ~ e4 ~ a4 ~ e5 ~@5", AL: "b4@5 ~",
})).s("gm_string_ensemble_1").gain(0.27)

// other · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note(`<
  ~ A ~@7 B ~@6 C ~ D E ~ F G H I ~@9 J ~@4 K@2 ~ L ~@2 M N ~@6 O ~ P ~@10
>`.pickRestart({
  A: "~ e4", B: "~ g3", C: "~ [g4,b4]", D: "~ d5", E: "c#5 a4 ~@2", F: "~@5 e6", G: "~@3 c#5 b4 ~@7",
  H: "c#5@2 ~ b4@2 ~ a#4@3 ~@3 d6@3 c#6@3 b5@3 ~@3", I: "e5@7 ~", J: "[f#4,b4]@5 ~",
  K: "[b5@3 ~@6 f#6@3 e6@23 ~@13, ~@4 e5@7 ~@5]/2", L: "a4 ~", M: "a4@3 ~", N: "f#4@5 ~@19", O: "~@4 e6@2 ~@4 b4 ~",
  P: "d6 ~@7",
})).s("gm_string_ensemble_1").gain(0.14)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  A B C D ~@12 E ~@2 F G H I J K L M N ~@7 O P@2 Q R@2 S@3 T U V W ~@3 O X Y Q Z@2 AA AB AA AB AA AB AA AB AC
>`.pickRestart({
  A: "~ b3", B: "a3 b3@2 a3@3 b3@6", C: "b2 d3 f#3@2", D: "c#3@6 c#3@6 b2 ~@11", E: "d3 c#3 b2@2",
  F: "~@2 [b2,b3] [c#3,c#4]", G: "[d3,d4]@3 [f#3,f#4]@2 [d3,d4] ~@6",
  H: "~@2 [f#3,f#4] ~ [g#3,g#4] ~ [a#3,a#4] ~ [b3,b4] ~ [c#4,c#5] ~ b3 [c#4,c#5] [d4,d5]@2 ~@8", // F# G# A# B C# D
  I: "~ b3 c#4 d4 e4 ~@7", J: "[a#3,c#5]@2 ~ [b3,b4]@2 ~ [c#4,a#4]@2 ~@4 [d4,b4]@3 [e4,c#5]@3 [f#4,d5]@3 [a4,f#5]@3",
  K: "[g#4,b4]@11 ~", L: "[g3,b3,d4] ~@2 [g3,b3,d4]@8 ~ [a3,c#4,e4] ~@2 [a3,c#4,e4]@8 ~",
  M: "[b3,d4,f#4] ~@2 [b3,d4,f#4]@4 ~ [b3,d4,f#4] ~ [b3,d4,f#4] ~ [a3,c#4,e4]@6 a3@5 ~, ~@12 f#3@11 ~", // Bm A
  N: "[f#3,b3] ~@23", O: "[b2,b3]@3 [c#3,c#4]@3 [d3,d4]@3 [f#3,f#4]@2 [d3,d4]",
  P: "[~@12 [a#3,c#4,e4]@11 ~ d4@12 [e3,g#3,d4,f#4]@12, ~@12 f#3@23 ~@13, ~ b3]/2", // A#dim E7
  Q: "~@12 [a#3,c#5]@2 ~ [b3,b4]@2 ~ [c#4,a#4]@2 ~@4", // A#m B F#
  R: "[[d4,b4]@3 [e4,c#5]@3 [f#4,d5]@3 [a4,f#5]@3 g#4@22 ~@2 [b3,d4,g4]@12]/2", // G C#m D G
  S: "[[c#4,e4,a4] [b3,e4,g4,b4] [a3,f#4,a4] [g4,b4] [f#4,a4] [e4,g4,b4], ~ d4@2 d5@3, ~@3 d4@2 ~]/3", // A Em D G F#m Em
  T: "[f#4,a4,c#5,e5] [g3,g4,b4,d5]", // F#m7 G
  U: "a3@4 [e3,e4] ~ [d3,d4] ~ [d3,d4] ~ [d3,d4] ~@7 e5 ~ f#5@2 g5@2, [a4,c#5,e5]@18 [a4,c#5]@5 ~, ~ [c#3,c#4]", // E D A C#
  V: "[b2,b3,b4,d5]@11 ~ [f#2,f#3]@5 ~ [a2,a3]@5 ~, f#5@23 ~, ~ [a4,c#5,e5]", W: "[b2,b3,b4,d5,f#5] ~@23",
  X: "~@14 [f#3,f#4] ~ [g#3,g#4] ~ [a#3,a#4] ~ [b3,b4] ~ [c#4,c#5] ~", // F# G# A# B C#
  Y: "b3 [c#4,c#5] [d4,d5]@2 ~@10 b3@2 c#4@2 d4@2 e4@2 ~@2, b4 ~@11", // C# D
  Z: "[[d4,b4]@3 [e4,c#5]@3 [f#4,d5]@3 [a4,f#5]@3 [g#4,b4]@31 ~@5]/2", AA: "~ [c#4,e4,a4]", AB: "[g4,b4] [c#4,a4], e4",
  AC: "[e4,g4,b4]@5 ~", // Em
})).s("gm_string_ensemble_2").gain(0.36)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note("<~@21 A ~@17 B@2 ~@16 C D C D C D C D E>".pickRestart({
  A: "~@6 b4 ~@5", B: "[~@6 b4@11 ~@7]/2", C: "[d4,g4,b4] ~", D: "d4 ~", E: "d4@5 ~",
})).s("gm_string_ensemble_2").gain(0.21)

// other · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note("<~@16 [~@12 b2 ~ e3 ~ g3 ~ b3 ~@5] ~@49>").s("gm_pizzicato_strings").gain(0.56)

// other · pizzicato strings · "PIZZICATO" · soft notes
const pizzicato_strings_soft = note("<~@16 [~@12 b3 ~ e4 ~ g4 ~ b4 ~@5] ~@49>").s("gm_pizzicato_strings").gain(0.33)

// chords · percussive organ · "ORGAN 1"
const percussive_organ = note("<~@47 A@2 B C D E ~@13>".pickRestart({
  A: "[~@5 b4 d5@2 e5 ~ e5 ~ f#5@2 a5@4 f#5@2 a5@6 f#5 [d5,e5] e5 [d5,e5] [b4,d5] a4 b4@5 [a4,b4,d5]@2 ~ [a4,b4,d5]@4 [c#5,e5]@2 [b4,c#5,e5]@2, ~@12 f5 ~@5 f5 ~@25 b4 ~@3]/2", // Dsus2 Bm Bm7 C#m C#m7
  B: "b5@8 a5 g5 f#5 e5 f#5 d5 e5 d5 b4 d5 e5 f#5 e5 d5 b4 d5, a#5 ~@23",
  C: "[c#5,d5] b4 d5@4 c#5@2 b4 c#5@3 [c#5,f#5] ~ [c#5,e5]@2 d5@2 [a4,c#5]@2 [b4,d5]@2 a4@2, ~@12 d5@2 ~@2 b4 ~@5 c#5 ~", // Dmaj7 F#5 C#m A Bm
  D: "f#5 e5 f#5 ~ f#5 e5 ~ f#5 ~ a5@3, d5, ~@3 a5@2 ~ a5@2 e5@4", E: "[g5,b5] ~@3",
})).s("gm_percussive_organ").gain(0.48)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D A B C E F B G D A B C E F B G E H I J K L M N O B@2 E@2 B P E@2 Q R S T J U V W X Y N O B P E@2 Q R S Z ~ M AA
  M AB M AA M AB ~
>`.pickRestart({
  A: "~@12 [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~", // Em
  B: "[e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~", // Em
  C: "[e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~", // Em Bm
  D: "[d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~@11", // Bm
  E: "[d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~", // Bm
  F: "[d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~", // Bm Em
  G: "[c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~", // F# Bm
  H: "[d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~", // Bm G
  I: "[c#5,e5,f#5,a#5] ~ [c#5,e5,f#5,a#5] ~ [c#5,e5,f#5,a#5] ~ [c#5,e5,f#5,a#5] ~ [c#5,e5,f#5,a#5] ~ [c#5,e5,f#5,a#5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~", // F#7 Bm
  J: "[d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~", // E7 G
  K: "[c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [f#5,d6]@3 [e5,c#6]@2 ~ [d5,b5]@3 [c#5,a5]@2 ~", // F# D C#m G F#m
  L: "~@2 [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~", // E7
  M: "[d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~", // G A
  N: "[d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [c#5,e5,f#5,a5] ~ [c#5,e5,f#5,a5] ~ [c#5,e5,f#5,a5] ~ [c#5,e5,f#5,a5] ~ [c#5,e5,f#5,a5] ~ [c#5,e5,f#5,a5] ~", // Bm F#m7
  O: "[d5,f#5,b5] ~@23", // Bm
  P: "[e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [e5,g5,b5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~", // Em F#
  Q: "[d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [c#5,e5,f#5,a#5] ~ [c#5,e5,f#5,a#5] ~ [c#5,e5,f#5,a#5] ~ [c#5,e5,f#5,a#5] ~ [c#5,e5,f#5,a#5] ~ [c#5,e5,f#5,a#5] ~", // G F#7
  R: "[d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~", // Bm E7
  S: "[d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~ [c#5,f#5,a#5] ~", // G F#
  T: "[f#5,d6]@3 [e5,c#6]@2 ~ [d5,b5]@3 [c#5,a5]@2 ~@3 [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~ [d5,e5,g#5,b5] ~", // D C#m G F#m E7
  U: "[c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [d5,e5,g5,b5] ~ [d5,e5,g5,b5] ~ [d5,e5,g5,b5] ~ [d5,e5,g5,b5] ~ [d5,e5,g5,b5] ~ [d5,e5,g5,b5] ~", // A Em7
  V: "[d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~", // D G
  W: "[d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,e5,b5] ~ [d5,e5,g5,b5] ~ [d5,e5,g5,b5] ~ [d5,e5,g5,b5] ~ [d5,e5,g5,b5] ~ [d5,e5,g5,b5] ~", // D E7 Em7
  X: "[c#5,e5,f#5,b5] ~ [c#5,e5,f#5,b5] ~ [c#5,e5,f#5,b5] ~ [c#5,e5,f#5,b5] ~ [c#5,e5,f#5,b5] ~ [c#5,e5,f#5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~", // C#m7 G
  Y: "[a4,c#5,e5]!4, a5!2", Z: "[f#5,d6]@3 [e5,c#6]@2 ~ [d5,b5]@3 [c#5,a5]@2 ~@13",
  AA: "[b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~", // Em7 A
  AB: "[b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [b4,d5,e5,g5] ~ [c#5,e5,a5] ~ [c#5,e5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~", // Em7 A C#m A
})).s("gm_piano").gain(0.26)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@2 A ~ B@2 C@2 B@2 C ~ D E F G B@2 C ~@9 H I J K L@2 M ~@13 L@2 M ~@15
>`.pickRestart({
  A: "[a#4,b4]@2 e5@5 ~@17", B: "~@18 [b3,e4,g4] ~@5", C: "~@18 [b3,d4,f#4] ~@5", D: "~@9 [b3,e4,g4] ~@2",
  E: "~@6 d5@2 f#4@2 e4@2 c#5@5 ~ [b3,e4,g4]@2 ~@4", F: "~@9 [b3,d4,f#4] ~@2",
  G: "~@8 a4 ~ c#4 b3 c#4@2 f#4@6 ~@4, ~@9 d4@2 ~@13", H: "~@3 [b3,e4,g4] ~@5 d5 f#4 e4",
  I: "c#5@5 ~ [b3,e4,g4]@2 ~@16", J: "~@6 [b3,d4,f#4]@2 ~@12 a4 ~ c#4 b3, ~@21 d4@2 ~", K: "c#4 f#4@3 ~@8",
  L: "~@6 [b3,e4,g4] ~@17", M: "~@6 [b3,d4,f#4] ~@17",
})).s("gm_acoustic_guitar_nylon").gain(0.5)

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

// drums · rim
const rim = s("rim").struct("<~@4 [~@3 x] [~ x ~ x]!6 [~@3 x ~@3 x ~@4] [~@3 x] [~ x ~ x]!7 [~ x ~@2] ~@45>").gain(0.71)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@11 [~@15 x!3 ~@6] ~@5 [~@14 x!4 ~@6] ~@11 [~@2 x!5 ~@17] ~@36>").gain(0.29)

// drums · snare
const snare = s("sd").struct("<~@11 A ~@8 A B@6 ~ B@19 C B@7 D ~ B@8 ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x", D: "~ x!2 ~",
})).gain(0.57)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B C B C B C D C B C B C B C B C E C F G H I ~ J C J K J L M N O C O P C@6 Q R J L M N O C O S ~ T@8 ~
>`.pickRestart({
  A: "~@6 x!6", B: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~", C: "x!12",
  D: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~@7 x ~ x ~", E: "x ~ x ~@3 x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~",
  F: "x ~ x ~@3 x ~ x ~ x!3 ~@2 x ~@2 x ~@2 x ~@2", G: "x ~ x ~ x ~ x ~ x!5 ~ x ~ x ~ x ~ x ~ x ~",
  H: "x ~ x ~ x ~ x ~ x!5 ~ x ~ x ~ x ~ x ~ x!2", I: "x!5 ~ x!2 ~ x!3", J: "x ~ x ~ x ~ x ~ x ~ x ~@2 x!2 ~ x!5 ~ x ~",
  K: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!4", L: "x ~ x ~ x ~ x ~ x ~ x ~@2 x!2 ~ x ~ x ~ x ~ x ~",
  M: "x ~ x ~ x ~ x ~ x ~ x ~@2 x!2 ~ x!5 ~ x!2", N: "~ x!2 ~ x!2 ~ x!2 ~ x!3 ~ x ~ x ~@2 x!4 ~",
  O: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@3 x ~ x ~ x!2", P: "x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~ x ~ x ~ x!4",
  Q: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@2", R: "x", S: "x!5 ~@3",
  T: "x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~ x!3 ~",
})).gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@15 B ~@4 C ~@12 A ~@3 A ~ C ~>".pickRestart({
  A: "~@11 x", B: "~@5 x ~@6", C: "~@23 x",
// … 35 more lines