Strudelify

Weil dein Herz dich verrat

Brunner & Brunner

KeyE♭ majorTempo126 bpm
0:00/0:00
// Weil dein Herz dich verrat — Brunner & Brunner
// 126 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/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 · synth bass 2 · "SYNTH BASS"
const bass = note(`<
  A B C D E F G H I J K L M N O D E@2 P Q J R E@2 S T C U V E@2 W X Y E@2 Z C@2 L W AA W D E@2 W AB X D H AC AD AE C AF
  E@3 AG Z D E@2 Z C AH R E@2 AI AJ AH AK E@2 Z AL AM AN C AK AI AO AP T J D E AI AQ AR Z AS E@2 Z AT Z R E@2 AI W AH AK
  AI E Z AU ~@8
>`.pickRestart({
  A: "eb2 ~ eb1 ~ eb2 ~ eb1 ~", B: "eb1 ~@7", C: "eb2 ~ eb2@2 bb1 ~ eb2@2 ~@2 eb2@2 bb1@2 c2@2",
  D: "eb2 ~ eb2@2 bb1@2 eb2@2 ~@2 eb2@2 g1@2 ab1@2", E: "bb1 ~ bb1@2 f1@2 bb1@2 ~@2 bb1@2 f1@2 g1@2",
  F: "ab1 ~ ab1 ~ eb2@2 ab1@2 ~@2 ab1@2 g1@2 f1@2", G: "eb2 ~ eb2 ~ bb1@2 eb2 ~@3 eb2 ~ bb1@2 eb2@2",
  H: "bb1 ~ bb1 ~ f1@2 bb1@2 ~@2 bb1@2 f1@2 g1@2", I: "eb2 ~ eb2 ~ bb1@2 eb2@2 ~@2 eb2 ~ bb1@2 c2@2",
  J: "eb2 ~ eb2@2 bb1 ~ eb2 ~@3 eb2@2 bb1@2 c2@2", K: "eb2 ~ eb2 ~ bb1 ~ eb2@2 ~@2 eb2@2 bb1@2 c2@2",
  L: "eb2 ~ eb2@2 bb1 ~ eb2 ~@3 eb2@2 bb1@2 eb2@2", M: "ab1 ~ ab1@2 eb2 ~ ab1@2 ~@2 ab1@2 g1@2 f1@2",
  N: "eb2 ~ eb2@2 bb1 ~ eb2 ~@3 eb2@2 f1@2 g1@2", O: "ab1 ~ ab1 ~ eb2 ~ ab1@2 ~@2 ab1@2 eb2@2 ab1 ~",
  P: "ab1 ~ ab1 ~ eb2@2 ab1 ~@3 ab1@2 eb2@2 ab1@2", Q: "bb1 ~ bb1@2 f1@2 bb1@2 ~@2 bb1@2 f1@2 bb1 ~",
  R: "eb2 ~ eb2@2 bb1@2 eb2 ~@3 eb2@2 g1@2 ab1@2", S: "eb2 ~ eb2@2 bb1@2 eb2 ~@3 eb2@2 bb1@2 c2@2", T: "eb2 ~@3",
  U: "eb2 ~ eb2@2 bb1 ~ eb2@2 ~@2 eb2@2 g1@2 ab1@2", V: "bb1 ~ bb1 ~ f1 ~ bb1@2 ~@2 bb1@2 f1@2 g1@2",
  W: "ab1 ~ ab1@2 eb2@2 ab1@2 ~@2 ab1@2 eb2@2 ab1@2", X: "eb2 ~ eb2 ~ bb1@2 eb2@2 ~@2 eb2@2 bb1@2 c2@2",
  Y: "eb2 ~ eb2 ~ bb1@2 eb2@2 ~@2 eb2@2 bb1@2 eb2@2", Z: "eb2 ~ eb2@2 bb1@2 eb2@2 ~@2 eb2@2 bb1@2 c2@2",
  AA: "eb2 ~ eb2@2 bb1@2 eb2 ~@3 eb2@2 f1@2 g1@2", AB: "bb1 ~ bb1@2 f1@2 bb1@2 ~@2 bb1@2 f1@2 bb1@2",
  AC: "bb1 ~ bb1@2 f1 ~ bb1@2 ~@2 bb1@2 f1@2 bb1 ~", AD: "eb2 ~ eb2@2 bb1@2 eb2@2 ~@2 eb2@2 c2@2 bb1@2", AE: "eb2 ~@7",
  AF: "eb2 ~ eb2 ~ bb1@2 eb2 ~@3 eb2@2 g1@2 ab1@2", AG: "ab1 ~ ab1 ~ eb2@2 ab1@2 ~@2 ab1@2 eb2@2 ab1@2",
  AH: "eb2 ~ eb2@2 bb1@2 eb2@2 ~@2 eb2 ~ bb1@2 c2@2", AI: "bb1 ~ bb1@2 f1 ~ bb1@2 ~@2 bb1@2 f1@2 g1@2",
  AJ: "ab1 ~ ab1 ~ eb2@2 ab1 ~@3 ab1@2 g1@2 f1@2", AK: "eb2 ~ eb2@2 bb1@2 eb2@2 ~@2 eb2@2 bb1@2 eb2@2",
  AL: "eb2 ~ eb2@2 bb1 ~ eb2@2 ~@2 eb2@2 f1@2 eb2@2", AM: "ab1 ~ ab1@2 eb2@2 ab1@2 ~@2 ab1@2 eb2@2 f1@2",
  AN: "ab1 ~ ab1@2 eb2 ~ ab1 ~@3 ab1@2 eb2@2 f1@2", AO: "bb1 ~ bb1@2 f1 ~ bb1@2 ~@2 bb1@2 f1@2 bb1@2",
  AP: "eb2 ~ eb2 ~ bb1@2 eb2@2 ~@2 eb2@2 c2@2 bb1@2", AQ: "bb1 ~ bb1@2 f1 ~ bb1 ~@3 bb1@2 f1@2 g1@2",
  AR: "ab1 ~ ab1 ~ eb2@2 ab1@2 ~@2 ab1 ~ g1@2 f1@2", AS: "eb2 ~ eb2@2 bb1@2 eb2@2 ~@2 eb2@2 g1@2 ab1 ~",
  AT: "eb2 ~ eb2 ~ bb1@2 eb2 ~@3 eb2@2 bb1@2 c2@2", AU: "eb2@3 ~ eb1@10 ~@2",
})).s("gm_synth_bass_2").gain(0.5)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A@2 ~@6 B C ~@3 D ~@2 E@2 ~@3 F ~ G H@2 I@2 J@2 ~@2 K@2 L M N O ~@3 P ~@2 Q@2 ~@3 F ~ G H@2 I@2 R@2 ~@2 S@2 T U V W@7
  X@2 Y Z AA C ~@8 AB@2 AC ~@3 AD ~ AE M AF ~ AG@2 AH@2 ~@2 AI@2 AJ U AK O ~@8
>`.pickRestart({
  A: "[~@4 eb4 ~@3, eb3@5 ~@3, ~@2 g3@3 ~@3, ~@3 bb3@2 ~@3]/2", B: "~@6 eb4 f4 g4@2 ab4@2 f4@2 g4@2", C: "eb4@3 ~",
  D: "~@8 eb4@7 ~, ~@3 eb3@5, ~@7 g3@9", E: "[~@6 f3@7 ~ bb4@2, ~@5 d3@8 d4@3, ~@27 f4@5]/2",
  F: "~ eb4, ~@3 eb3@5, ~@7 g3@9", G: "[c4,ab4]@5 ~ [bb3,g4]@6 [ab3,f4]@3 ~", H: "[[g3,eb4]@19 ~@13]/2",
  I: "[~@4 eb4@5 ~@7, ~@2 eb3@15 ~@15, ~@2 g3@7 ~@7, ~@3 bb3@6 ~@7]/2",
  J: "[~@2 f4@3 ~@3, ~@2 f3@15 ~@15, ~@4 bb3@15 ~@13, ~@3 d4@7 ~@6]/2",
  K: "[~@3 eb4@2 ~@3, ~@3 eb3@7 ~@6, ~@2 g3@3 ~@3, ~@5 bb3@5 ~@6]/2",
  L: "~@8 f4@5 ~@3, ~ f3@5 ~@2, ~ bb3@2 ~, ~@6 d4@7 ~@3",
  M: "[c4,ab4]@3 ~ [c4,ab4] ~ [c4,ab4]@3 ~ [bb3,g4]@2 [ab3,f4]@3 ~", N: "[g3,eb4]@3 bb3 g4 ab4 f4 g4", O: "eb4@13 ~@3",
  P: "~ eb4, ~@6 eb3@9 ~, ~@7 g3@9", Q: "[~@4 f3@9 ~ bb4@2, ~@3 d3@10 d4@3, ~@27 f4@5]/2",
  R: "[~@2 f4@3 ~@3, ~ f3@9 ~@6, ~@4 bb3@15 ~@13, ~@3 d4@7 ~@6]/2",
  S: "[~@6 eb4@7 ~@3, ~@6 eb3@15 ~@11, ~@8 g3@13 ~@11, ~@10 bb3@15 ~@7]/2",
  T: "~@4 f4@3 ~, ~ f3@5 ~@2, ~@2 bb3@5 ~, ~@3 d4@4 ~",
  U: "[c4,ab4]@3 ~ [c4,ab4] ~ [c4,ab4]@4 [bb3,g4]@2 [ab3,f4]@2 ~@2", V: "eb4@3 bb3 g4 ab4 f4 g4, g3 ~@3",
  W: "[eb4@7 ~@17 eb4@13 ~@16 ab3 ~@2 f4@12 ~@44, g4, ~@18 eb3@19 ~@13 f3@18 ~@44, ~@20 g3@17 ~@17 d4@14 ~@44, ~@22 bb3@15 ~@15 bb3@16 ~@44]/7",
  X: "[~@8 eb4@7 ~, ~@10 eb3@19 ~@3, ~@12 g3@17 ~@3, ~@14 bb3@15 ~@3]/2",
  Y: "~@4 f4@3 ~, ~@2 f3@11 ~@3, ~@2 bb3@5 ~, ~@3 d4@4 ~",
  Z: "[c4,ab4]@3 ~ [c4,ab4] ~ [c4,ab4]@3 ~ [bb3,g4]@2 [ab3,f4]@2 ~@2", AA: "[g3,eb4]@5 ~ bb3!2 g4@2 ab4@2 f4@2 g4@2",
  AB: "[~@8 eb4@13 ~@11, ~ eb3@9 ~@6, ~@4 g3@17 ~@11, ~@3 bb3@7 ~@6]/2", AC: "~ f4, ~ f3@7, ~ bb3@3, ~@3 d4@5",
  AD: "~ eb4, ~ eb3@7, ~ g3@3, ~@3 bb3@5", AE: "~@8 f4@5 ~@3, ~@2 f3@11 ~@3, ~ bb3@2 ~, ~@6 d4@7 ~@3",
  AF: "[g3,eb4]@7 ~", AG: "[~@4 eb4@7 ~@5, ~@2 eb3@19 ~@11, ~@4 g3@17 ~@11, ~@3 bb3@8 ~@5]/2",
  AH: "[~@4 f4@5 ~@7, ~ f3@8 ~@7, ~@2 bb3@7 ~@7, ~@3 d4@6 ~@7]/2",
  AI: "[~@6 eb4@5 ~@5, ~@3 eb3@8 ~@5, ~@4 g3@7 ~@5, ~@5 bb3@6 ~@5]/2",
  AJ: "~@8 f4@5 ~@3, ~@2 f3@11 ~@3, ~@4 bb3@9 ~@3, ~@6 d4@7 ~@3", AK: "[g3,eb4]@4 ~@2 bb3!2 g4@2 ab4@2 f4@2 g4@2",
})).s("gm_acoustic_guitar_steel").gain(0.5).pan(0.3)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel_2 = note(`<
  ~ A B C D E F G H@2 ~@15 I J I K L M N O I P Q R ~@16 I J S T L M N U A P V W A J A K L X N O A Y Z AA ~@8 I AB C T L
  AC N AD A Y AE AF A J A T L AC N AD A P AG AH@2 ~@8
>`.pickRestart({
  A: "[eb5,g5]@3 ~ [g5,bb5] ~ [ab5,c6]@3 ~ [ab5,c6] ~ [g5,bb5]@3 ~", B: "[eb5,g5]@11 ~@5",
  C: "[eb5,g5]@3 ~ [g5,bb5]@2 [ab5,c6]@3 ~ [ab5,c6]@2 [g5,bb5]@3 ~", D: "[bb5,d6]@13 ~@3",
  E: "[d6,f6]@5 ~ [c6,eb6]@5 ~ [ab5,c6]@3 ~", F: "[g5,bb5]@7 ~", G: "[d5,bb5]@3 [c5,ab5]@3 [ab4,f5]@2, ~@12 ab5 ~@3",
  H: "[[g4,eb5]@25 ~@7]/2", I: "[eb5,g5]@3 ~ [g5,bb5]@2 [ab5,c6]@3 ~ [ab5,c6] ~ [g5,bb5]@3 ~", J: "[eb5,g5]@15 ~",
  K: "[bb5,d6]@15 ~", L: "[d6,f6]@3 ~ [d6,f6] ~ [d6,f6]@5 ~ [c6,eb6]@3 ~", M: "[c6,eb6]@3 ~ [bb5,d6] ~ [bb5,d6]@9 ~",
  N: "[c6,eb6]@3 ~ [c6,eb6] ~ [c6,eb6]@5 ~ [bb5,d6]@3 ~", O: "[ab5,c6]@3 ~ [g5,bb5] ~ [g5,bb5]@7 ~@3", P: "[d5,f5]@7 ~",
  Q: "[c5,ab5]@3 ~ [c5,ab5] ~ [c5,ab5]@3 ~ [bb4,g5]@2 [ab4,f5]@4", R: "[g4,eb5]",
  S: "[eb5,g5]@4 [g5,bb5] ~ [ab5,c6]@3 ~ [ab5,c6]@2 [g5,bb5]@3 ~", T: "[bb5,d6]@7 ~",
  U: "[ab5,c6]@3 ~ [g5,bb5] ~ [g5,bb5]@8 ~@2", // Ab Gm
  V: "[c5,ab5]@3 ~ [c5,ab5] ~ [c5,ab5]@3 ~ [bb4,g5]@2 [ab4,f5]@3 ~, ~@12 gb5 ~@3", W: "[g4,eb5]@11 ~@5",
  X: "[c6,eb6]@3 ~ [bb5,d6] ~ d6@9 ~, ~@6 bb5@7 ~@3", Y: "[d5,f5]@15 ~",
  Z: "[c5,ab5]@3 ~ [c5,ab5] ~ [c5,ab5]@3 ~ [bb4,g5] ~ [ab4,f5]@3 ~", AA: "[g4,eb5]@15 ~", AB: "[eb5,g5]@7 ~",
  AC: "[c6,eb6]@3 ~ [bb5,d6] ~ [bb5,d6]@8 ~@2", AD: "[ab5,c6]@3 ~ [g5,bb5] ~ [g5,bb5]@9 ~",
  AE: "[c5,ab5]@3 ~ [c5,ab5] ~ [c5,ab5]@3 ~ [bb4,g5]@2 [ab4,f5]@3 ~", AF: "[g4,eb5]@13 ~@3, db5 ~@15",
  AG: "[c5,ab5]@3 ~ [c5,ab5] ~ [c5,ab5]@3 ~ [bb4,g5]@2 [ab4,f5]@2 ~@2", AH: "[[g4,eb5]@23 ~@9]/2",
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0.7)

// chords · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  ~@2 A B C D A E A@4 F A F A C@2 G H A@2 C@2 A I A J C K C L A J C M A@4 F A F A C N@5 C@2 A O A J C P C Q A J C R A S
  A S C T C Q A S C U A V W@2 A@2 C@2 A I A S C T X Y A S C Z A AA A AA C T C Q AB S C@2 A AC ~@8
>`.pickRestart({
  A: "~@2 [g4,bb4,eb5] ~@5 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~ [g4,bb4,eb5] ~", // Eb
  B: "~@2 [g4,bb4,eb5] ~@5 [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [g4,bb4,eb5] ~@3", // Eb Ab Eb
  C: "~@2 [f4,bb4,d5] ~@5 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~ [f4,bb4,d5] ~", // Bb
  D: "~@2 f5@2 ~@4 [c5,eb5] ~@3 [ab4,c5] ~ [ab4,c5] ~, ~@2 d5 ~@13", // Cm Ab
  E: "~@2 [f4,bb4,d5] ~@5 [f4,bb4,d5] ~@3 [f4,ab4,bb4,d5] ~ [f4,ab4,bb4,d5] ~", // Bb Bb7
  F: "~@2 [ab4,c5,eb5] ~@5 [ab4,c5,eb5] ~@3 [g4,bb4,eb5] ~ [g4,bb4,eb5] ~", // Ab Eb
  G: "~@2 [eb4,ab4,c5] ~@5 [eb4,bb4,d5] ~@3 [ab4,c5,eb5] ~ [ab4,c5,eb5] ~", // Ab Ebmaj7 Ab
  H: "~@2 [c5,eb5] ~@5 [bb4,d5] ~@3 [ab4,c5] ~ [ab4,c5] ~", I: "[g4,bb4,eb5] ~@15",
  J: "~@2 [g4,bb4,eb5] ~@5 [ab4,c5,eb5] ~@3 [g4,bb4,eb5] ~ [g4,bb4,eb5] ~", // Eb Ab Eb
  K: "~@2 [d5,f5] ~@5 [f4,d5,f5] ~@3 [f4,c5,eb5] ~ [f4,c5,eb5] ~", // Dm F7
  L: "~@2 [c5,eb5] ~@5 [ab4,c5,eb5] ~@3 [bb4,d5] ~ [ab4,c5] ~", // Cm Ab Bb Ab
  M: "~@2 [c5,ab5] ~@5 [c5,eb5] ~@3 [bb4,g5] ~@3, ~@4 ab5 ~@3", // Fm Cm Eb
  N: "[~@2 [f4,bb4,d5] ~@5 [f4,bb4,d5] ~@5 [f4,bb4,d5] ~@3 [ab4,c5] ~@5 [bb4,d5] ~@3 [c5,eb5] ~ [c5,eb5] ~@3 [c5,eb5] ~@5 [bb4,d5] ~@3 [ab4,c5] ~ [ab4,c5] ~@3 [g4,bb4,eb5] ~@5 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~ [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@5 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~ [g4,bb4,eb5] ~, ~@6 [f4,bb4,d5] ~@33, ~@13 c-1@66 ~]/5", // Bb Ab Bb Cm Bb Ab Eb Bb
  O: "[g4,bb4,db5,eb5] ~@15", P: "~@2 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~@5 [f4,c5,eb5] ~@3",
  Q: "~@2 [ab4,c5,eb5] ~@5 [ab4,c5,eb5] ~@3 [bb4,d5] ~ [ab4,c5] ~", // Ab Bb Ab
  R: "~@2 [c5,ab5] ~@5 [c5,ab5] ~ [bb4,g5] ~ [ab4,f5] ~@3", // Fm Eb Db
  S: "~@2 [g4,bb4,eb5] ~@3 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~ [g4,bb4,eb5] ~@3", // Eb Ab Eb
  T: "~@2 [f4,d5,f5] ~@5 [f4,d5,f5] ~@3 [f4,c5,eb5] ~ [f4,c5,eb5] ~", // Dm F7
  U: "~@2 [c5,ab5] ~@3 [c5,ab5] ~@3 [bb4,g5] ~ [ab4,f5] ~@3", // Fm Eb Db
  V: "~@2 [g4,bb4,eb5] ~@5 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@3", // Eb
  W: "~@2 [ab4,c5,eb5] ~@5 [ab4,c5,eb5] ~@3 [ab4,c5,eb5] ~ [ab4,c5,eb5] ~", // Ab
  X: "~@4 [f4,bb4,d5] ~ [f4,bb4,d5] ~@5 [f4,bb4,d5] ~@3", // Bb
  Y: "~@2 [ab4,c5,eb5] ~@5 [ab4,c5,eb5] ~@3 d5@2 [ab4,c5] ~, ~@12 bb4 ~@3", // Ab
  Z: "~@2 [f4,d5,f5] ~@5 [f4,bb4,d5] ~@3 [f4,bb4,d5] ~ [f4,bb4,d5] ~", // Dm Bb
  AA: "~@2 [g4,bb4,eb5] ~@3 [ab4,c5,eb5] ~@5 [g4,bb4,eb5] ~ [g4,bb4,eb5] ~", // Eb Ab Eb
  AB: "~@2 [g4,bb4,eb5] ~@3 [g4,bb4,eb5] ~@5 [g4,bb4,eb5] ~ [g4,bb4,eb5] ~", AC: "~@4 [g4,bb4,eb5] ~@11",
})).s("gm_pizzicato_strings").gain(0.35).pan(0.3)

// other · marimba
const marimba = note("<A B ~@7 C D ~@25 E F ~@26 E G ~@10 E F ~@18 E D ~@10 E F ~@8>".pickRestart({
  A: "eb3 g3 bb3 eb4 g3 bb3 eb4 g4 bb3 eb4 g4 bb4 eb4 g4 bb4 eb5", B: "eb4 ~@15",
  C: "~@6 g4 ab4 ~ ab4 g4 f4 g4 f4 eb4 d4, ~@4 bb4 ~@3", D: "eb4 ~@7", E: "~@6 bb3!2 g4@2 ab4@2 f4@2 g4@2",
  F: "eb4 ~@3", G: "eb4@3 ~@13",
})).s("gm_marimba").gain(0.4).pan(0.4)

// chords · synth strings 1 · "SYN STRING"
const synth_strings_1 = note(`<
  A@2 B C D E F G H@2 I@2 J K L M N@2 O P Q@2 R@2 S T U V W@3 X@2 Y Z AA H@2 AB@2 AC@2 J AD AE@2 AF P AG@2 R@2 S AH U AI
  AJ@3 AK AL AM@2 AA AN AO U AP AQ AR@2 AS AT AU AV AW AX@2 AY@2 AZ@2 BA BB BC@2 BD@2 BE@3 BF@2 BG BH BI AN BJ U BK BL@3
  BM@2 BN BO BP BQ@2 ~@8
>`.pickRestart({
  A: "[[g3,bb3,eb4]@9 ~ [g4,bb4] [ab4,c5]@3 [g4,bb4]@2, ~@20 eb4@11 ~]/2", B: "[bb3,eb4,g4]",
  C: "[eb4,g4]@3 ~ [g4,bb4]@2 [ab4,c5]@6 [g4,bb4]@3 ~, ~@4 eb4 ~ eb4@9 ~", D: "[d4,bb4,d5], f4@7 ~",
  E: "[d5,f5]@5 ~ [c5,eb5]@6 [ab4,c5]@3 ~, ab4@11 ~@5", F: "[eb4,g4,bb4]@15 ~", G: "[d4,bb4]@5 ~ [c4,ab4]@6 [ab3,f4]@4",
  H: "[[g3,bb3,eb4]@15 ~]/2", // Eb
  I: "[[eb4,g4]@6 [f4,ab4]@6 [g4,bb4]@3 ~ [g4,bb4]@5 ~ [eb4,g4]@5 ~ [eb4,g4,bb4]@3 ~, bb3]/2", // Eb Fm Gm Eb
  J: "[ab4,c5]@3 [g4,bb4], eb4@15 ~", K: "[bb3,g4], eb4@7 ~", L: "[ab4,c5]@11 ~ [g4,bb4]@4, eb4@15 ~",
  M: "[bb3,eb4,g4] ~ [bb3,eb4,g4]@4 [d4,f4]@6 [c4,eb4]@3 ~", N: "[[d4,f4]@29 ~@3, bb3@31 ~]/2",
  O: "[ab4,c5]@3 [bb4,d5]@3 [c5,eb5]@2", P: "[c5,eb5]@6 [bb4,d5]@6 [ab4,c5]@3 ~",
  Q: "[[ab4,c5]@5 ~ bb4@6 [ab4,c5]@3 ~ [g4,bb4]@15 ~, eb4@15 ~, ~@3 g4@2 ~@11]/2", // Ab Gm
  R: "[[ab3,f4]@3 [bb3,g4]@3 [c4,ab4]@5 [bb3,g4]@3 [ab3,f4]@2]/2", S: "[g3,bb3,eb4]",
  T: "g4@3 ~ [g4,bb4]@2 [ab4,c5]@6 [g4,bb4]@4, eb4@15 ~", U: "[bb3,eb4,g4]@15 ~",
  V: "[eb4,g4]@3 ~ [g4,bb4]@2 ~@6 [g4,bb4]@3 ~, bb3@3 [ab4,c5]@3 ~@2, ~@10 eb4@5 ~", // Eb Gm Ab
  W: "[[bb4,d5]@14 ~@2 [d5,f5]@3 ~ [d5,f5]@2 [d5,f5]@5 ~ [c5,eb5]@3 ~ [c5,eb5]@3 ~ d5@2 d5@10, f4@47 ~, d4@18 ~@18 bb4 ~ bb4@8 ~@2]/3", // Bb Dm Cm
  X: "[[ab4,c5,eb5]@3 ~ [ab4,c5,eb5] ~ [ab4,c5,eb5]@5 ~ [bb4,d5]@3 ~ [ab4,c5]@3 ~ [eb4,g4,bb4] ~ [eb4,g4]@9 ~, eb4@19 ~@3 bb4@7 ~@3]/2", // Ab Bb Ab Eb
  Y: "[bb3,g4]@4 [g4,bb4]@2 [ab4,c5]@3 ~ ab4@2 [g4,bb4]@3 ~, eb4@15 ~, ~@10 c5 ~@5", Z: "[bb3,d4,f4]",
  AA: "[c4,ab4]@5 [bb3,g4] [ab3,f4]@2", // Fm Eb Db
  AB: "[[eb4,g4]@6 [f4,ab4]@5 ~ [g4,bb4]@3 ~ bb4@6 ~@6 bb4@3 ~, bb3@31 ~, ~@16 g4@15 ~, ~@22 eb4@9 ~]/2", // Eb Fm Gm
  AC: "[[ab4,c5]@12 [bb3,g4]@19 ~, eb4@31 ~, c4@5 ~ bb4@2 ~@8]/2", AD: "[bb3,eb4,g4]@6 [d4,f4]@5 ~ [c4,eb4]@4",
  AE: "[~@16 bb4@15 ~, [bb3,d4], f4@15 ~]/2", AF: "[ab4,c5]@5 ~ [bb4,d5]@6 [c5,eb5]@3 ~",
  AG: "[[ab4,c5]@6 [g4,bb4]@6 [ab4,c5]@4 [g4,bb4]@15 ~, eb4@15 ~]/2", // Ab Gm Ab Gm
  AH: "~@2 bb4 [ab4,c5]@3 [g4,bb4]@2, eb4@15 ~, g4@3 ~@5", // Ab Gm
  AI: "[eb4,g4]@3 ~ [eb4,g4,bb4]@2 [ab4,c5]@6 [g4,bb4]@3 ~, bb3@3 eb4@4 ~", // Eb Ab Gm
  AJ: "[bb4@15 ~ [d5,f5]@3 ~ [d5,f5]@2 [d5,f5]@5 ~ [c5,eb5]@2 ~@2 [c5,eb5]@3 ~ [bb4,d5] ~ [bb4,d5]@9 ~, [d4,f4]@23 ~, d5@13 ~@35]/3", // Dm Cm Bb Dm
  AK: "[ab4,c5,eb5]@3 ~ [ab4,c5,eb5] ~ [ab4,c5,eb5]@5 ~ [bb4,d5]@3 ~, eb4@11 ~@5", // Ab Bb
  AL: "[eb4,ab4,c5]@3 ~ [eb4,g4,bb4] ~ [eb4,g4,bb4]@9 ~", // Ab Eb
  AM: "[[eb4,g4]@3 ~ [g4,bb4]@2 [eb4,ab4,c5]@3 ~ [ab4,c5]@2 [eb4,g4]@4 [bb3,d4,f4]@15 ~, bb3@3 ~@13, ~@4 eb4 ~@5 eb4 ~ bb4@19 ~]/2", // Eb Gm Ab Eb Bb
  AN: "[g3,bb3,eb4]@15 ~", AO: "[eb4,g4]@3 ~ [g4,bb4]@2 [ab4,c5]@5 ~ [g4,bb4]@3 ~, ~@4 eb4 ~ eb4@9 ~",
  AP: "[eb4,g4]@3 ~ [eb4,bb4] ~ [ab4,c5]@5 ~ [g4,bb4]@3 ~, bb3@4 g4@2 eb4@9 ~", AQ: "[d4,f4,bb4,d5]@15 ~",
  AR: "[[d5,f5]@3 ~ [d5,f5]@2 [d5,f5]@5 ~ [c5,eb5]@3 ~ [c5,eb5]@4 [bb4,d5] ~ [bb4,d5]@9 ~, f4@31 ~, ~@12 d4@17 ~@3]/2", // Dm Cm Bb
  AS: "[ab4,c5,eb5]@3 ~ [ab4,c5,eb5] ~ [ab4,c5,eb5]@5 ~ [eb4,bb4,d5]@3 ~, eb4@11 ~@5", // Ab Ebmaj7
  AT: "[eb4,ab4,c5]@3 ~ [eb4,g4,bb4]@11 ~", // Ab Eb
  AU: "[eb4,g4]@3 ~ [g4,bb4]@2 [eb4,ab4,c5]@5 ~ [eb4,g4,bb4]@3 ~, bb3@3 ~@5, ~@4 eb4 ~@11", AV: "[bb3,d4,f4,bb4]@15 ~",
  AW: "[c4,ab4]@10 [bb3,g4]@2 [ab3,f4]@3 ~", AX: "[[bb3,eb4]@31 ~, g3@29 ~@3]/2",
  AY: "[[eb4,ab4,c5]@3 ~ [ab4,c5]@2 [g4,b4]@2 [ab4,c5]@3 ~ c5@2 [bb4,d5] ~ [c5,eb5]@4 d5@2 [ab4,c5]@9 ~, ~@4 eb4@27 ~, ~@12 ab4 ~@7 bb4 ~@11]/2", // Ab G Ab Bb Cm Ab
  AZ: "[[g4,bb4]@3 ~ g4@2 [gb4,a4]@2 [g4,bb4]@3 ~ [g4,bb4]@2 [ab4,c5]@2 [bb4,d5]@4 [ab4,c5]@2 g4@9 ~, eb4, ~@4 bb4 ~@17 bb4@7 ~@3]/2", // Gm Gbm Gm Ab Bb Ab
  BA: "[f4,ab4]@3 ~ [f4,ab4]@2 [e4,g4]@2 [f4,ab4]@3 ~ [f4,ab4]@2 [g4,bb4] ~, bb3", // Fm Em Fm Gm
  BB: "[bb3,ab4,c5]@2 ~@2 [bb3,ab4,c5] ~ [ab4,c5]@2 ~@2 [c4,g4,bb4] ~ [d4,f4,ab4]@3 ~, ~@3 bb3@2 ~@3", // Fm Ab C7 Ddim
  BC: "[[eb4,g4]@19 ~ [g4,bb4]@2 [ab4,c5]@5 ~ [g4,bb4]@3 ~, bb3 ~@7]/2", // Eb Gm Ab Gm
  BD: "[[bb3,eb4,g4]@20 [g4,bb4]@2 [ab4,c5]@5 ~ [g4,bb4]@3 ~, ~@20 eb4 ~ eb4@8 ~@2]/2", // Eb Gm Ab Gm
  BE: "[[bb4,d5]@15 ~ [d5,f5]@3 ~ f5@2 [d5,f5]@5 ~ [c5,eb5]@3 ~ [c5,eb5]@4 [bb4,d5] ~ [bb4,d5]@9 ~, f4, d4@11 ~@5, ~@20 d5 ~@27]/3", // Bb Dm Cm Bb
  BF: "[[ab4,c5,eb5]@11 ~ [bb4,d5]@3 ~ [ab4,c5]@3 ~ [eb4,g4,bb4] ~ [g4,bb4]@9 ~, eb4@19 ~@3 eb4@7 ~@3]/2", // Ab Bb Ab Eb Gm
  BG: "[eb4,g4]@3 ~ [g4,bb4]@2 [eb4,ab4,c5]@6 [eb4,g4,bb4]@3 ~, bb3@3 ~@5, ~@4 eb4 ~@11", BH: "[bb3,d4,f4,bb4]",
  BI: "[c4,ab4]@9 ~ [bb3,g4]@2 [ab3,f4]@3 ~", // Fm Eb Db
  BJ: "[eb4,g4]@3 ~ [g4,bb4]@2 [ab4,c5]@6 [g4,bb4]@4, bb3@3 ~@5, ~@4 eb4 ~ eb4@9 ~", // Eb Gm Ab Gm
  BK: "[bb3,eb4,g4]@4 [eb4,bb4] ~ [eb4,ab4,c5]@6 [eb4,g4,bb4]@3 ~, ~@2 g4 ~@5", // Eb Eb5 Ab Eb
  BL: "[[bb4,d5]@15 ~ [d5,f5]@3 ~ f5@2 [d5,f5]@5 ~ [c5,eb5]@3 ~ [c5,eb5]@4 [bb4,d5] ~ [bb4,d5]@9 ~, f4@47 ~, d4@31 ~@17, ~@20 d5 ~@27]/3", // Bb Dm Cm Bb
  BM: "[[ab4,c5,eb5]@3 ~ [ab4,c5,eb5] ~ [ab4,c5,eb5]@5 ~ [bb4,d5]@4 [ab4,c5]@3 ~ [eb4,g4,bb4] ~ [eb4,g4,bb4]@9 ~, eb4@19 ~@13]/2", // Ab Bb Ab Eb
  BN: "[eb4,g4]@3 ~ [eb4,g4] ~ [eb4,ab4,c5]@5 ~ [eb4,g4,bb4]@2 ~@2, bb3@2 bb4 ~@5", BO: "[d4,f4,bb4]@15 ~",
  BP: "[c4,ab4]@2 ~@2 [c4,ab4] ~ [c4,ab4]@3 ~ [bb3,g4] ~ [ab3,f4]@3 ~", BQ: "[~@4 bb3@3 ~, [g3,eb4]@29 ~@3]/2",
})).s("gm_synth_strings_1").gain(0.35)

// drums · kick
const kick = s("bd").struct("<A B A@23 B A@27 B A@31 B A@23 C ~@8>".pickRestart({
  A: "x!4", B: "x", C: "x!2 ~@2",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@2 A@11 B A@11 C A@27 C A@31 C A@23 ~@9>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!2 ~@2", C: "~@3 x",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<A B A@23 B A@27 B A@31 B A@20 C A@2 D ~@8>".pickRestart({
// … 46 more lines

More by Brunner & Brunner