Strudelify

I Wanna Rock You

Engelbert Humperdinck

KeyB majorTempo120 bpm
0:00/0:00
// I Wanna Rock You — Humperdinck Engelbert
// 120 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 3 "FINGERDBA" electric bass finger (copy of ch 2 "FINGERDBA" electric bass finger)
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · electric bass finger · "FINGERDBA"
const bass = note(`<
  ~ A@2 B@2 C D A D@2 E F B D A G B D H C I J H C K L M A@2 B@2 C D A D A@2 B@2 C D A D@2 A@2 C@2 B C D@2 E F B D A G B
  D H C L J H C K L N O A@2 B@2 C D A N P@2 A@2 B@2 C D A D A@2 B@2 C D Q D R S ~@8
>`.pickRestart({
  A: "b1 ~ b2 ~ f#2 ~ g#2 ~ b2!2 ~ b2 f#2 ~ g#2 ~", B: "e2 ~ e2 ~ b1 ~ c#2 ~ e2!2 ~ e2 b1 ~ c#2 ~",
  C: "c#2 ~ c#2 ~ g#1 ~ b1 ~ c#2!2 ~ c#2 g#1 ~ b1 ~", D: "f#2 ~ f#2 ~ c#2 ~ d#2 ~ f#2!2 ~ f#2 c#2 ~ d#2 ~",
  E: "b1 ~ b2 ~ f#2 ~ g#2 ~ b2!2 ~ b2 f#2 ~ a#2 ~", F: "d#2 ~ d#2 ~ a#1 ~ c#2 ~ d#2!2 ~ d#2 a#1 ~ c#2 ~",
  G: "d#2 ~ d#2 ~ a#1 ~ c#2 ~ d#2!2 ~ d#2!2 ~ d#2 ~", H: "g#2 ~ g#2 ~ d#2 ~ f#2 ~ g#2!2 ~ g#2 d#2 ~ f#2 ~",
  I: "f#1 ~ e2 ~ c#2 ~ e2 ~ f#2!2 ~ f#2 c#2 ~ e2 ~", J: "b1 ~ b2 ~ f#2 ~ g#2 ~ b2!2 ~@2 f#2 ~ g#2 ~, ~@11 b2@2 ~@3",
  K: "e2 ~ e2 ~ b1 ~ c#2 ~ e2 e2@2 e2 b1 ~ c#2 ~", L: "f#2 ~ f#2 ~ c#2 ~ e2 ~ f#2!2 ~ f#2 c#2 ~ e2 ~", M: "f#2 ~@15",
  N: "f#2@4 ~@10 f#2!2", O: "f#2 ~@13 f#2!2", P: "f#2@2 ~@12 f#2!2",
  Q: "f#2 ~ f#2 ~ c#2 ~ d#2 ~ f#2!2 ~ f#2 c#2 ~ g#2 ~", R: "b2 ~ b2 ~ f#2 ~ g#2 ~ b2!2 ~ b2 f#2 ~ g#2 ~",
  S: "b2 ~@3 f#2 ~@3 b2 ~@7",
})).s("gm_electric_bass_finger").gain(0.28)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~ A B C D E F@4 G H I J G H I J K@2 L@2 M@3 N O P Q R D S T@2 U P V R D S T@2 W@2 X@2 Y@2 Z@2 AA@2 G H I J G H I J K@2
  L@2 M@3 N AB AC P V R D S T@2 AB AC@2 P V R D S T@2 AD P V R D S AE AF AG AH@2 ~@8
>`.pickRestart({
  A: "[b2,b3]@7 ~ [f#2,f#3,c#5]@8, [d#4,f#4], b4 ~", B: "[f#4,b4,d#5], [b2,b3]@7 ~",
  C: "[e2,e3,g#4,b4]@7 ~ [b1,b2,g#4,b4]@8, e5", D: "[e2,e3,e5]@8 [d#2,d#3,d#5]@7 ~, [g#4,b4]@15 ~",
  E: "[c#2,c#3,e4,g#4,c#5]@15 ~", // C#m
  F: "[[a#4,c#5]@15 ~ [b1,b2,f#4,b4,d#5]@15 ~ [f#2,f#3,f#4,a#4,c#5]@32, f#5, [f#2,f#3]@13 ~@51]/4", G: "b3", H: "a#3",
  I: "g#3", J: "a#3@15 ~", K: "[g#4@15 ~@3 c#4@12 ~@2, [b3,g#5], d#4@17 e4@14 ~, ~@8 g#4@7 ~]/2",
  L: "[[a#3,c#4,f#4]@15 ~ [b3,d#4,f#4]@15 ~, f#5]/2", // F# B
  M: "[[b3,d#4,g#4]@15 ~ [b3,c#4,e4,g#4]@15 ~@8 e5@9, g#5@5 ~, ~@32 [b3,e4,g#4]@15 ~]/3", N: "[a#3,c#4,f#4,f#5]@15 ~",
  O: "[a#3,c#4,f#4,f#5,a#5,c#6,f#6] ~@7", P: "[b2,b3]@7 ~ [c#3,c#4,c#5]@8, [d#4,f#4], b4 ~",
  Q: "[f#4,b4,d#5], [d#3,d#4]@7 ~", R: "[e2,e3,g#4,b4]@7 ~@5 [a2,a3,a5]@4, e5, ~ [g#4,b4]",
  S: "[c#2,c#3,c#5]@3 [c#2,c#3,c#5], [e4,g#4]@15 ~", // C# E
  T: "[[a#4,c#5]@15 ~ [b1,b2,f#4,b4,d#5]@15 ~, f#5, [f#2,f#3]@13 ~@19]/2", U: "[f#2,f#3,f#4,a#4,c#5,f#5] ~@3",
  V: "[f#4,b4,d#5], [d#3,d#4]@13 ~@3", W: "[[f#2,f#3,f#4,a#4,c#5,f#5]@31 ~]/2", X: "[[b2,b3,b4,d#5,f#5]@31 ~]/2",
  Y: "[[c#5,e5,g#5], [c#3,c#4]@15 ~]/2", Z: "[[b4,g#5] [c#2,c#3,c#5,g#5], e5, [e2,e3]@7 ~@9]/2",
  AA: "[f#2,f#3,a#4,c#5,f#5]/2", AB: "[a#3,c#4,f#4,f#5] ~@5 [f#3,f#4,f#5] ~", AC: "~@6 [f#3,f#4,f#5] ~",
  AD: "[f#2,f#3,f#4,a#4,c#5,f#5] ~@15", AE: "[c#5,f#5], [f#2,a#4]@7 ~, f#3@3 ~", AF: "[f#2,f#3,a#4,f#5], c#5@7 ~",
  AG: "[f#2,f#3,f#4,a#4,c#5,f#5]@15 ~", // F#
  AH: "[[b2,b3,f#4,b4,d#5,b5]@19 ~ [f#3,f#4,f#5]@4 [b3,d#4,f#4,b4,d#5,f#5,b5]@4 ~@4]/2", // B F# B
})).s("gm_string_ensemble_1").gain(0.26)

// chords · string ensemble 2 · "SLOWSTRIN"
const string_ensemble_2 = note(`<
  ~ A B C D E F@4 G@2 H I J@2 H K L@2 M@2 N@2 O P@2 Q R S T E U@2 V@2 R S T E W@2 X@2 Y@2 Z@2 AA AB AC@2 G@2 H I J@2 H K
  L@2 M@2 N@2 O AD@2 ~ Q R S T E U@2 ~@3 Q R S T E U@2 AE@2 R S T E AF@2 AG AH@2 ~@8
>`.pickRestart({
  A: "[b2,b4] [f#2,f#3,c#5], [d#4,f#4], b3@3 ~@5", B: "[b2,f#4,b4,d#5]@15 ~, b3@13 ~@3",
  C: "[e2,e3,g#4,b4]@7 ~ [b1,b2,g#4,b4]@8, e5", D: "[e2,e3,e5]@8 [d#2,d#3,d#5]@7 ~, [g#4,b4]",
  E: "[c#2,c#3,e4,g#4,c#5]@15 ~", // C#m
  F: "[[a#4,c#5]@15 ~ [b1,b2,f#4,b4,d#5]@15 ~ [f#2,f#3,f#4,a#4,c#5]@32, f#5, [f#2,f#3]@13 ~@51]/4", // A#m B F#
  G: "[[f#4,b4] [d#2,d#3,a#4], d#4@31 ~, [b2,b3]@7 ~@9]/2", H: "[e2,e3,b3,e4,g#4]", I: "[f#2,c#4,f#4,a#4], f#3@7 ~",
  J: "[[b1,b2,b4] [d#2,d#3,a#4], [d#4,f#4]]/2", K: "[f#2,f#3,c#4,f#4,a#4]",
  L: "[[b3,d#4,g#4]@16 [b3,c#4,e4,g#4]@15 ~, [g#5,g#6]]/2", M: "[[a#3,c#4,f#4]@15 ~ [b3,d#4,f#4]@15 ~, [f#5,f#6]]/2",
  N: "[[b3,d#4,g#4]@15 ~ [b3,c#4,e4,g#4]@15 ~, [g#5,g#6]]/2", O: "[b3,e4,g#4,e5,e6]",
  P: "[~@8 f#7 ~@7, [c#4,f#4,a#4,f#5,f#6]@9 ~@7]/2", Q: "[b2,b3]@7 ~ [c#3,c#4,c#5]@8, [d#4,f#4], b4 ~",
  R: "[d#3,f#4,b4,d#5]@15 ~, d#4@13 ~@3", S: "[e2,e3,g#4,b4]@7 ~@5 [a2,a3]@3 ~, e5, ~ [g#4,b4]",
  T: "[e2,e3,e5]@8 [d#2,d#3,d#5]@7 ~, [g#4,b4]@15 ~", // E D# G#m
  U: "[[a#4,c#5]@15 ~ [b1,b2,f#4,b4,d#5]@15 ~, f#5, [f#2,f#3]@13 ~@19]/2", // A#m B F#
  V: "[[f#2,f#3,f#4,a#4,c#5]@9 ~@7 [b3,b4]@8 [c#3,c#4,c#5]@8, f#5, ~ [d#4,f#4], ~@8 b2@3 ~@5]/2", // F# B C# D#m
  W: "[[a#4,c#5]@15 ~ [b1,b2,f#4,b4,d#5]@15 ~, f#5@31 ~, [f#2,f#3]@13 ~@19]/2", X: "[f#2,f#3,f#4,a#4,c#5,f#5]/2",
  Y: "[b3,b4,d#5,f#5]/2", Z: "[c#4,c#5,e5,g#5]/2", AA: "[e3,b4,e5,g#5]", AB: "[c#3,c#5,e5,g#5]",
  AC: "[f#3,a#4,c#5,f#5]/2", AD: "[[c#4,f#4,a#4,f#5,f#6]@9 ~@7]/2",
  AE: "[[f#2,f#3,f#4,a#4,c#5] ~@15 [b2,b3]@7 ~ [c#3,c#4,c#5]@8, f#5, ~ [d#4,f#4], ~@2 b4 ~]/2", // F# B C# D#m
  AF: "[[a#4,c#5,f#5]@31 ~, [f#2,f#3]@29 ~@3]/2", AG: "[f#2,f#3,f#4,a#4,c#5,f#5]", AH: "[[b2,b3,f#4,b4,d#5]@23 ~@9]/2",
})).s("gm_string_ensemble_2").gain(0.3)

// chords · epiano2 · "E.PIANO"
const epiano2 = note(`<
  A B C D E F@2 G@3 ~@7 H I J K L M J N O@2 P Q R S T@2 U V@2 Q R S T@2 U W@2 X Y Z AA AB AC AD ~@8 AE AF J K L M J N
  AG@2 AH P Q R S T@2 U AI@2 AH P Q R S AJ@2 U V@2 Q R S T@2 AK AL@2 AM ~@8
>`.pickRestart({
  A: "~@2 [d#5,d#6] ~ [d#5,d#6] ~ [d#5,d#6] ~ [d#5,d#6] ~ [c#5,c#6] ~ [c#5,c#6] ~ [b4,b5] ~", // D# C# B
  B: "[b4,b5] ~@11 c#5@4, [b2,b3,d#4,f#4]@15 ~", // B
  C: "d#5@2 d#5@2 [d#5,d#6]@2 [d#5,d#6]@2 ~@2 [c#5,c#6]@2 [c#5,c#6]@2 [b4,b5] ~, [b2,b3,f#4], b4@7 ~, ~@2 d#6 ~@5 [d#5,d#6]@7 ~", // D# C# B B5 D#
  D: "e5@2 ~ g#4@3 [e4,g#4,b4]@2, [e2,e3,c#4,c#5,c#6], b4@3 g#5@5, g#4 e4@2 ~, ~ e5@3", // E C#m
  E: "g#4@2 [g#3,g#4,g#5]@3 [g#3,g#4,g#5]@3 ~@6 [b3,b4,b5]@2, [e2,e3,e4,b4] [d#2,d#3,g#3,e4,g#4,d#5,g#5], ~@11 [a#3,a#4,a#5]@5", // G# B E5 Emaj7 A#
  F: "[c#5@2 [c#4,c#5,c#6] ~@2 [b3,b4,b5]@2 ~ a#4 [a#3,a#4,a#5]@2 ~@3 [f#3,f#4,f#5]!2, [c#2,c#3,d#4,e4,g#4,d#6] [f#2,c#5], d#5@5 d#5@3 ~@3 [a#3,a#4,a#5]@5, ~@3 [c#4,c#5,c#6]@5 [f#3,f#5]@6 ~@2, ~@7 [b3,b4,b5]@9]/2", // C# B A# F# C#m F#5 A# C# …
  G: "[b4@4 ~@10 c#5@2 f#5@15 ~ [c#6,f#6]@16, [b1,b2,d#4,f#4]@14 c#6@17 f#5@15 ~@2, [c#4,c#5,c#6]@7 c#4@10 ~@7, ~@4 [b3,b4,b5]@6 [b3,b4,b5]@6 ~@15 a#5@17, ~@3 [a#3,a#4,a#5]@5 [f#2,f#3,a#4,c#5]@9 ~@7]/3", // F#5 B C# B A# F#
  H: "~@7 a#5, ~@3 f#3@5, ~@7 [c#4,f#4,c#5,f#5]@9, ~@2 b5!2, ~@5 c#6@3", I: "[g#2,g#3,b3,d#4,g#4], g#5@7 ~@9",
  J: "[c#2,c#3,b3,c#4,e4,g#4]", K: "[f#2,f#3,a#3,c#4,f#4]",
  L: "[b3,d#4,f#4]@7 ~ [g#3,b3,d#4,g#4,b4,d#5,g#5]@3 ~ [f#3,a#3,c#4,f#4,a#4,c#5,f#5]@4, [b1,b2], g#4 ~@15", // B G#m F# B
  M: "[g#2,g#3,b3,d#4,g#4,b4,d#5,g#5]", N: "[e2,e3,b3,e4,g#4]",
  O: "[~@8 [f#2,f#3,f#6] ~@7, [f#2,f#3,c#4,f#4,a#4]@15 [a#5,c#6]@4 ~@13, ~@7 f#5@2 ~@7]/2", // F# A#m
  P: "~@2 c#5!2, [b2,b3,b4,b5]@15 ~, ~@8 [c#2,c#3,c#4,c#6]@7 ~", Q: "[d#2,b2,d#3,b3,d#4,f#4,b4,d#5,d#6]",
  R: "[e4,g#4,b4]@3 [a2,a3,e4,g#4,a4,b4,a5,a6], [e2,e3,e5,e6]", S: "[e2,e3,e4,b4,e5,e6] [d#2,d#3,d#4,e4,d#5,d#6], g#4",
  T: "[~@10 d#5@2 [c#3,c#4,c#5,c#6] ~@3 [f#2,f#3,f#4,a#4,c#5,f#5,f#6]@16, [c#2,c#3,c#4,e4,g#4,c#5,c#6]@3 [e4,g#4]@5, ~@12 c#2@2 ~@2 g#2 ~@15]/2", // C# F# C#m E
  U: "[b2,b3,b4,b5]@3 [b2,b3,b4,b5], [b1,d#4,f#4]", // B
  V: "[[f#2,f#3,f#4,f#5,f#6] ~@11 c#5@2 c#5@2, [a#4,c#5]@18 ~@6 [c#2,c#3,c#4,c#6]@7 ~, ~@16 [b2,b3,b4,b5]@15 ~]/2", // F# A#m C# B
  W: "[[f#2,f#3,f#4,f#5,f#6]@2 ~@16 [d#4,d#5,d#6] ~ [d#4,d#5,d#6] ~ [d#4,d#5,d#6] ~ [d#4,d#5,d#6] ~ [c#4,c#5,c#6] ~ [c#4,c#5,c#6] ~ [b3,b4,b5] ~, [a#4,c#5]@9 ~@7]/2", // F# D# C# B A#m
  X: "[b3,b4,b5]@2 ~@2 [d#3,d#4,d#5] ~ [f#3,f#4,f#5]@7 ~@3", // B D# F#
  Y: "~@2 [d#3,d#4,d#5]@2 ~ [d#3,d#4,d#5]@2 ~ [d#3,d#4,d#5]@2 ~ [e3,e4,e5]@2 ~ [f#3,f#4,f#5]@2", // D# E F#
  Z: "[c#3,c#4,c#5]@11 ~@5", // C#
  AA: "~@2 [d#4,d#5,d#6] ~ [d#4,d#5,d#6] ~ [d#4,d#5,d#6] ~ [d#4,d#5,d#6] ~ [c#4,c#5,c#6] ~ [c#4,c#5,c#6] ~ [b3,b4,b5] ~", // D# C# B
  AB: "[b3,b4,b5]@2 ~@2 [e3,e4,e5] ~ [g#3,g#4,g#5]@8 ~@2", // B E G#
  AC: "~@2 [g#3,g#4,g#5]@2 ~ [g#3,g#4,g#5]@2 ~ [g#3,g#4,g#5]@2 ~ [a#3,a#4,a#5]@2 ~ [b4,b5]@2, ~@14 b3 ~", // G# A# B
  AD: "[c#4,c#5,c#6]", AE: "~@5 b4 ~ c#5, ~@3 e2@3 [f#2,c#3,f#3,f#4,a#4,d#5]@2, ~@7 [b2,e3,b3,e4]@5 ~@4, ~@2 g#4 ~",
  AF: "[g#2,g#3,b3,d#4,g#4], [g#5,b5]@7 ~@9", // G#m
  AG: "[~@16 [f#2,f#3,f#6]@2 ~@10 [f#2,f#3,f#4,f#5] ~@3, [f#2,f#3,c#4,f#4,a#4]@15 [a#5,c#6]@4 ~@13, ~@7 f#5@2 ~@7]/2", // F# A#m
  AH: "~@12 [f#2,f#3,f#4,f#5] ~@3", // F#
  AI: "[[f#2,f#3]@2 ~@10 [f#2,f#3,f#4] ~@15 [f#2,f#3,f#4,f#5] ~@3, [a#4,c#5]@9 ~@7, f#5@3 f#5@3 ~@2]/2", // F# A#m
  AJ: "[~@10 d#5@2 [c#3,c#4,c#5,c#6] ~@3 [f#2,f#3,f#4,a#4,c#5,f#5,f#6]@16, [c#2,c#3,c#4,e4,g#4,c#5,c#6]@3 [e4,g#4,d7,a7]@5, ~@12 c#2@2 ~@2 g#2 ~@15]/2", // C# F# C#m E7
  AK: "[f#2,f#3,f#4,a#4,c#5,f#5,f#6]", // F#
  AL: "[[f#3,f#4,f#5,f#6]@2 ~@10 [f#3,f#4,f#5,f#6] ~@3 [b2,f#3,b3,b4,b5] ~@15, [f#2,a#4,c#5]@9 ~@7, ~@16 [d#5,f#5]@15 ~]/2", // F# B5 F# D#m
  AM: "~@4 [f#3,f#4,f#5,f#6] ~@3 [b2,f#3,d#5,f#5]@2 ~@6, ~@8 [b3,b4,b5,b6] ~@7", // F# B
})).s("gm_epiano2").gain(0.32)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@18 A B C D E F G H I ~@17 J K L@2 M N O P ~@8 A B Q R E F G H I ~@8 I ~@28
>`.pickRestart({
  A: "~@2 [g#4,b4,d#5] ~ [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~@2 [g#4,b4,d#5] ~@2 [g#4,b4,d#5] ~", // G#m
  B: "~@2 [g#4,b4,d#5] ~ [g#4,b4,d#5] ~@3 [f#4,b4] ~@2 [f#4,b4] ~@2 [f#4,b4] ~", // G#m B5
  C: "[g#4,c#5]@2 ~@7 [a#4,c#5] ~@2 [a#4,c#5] ~ [b4,d#5] ~", D: "~@8 [b4,d#5] ~@2 [b4,d#5] ~@2 [a#4,c#5] ~",
  E: "[b4,d#5] ~@5 [g#4,b4,d#5] ~@3 [g#4,b4,d#5] ~ [g#4,b4,d#5] ~@3", // B G#m
  F: "~@2 [g#4,b4,d#5] ~ [g#4,b4,d#5] ~@3 [g#4,b4] ~@2 [g#4,b4] ~@2 [g#4,b4] ~", // G#m
  G: "[g#4,b4] ~@5 [g#4,b4] ~@3 [g#4,b4] ~@3 [g#4,b4] ~", // G#m
  H: "~@2 [a#4,c#5] ~ [a#4,c#5] ~@3 [a4,a#4,c#5] ~@2 [a4,a#4,c#5] ~@2 [a4,a#4,c#5] ~", I: "[a4,a#4,c#5] ~@15",
  J: "~@8 [b4,d#5] ~@5 [b4,d#5] ~", K: "~@8 [b4,c#5,d#5] ~@7",
  L: "[~@8 [g#4,b4,c#5] ~@2 [g#4,b4] c#5 ~@2 c#5@2 ~@7 [g#4,c#5] ~@2 [g#4,c#5] ~@4, ~@7 [g#4,b4] ~@8]/2", // C#7 G#m C#5 G#m
  M: "~@8 [g#4,b4]@2 ~ [f#4,g#4,b4] ~@2 [f#4,g#4,b4] ~", N: "~@8 [g#4,b4,c#5] ~@2 [g#4,b4,c#5] ~@4",
  O: "~@8 [g#4,a#4,c#5]@2 ~@2 a#4 ~@2 [g#4,a#4,c#5], ~@11 [g#4,c#5]@2 ~@3", // A#m7 C#5
  P: "~@3 a#4 ~@5 a#4 ~@2 a#4 ~@3, ~@2 [g#4,c#5]@2 ~@4 [g#4,c#5]@2 ~ [g#4,c#5]@2 ~@3", // C#5
  Q: "[g#4,c#5] ~@8 [a#4,c#5] ~@2 [a#4,c#5] ~ [b4,d#5] ~", R: "~@8 [b4,d#5] ~@2 [b4,d#5]@2 ~ [a#4,c#5] ~",
})).s("gm_acoustic_guitar_steel").gain(0.36)

// chords · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  ~ A@2 B@2 C D A D@2 A E F G A G F G H I J K H I F J L A@2 B@2 C D A M A@2 B@2 C D A D@2 N@2 O@2 P O Q@2 A E F G A G F
  G H I J K H I F J L ~ A@2 B@2 C D A L ~@2 A@2 B@2 C D A M A@2 B@2 C D@3 A R ~@8
>`.pickRestart({
  A: "~@2 [d#5,f#5,b5] ~@3 [d#5,f#5,b5] ~@3 [d#5,f#5,b5] ~@3 [d#5,f#5,b5] ~", // B
  B: "~@2 [e5,g#5,b5] ~@3 [e5,g#5,b5] ~@3 [e5,g#5,b5] ~@3 [e5,g#5,b5] ~", // E
  C: "~@2 [e5,g#5,c#6] ~@3 [e5,g#5,c#6] ~@3 [e5,g#5,c#6] ~@3 [e5,g#5,c#6] ~", // C#m
  D: "~@2 [f#5,a#5,c#6] ~@3 [f#5,a#5,c#6] ~@3 [f#5,a#5,c#6] ~@3 [f#5,a#5,c#6] ~", // F#
  E: "~@2 [d#5,f#5,a#5] ~@3 [d#5,f#5,a#5] ~@3 [d#5,f#5,a#5] ~@3 [d#5,f#5,a#5] ~", // D#m
  F: "~@2 [b4,e5,g#5] ~@3 [b4,e5,g#5] ~@3 [b4,e5,g#5] ~@3 [b4,e5,g#5] ~", // E
  G: "~@2 [c#5,f#5,a#5] ~@3 [c#5,f#5,a#5] ~@3 [c#5,f#5,a#5] ~@3 [c#5,f#5,a#5] ~", // F#
  H: "~@2 [b4,d#5,g#5] ~@3 [b4,d#5,g#5] ~@3 [b4,d#5,g#5] ~@3 [b4,d#5,g#5] ~", // G#m
  I: "~@2 [b4,c#5,e5,g#5] ~@3 [b4,c#5,e5,g#5] ~@3 [b4,c#5,e5,g#5] ~@3 [b4,c#5,e5,g#5] ~", // C#m7
  J: "~@2 [a#4,c#5,f#5] ~@3 [a#4,c#5,f#5] ~@3 [a#4,c#5,f#5] ~@3 [a#4,c#5,f#5] ~", // F#
  K: "~@2 [b4,d#5,f#5] ~@3 [b4,d#5,f#5] ~@3 [b4,d#5,f#5] ~@3 [b4,d#5,f#5] ~", L: "[a#4,c#5,f#5] ~@15",
  M: "[f#5,a#5,c#6] ~@15", N: "~@2 [f#5,b5,d#6] ~@3 [f#5,b5,d#6] ~@3 [f#5,b5,d#6] ~@3 [f#5,b5,d#6] ~",
  O: "~@2 [g#5,c#6,e6] ~@3 [g#5,c#6,e6] ~@3 [g#5,c#6,e6] ~@3 [g#5,c#6,e6] ~", // C#m
  P: "~@2 [g#5,b5,e6] ~@3 [g#5,b5,e6] ~@3 [g#5,b5,e6] ~@3 [g#5,b5,e6] ~", // E
  Q: "~@2 [a#5,c#6,f#6] ~@3 [a#5,c#6,f#6] ~@3 [a#5,c#6,f#6] ~@3 [a#5,c#6,f#6] ~", // F#
  R: "[d#5,f#5,b5] ~@3 [a#4,c#5,f#5] ~@3 [d#5,f#5,b5] ~@7", // B F# B
})).s("gm_pizzicato_strings").gain(0.24)

// drums · kick
const kick = s("bd").struct("<~ A@67 B C A@7 B C@2 A@17 D ~@8>".pickRestart({
  A: "x!4", B: "x ~@2 x", C: "~@3 x", D: "x!3 ~",
})).gain(0.51)

// drums · snare
const snare = s("sd").struct(`<
  ~ A@8 B A@7 C D A@6 E F A@7 B A@8 E A@7 B A@7 C D A@6 E G H A@7 G H@2 A@7 B A@8 E I ~@8
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x!2 ~ x ~ x ~ x!2", C: "~@2 x ~@3 x!2", D: "x!2 ~ x", E: "~@4 x ~@7 x ~ x!2", F: "x",
  G: "x ~@2 x", H: "~@3 x", I: "x!3 ~",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<A B@8 C B@16 D B@7 C B@8 C B@7 C B@35 C B@8 C E ~@8>".pickRestart({
  A: "~@14 x!2", B: "~ x ~ x ~ x ~ x", C: "~@4 x ~@3 x ~ x ~ x ~ x!2", D: "~@2 x ~@3 x ~@3 x ~@3 x!2",
  E: "x ~@3 x ~ x!3 ~@7",
})).gain(0.26)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~ A@8 B A@7 C D A@6 E F A@7 B A@8 E A@7 B A@7 C D A@6 E G H A@7 G H@2 A@7 B A@8 E I ~@8
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x!2 ~ x ~ x ~ x!2", C: "~@2 x ~@3 x!2", D: "x!2 ~ x", E: "~@4 x ~@7 x ~ x!2", F: "x",
  G: "x ~@2 x", H: "~@3 x", I: "x!3 ~",
})).gain(0.26)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A B@8 C B@24 C B@8 C B@7 C B@35 C B@8 C D ~@8>".pickRestart({
  A: "~@14 x!2", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", C: "x ~ x!3 ~ x!3 ~ x!6", D: "x ~ x ~ x ~ x!3 ~@7",
})).gain(1.04)

stack(
  bass, string_ensemble_1, string_ensemble_2, epiano2, acoustic_guitar_steel, pizzicato_strings, kick, snare, hihat,
  crash, tambourine, cabasa
// … 1 more lines

More by Engelbert Humperdinck