Strudelify

Not Sorry

The Cranberries

KeyC majorTempo101 bpm
0:00/0:00
// Not Sorry — The Cranberries
// 101 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 106 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(101/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 · pad poly
const pad_poly = note(`<
  ~@16 A B C D A E F D A B C G A E F H@3 I@3 J@5 K@5 L@3 M@8 N@8 O@3 P@6 Q@3 R@8 S@8 T@2 ~@10
>`.pickRestart({
  A: "a4@6 ~@2 a4@6 ~@2 a4@3 ~ g4@3 ~ a4@3 ~ b4@3 ~, [c4,e4]@13 ~@3", // C
  B: "c5@3 ~ b4@3 ~ a4@3 ~ g4@3 ~ a4@10 ~@2 c5@3 ~, [c4,e4]@13 ~@3", // C
  C: "c5@6 ~@2 c5@6 ~@2 c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~, [e4,g4]@13 ~@3", // Em
  D: "b4@3 ~ b4@6 ~@2 b4@3 ~ b4@3 ~ c5@3 ~ d5@3 ~ b4@3 ~, [d4,g4]@13 ~@3", // G5
  E: "c5@3 ~ b4@3 ~ a4@3 ~ g4@3 ~ a4@10 ~@2 e4@3 ~, [c4,e4]@13 ~@3", // C
  F: "e4@6 ~@2 e4@6 ~@2 g4@3 ~ g4@3 ~ g4@3 ~ a4@3 ~, [g3,c4]@13 ~@3 [c4,e4]@13 ~@3", // C5 C
  G: "~@4 b4@3 ~ b4@3 ~ b4@3 ~ b4@3 ~ c5@3 ~ d5@3 ~ b4@3 ~, [d4,g4]@13 ~@3", // G5
  H: "[b4@3 ~ b4@6 ~@2 b4@3 ~ b4@3 ~ c5@3 ~ d5@3 ~ [e4,a4,e5]@23 ~@9 g4@7 ~ a4@3 ~ e4@3 ~ g4@7 ~ a4@10 ~@2, [d4,g4]@13 ~ c4@16 [a3,c4]@8 c4@10, ~@76 a3@17 ~@3]/3", // A5 G5 Am
  I: "[e4@6 ~@2 e4@6 ~@2 g4@3 ~ g4@3 ~ g4@3 ~ a4@3 ~ b4@3 ~ b4@6 ~@2 b4@3 ~ b4@3 ~ c5@3 ~ d5@3 ~@5 [f4,f5]@26 ~@6, c4 c4@3 c4@2, g3@13 ~@3 e4@13 ~@3 [d4,g4]@26 ~@2 a4@30 ~@6]/3", // F G5
  J: "[~@8 [a4,d5]@6 ~@2 [b4,e5]@6 ~@2 [c5,e5]@3 ~ [a4,e5]@7 ~ a4@3 ~ a4@3 ~ e5@7 ~ d5@3 ~ c5@3 ~ d5@7 c5@3 ~ b4@3 ~ a4@7 ~ a4@3 ~ a4@3 ~ b4@3 ~ c5@3 ~ b4@3 ~ a4@3 ~ g4@3 ~ a4@9 ~@2 b4@3 ~ c5@3 ~ b4@3 ~ a4@3 ~ g4@3 ~ a4@3 ~ a4@3 ~ a4@3 ~ [a4,d#5]@6, [c4,f4]@28 c4@47 c4@20 c4@31 c4@34, ~@28 e4@13 ~@3 [e4,a4]@13 ~@3 [e4,a4]@13 ~@2 e4@16 ~@4 f4@25 ~@6 f4@25 ~@9]/5", // D5 E5 C A5 Adim F5 A5
  K: "[~@2 d#5@3 a4@3 ~ [a4,d#5]@7 ~ d#5@3 ~ a4@3 ~ c5@3 ~ a4@3 ~ c5@3 ~ a4@3 ~ c5@3 ~ a4@3 ~ c5@3 ~ b4@6 ~ [f4,a4]@25 ~@15 a4@6 ~ b4@3 ~ c5@6 ~@2 a4@7 ~ a4@3 ~ a4@3 ~ e5@7 ~ d5@3 ~ c5@3 ~ [e4,a4,d5]@7 c5@2, ~@29 c4@31 c4@32 [c4,f4]@27 c4@41, ~@29 e4@25 ~@65 e4@13 ~@3 [e4,a4]@13 ~@12]/5", // Adim F Dsus2 F5 A5
  L: "[~@2 b4@3 ~ a4@7 ~ a4@3 ~ a4@3 ~ [b4,d5]@3 ~ [c5,e5]@3 ~ [b4,d5]@3 ~ [a4,c5]@3 ~ [g4,b4]@3 ~ [a4,c5]@9 ~@2 [b4,d5]@3 ~ [c5,e5]@3 ~ [b4,d5]@3 ~ [a4,c5]@3 ~ [g4,b4]@3 ~ [a4,c5]@3 ~ a4@3 ~ a4@3 ~ [a4,d#5]@7 ~ d#5@3, ~@6 c4@20 c4@31 c4@39, ~@6 e4@16 ~@4 f4@25 ~@6 f4@25 ~@14]/3", // Bm C Bm Am G Am Bm C …
  M: "[a4@3 ~ [a4,d#5]@7 ~ d#5@3 ~ a4@3 ~ c5@3 ~ a4@3 ~ c5@3 ~ a4@3 ~ c5@3 ~ a4@3 ~ c5@3 ~ [b4,e5]@6 ~ a4@6 ~@2 a4@6 ~@2 a4@3 ~ g4@3 ~ a4@3 ~ b4@3 ~ c5@3 ~ b4@3 ~ a4@3 ~ g4@3 a4@9 ~@3 c5@3 ~ c5@6 ~@2 c5@6 ~@2 c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ b4@3 ~ b4@6 ~@2 b4@3 ~ b4@3 ~ c5@3 ~ d5@3 ~ b4@3 ~ a4@6 ~@2 a4@6 ~@2 a4@3 ~ g4@3 ~ a4@3 ~ b4@3 ~ c5@3 ~ b4@3 ~ a4@3 ~ g4@3 ~ a4@10 ~@2 e4@3 ~ [g3,c4]@8 e4@2, ~@24 c4@31 c4@32 c4@95 c4@32 c4@32 ~@10, ~@24 e4@25 ~@6 e4@25 ~@7 e4@25 ~@6 [e4,g4]@26 ~@6 [d4,g4]@26 ~@6 e4@26 ~@6 e4@26 ~@6 e4@6 ~@4]/8", // Adim E5 C5 Em G5
  N: "[~@6 g4@3 ~ g4@3 ~ g4@3 ~ a4@3 ~ b4@3 ~ b4@6 ~@2 b4@3 ~ b4@3 ~ c5@3 ~ d5@3 ~ b4@3 ~ a4@6 ~@2 a4@6 ~@2 a4@3 ~ g4@3 ~ a4@3 ~ b4@3 ~ c5@3 ~ b4@3 ~ a4@3 ~ g4@3 ~ a4@10 ~@2 c5@3 ~ c5@6 ~@2 c5@6 ~@2 c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~@5 b4@3 ~ b4@3 ~ b4@3 ~ b4@3 ~ c5@3 ~ d5@3 ~ b4@3 ~ a4@6 ~@2 a4@6 ~@2 a4@3 ~ g4@3 ~ a4@3 ~ b4@3 ~ c5@3 ~ b4@3 ~ a4@3 ~ g4@3 ~ a4@10 ~@2 e4@3 ~ [g3,c4]@8 e4@2, ~@3 c4@24 c4@16 c4@48 c4@16 c4@16 ~@5, ~@6 e4@13 ~@3 [d4,g4]@26 ~@6 e4@26 ~@6 e4@26 ~@6 [e4,g4]@26 ~@6 [d4,g4]@26 ~@6 e4@26 ~@6 e4@26 ~@6 e4@6 ~@4]/8", // C5 G5 Em G5
  O: "[~@6 g4@3 ~ g4@3 ~ g4@3 ~ a4@3 ~ b4@3 ~ b4@6 ~@2 b4@3 ~ b4@3 ~ c5@3 ~ d5@3 ~ [e4,a4,e5]@23 ~@9 g4@7 ~ a4@3 ~ e4@2, ~@3 c4@22 c4@16 [a3,c4]@7, ~@6 e4@13 ~@3 [d4,g4]@26 ~@48]/3", // A5 Am G5
  P: "[~@2 g4@7 ~ a4@10 ~@2 e4@6 ~@2 e4@6 ~@2 g4@3 ~ g4@3 ~ g4@3 ~ a4@3 ~ b4@3 ~ b4@6 ~@2 b4@3 ~ b4@3 ~ c5@3 ~ d5@3 ~@5 [f4,f5]@26 ~@14 [a4,d5]@6 ~@2 [b4,e5]@6 ~@2 [c5,e5]@3 ~ [a4,e5]@7 ~ a4@3 ~ a4@3 ~ e5@7 ~ d5@3 ~ c5@3 ~ d5@7 ~ c5@3 ~ b4@2, ~ c4@10 c4@8 c4@24 c4@16 [c4,f4]@14 c4@23, ~@2 a3@17 ~@3 g3@13 ~@3 e4@13 ~@3 [d4,g4]@26 ~@2 a4@30 ~@34 e4@14 ~@2 [e4,a4]@14 ~@2 [e4,a4]@13 ~]/6", // F D5 E5 C A5 F5 G5 A5
  Q: "[~@2 a4@7 ~ a4@3 ~ a4@3 b4@3 ~ c5@3 ~ b4@3 ~ a4@3 ~ g4@3 ~ a4@9 ~@3 b4@3 ~ c5@3 ~ b4@3 ~ a4@3 ~ g4@3 a4@3 ~ a4@3 ~ a4@3 ~ [a4,d#5]@7 ~ d#5@3 ~ a4@3 ~, ~@2 c4@19 c4@32 c4@43, ~@2 e4@16 ~@3 f4@25 ~@7 f4@25 ~@18]/3", // Adim
  R: "[[a4,d#5]@7 ~ d#5@3 ~ a4@3 ~ c5@3 ~ a4@3 c5@3 ~ a4@3 ~ c5@3 ~ a4@3 ~ c5@3 ~ b4@6 ~@2 [f4,a4]@25 ~@14 a4@6 ~@2 b4@3 ~ c5@6 ~@2 a4@7 ~ a4@3 ~ a4@3 e5@7 ~ d5@3 ~ c5@3 ~ d5@7 ~ c5@3 ~ b4@3 ~ a4@7 ~ a4@3 ~ a4@3 ~ [b4,d5]@3 [c5,e5]@3 ~ [b4,d5]@3 ~ [a4,c5]@3 ~ [g4,b4]@3 ~ [a4,c5]@9 ~@3 [b4,d5]@3 ~ [c5,e5]@3 ~ [b4,d5]@3 ~ [a4,c5]@3 ~ [g4,b4]@3 [a4,c5]@3 ~ a4@3 ~ a4@3 ~ [a4,d#5]@7 ~ d#5@3 ~ a4@3 ~ [a4,d#5]@5, ~@20 c4@31 c4@31 c4@28 c4@47 c4@19 c4@32 c4@48, ~@20 e4@25 ~@37 f4@25 ~@3 e4@13 ~@2 [e4,a4]@13 ~@3 [e4,a4]@13 ~@3 e4@16 ~@3 f4@25 ~@7 f4@25 ~@23]/8", // Adim F Bm C Bm Am G Am …
  S: "[~@3 d#5@3 ~ a4@3 ~ c5@3 ~ a4@3 c5@3 ~ a4@3 ~ c5@3 ~ a4@3 ~ c5@3 ~ [b4,e5]@6 ~@2 a4@6 ~@2 a4@6 ~@2 a4@3 ~ g4@3 a4@3 ~ b4@3 ~ c5@3 ~ b4@3 ~ a4@3 ~ g4@3 ~ a4@15 ~ [e4,g4]@25 ~@6 [d4,g4]@26 ~@6 a4@6 ~@2 a4@6 ~@2 a4@3 ~ g4@3 ~ a4@3 ~ b4@3 ~ c5@3 ~ b4@3 ~ a4@3 ~ g4@3 ~ a4@15 ~ [e4,g4]@20, ~@15 c4@31 c4@31 c4@152 ~@27, ~@15 e4@25 ~@6 e4@25 ~@6 e4@25 ~@70 e4@26 ~@6 e4@26 ~@26]/8", // E5 Em G5 Em
  T: "[~@6 [d4,g4]@13 ~@13]/2", // G5
})).s("gm_pad_poly").gain(0.35)

// chords · pad poly · soft notes
const pad_poly_soft = note(`<
  ~@19 A ~ B C D ~ B ~ E ~ B ~ F ~@2 G H ~@19 I J K L I J K M I J K ~ N ~ O@2 P ~@34
>`.pickRestart({
  A: "~@12 d5@3 ~ d5@3 ~ e5@3 ~ f5@3 ~ d5@3 ~", B: "e5@3 ~ d5@3 ~ c5@3 ~ b4@3 ~ c5@10 ~@6", C: "~@28 c5@3 ~",
  D: "d5@3 ~ d5@6 ~@2 d5@3 ~ d5@3 ~ e5@3 ~ f5@3 ~ d5@3 ~", E: "~@4 d5@3 ~ d5@3 ~ d5@3 ~ d5@3 ~ e5@3 ~ f5@3 ~ d5@3 ~",
  F: "~@16 d5@3 ~ e5@3 ~ f5@3 ~@5", G: "g4@6 ~@2 g4@6 ~@2 c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~",
  H: "d5@3 ~ d5@6 ~@2 d5@3 ~ d5@3 ~ e5@3 ~ f5@3 ~ e5@3 ~", I: "~@2 d5@3 ~ d5@3 ~ e5@3 ~ f5@3 ~ d5@3 ~@11",
  J: "~@22 e5@3 ~ d5@3 ~ c5@2", K: "~@2 b4@3 ~ c5@10 ~@16", L: "~@18 c5@3 ~ d5@3 ~ d5@6", M: "~@26 d5@3 ~ d5@2",
  N: "~@6 d5@3 ~ e5@3 ~ f5@3 ~@15", O: "[~@22 g4@6 ~@2 g4@6 ~@2 c5@3 ~ c5@3 ~ c5@3 ~ c5@3 ~ d5@3 ~ d5@6]/2",
  P: "~@2 d5@3 ~ d5@3 ~ e5@3 ~ f5@3 ~ e5@3 ~@11",
})).s("gm_pad_poly").gain(0.24)

// chords · piano
const piano = note("<A B C D A B C D ~@28 E F G@6 H I J K L M N O ~@19 P@7 Q R S T U V W@4 ~@7 X@8 Y@3>".pickRestart({
  A: "[a4,c5,e5]@3 ~ [a4,c5,e5]@23 ~@5", B: "[f4,a4,c5]@3 ~ [f4,a4,c5]@23 ~@5", C: "[c4,e4,g4]@3 ~ [c4,e4,g4]@23 ~@5",
  D: "[g4,b4,d5]@3 ~ [g4,b4,d5]@23 ~@5", E: "[c4,e4,a4]@3 ~ [c4,e4,a4]@3 ~ [c4,e4,a4]@3 ~ [c4,e4,a4]@3 ~",
  F: "[c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@4 [c4,e4,a4]@3 ~", // Am
  G: "[[c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@7 ~ [c5,e5,a5]@7 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@4 [c5,e5,a5]@3 ~ [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~ [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@4 [c4,e4,a4]@3 ~ [c5,e5,a5]@6 ~ [c5,e5,a5]@6 ~@2 [c5,e5,a5]@7 ~ [c5,e5,a5]@7 ~ [c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@3 [c5,e5,a5]@3 ~ [c4,e4,a4]@4]/6", // Am
  H: "~@2 [c4,e4,a4]@3 ~ [c4,e4,a4]@3 ~ [c4,e4,a4]@3 ~ [c4,e4,a4]@2", // Am
  I: "~@4 [c4,e4,a4]@6 ~ [c4,e4,a4]@6 ~@2 [c4,e4,a4]@4 [c4,e4,a4]@3 ~ [c5,e5,a5]@5", // Am
  J: "~@3 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@7 ~ [c5,e5,a5]@7 [c5,e5,a5]@6", // Am
  K: "~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@4 [c5,e5,a5]@3 ~ [c4,e4,a4]@6", // Am
  L: "~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~ [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~", // Am
  M: "~ [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@4 [c4,e4,a4]@3 ~ [c5,e5,a5]@6 ~", // Am
  N: "[c5,e5,a5]@6 ~@2 [c5,e5,a5]@7 ~ [c5,e5,a5]@7 ~ [c5,e5,a5]@6 ~@2", // Am
  O: "[c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@3 [c5,e5,a5]@3 ~@10", // Am
  P: "[~@22 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@4 [c4,e4,a4]@3 ~ [c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@7 ~ [c5,e5,a5]@7 ~ [c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@3 [c5,e5,a5]@3 ~ [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~ [c4,e4,a4]@6 ~@2 [c4,e4,a4]@4 [c4,e4,a4]@3 ~ [c5,e5,a5]@6 ~@2 [c5,e5,a5]@4]/7", // Am
  Q: "~@4 [c5,e5,a5]@7 ~ [c5,e5,a5]@7 ~ [c5,e5,a5]@6 ~ [c5,e5,a5]@5", // Am
  R: "~@3 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@4 [c5,e5,a5]@3 ~ [c4,e4,a4]@6 ~@2 [c4,e4,a4]@5", // Am
  S: "~@3 [c4,e4,a4]@6 ~ [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6", // Am
  T: "~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@4 [c4,e4,a4]@3 ~ [c5,e5,a5]@6 ~@2 [c5,e5,a5]@6", // Am
  U: "~ [c5,e5,a5]@7 ~ [c5,e5,a5]@7 ~ [c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~", // Am
  V: "~ [c5,e5,a5]@6 ~@2 [c5,e5,a5]@4 [c5,e5,a5]@3 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2", // Am
  W: "[[c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~@2 [c4,e4,a4]@6 ~ [c4,e4,a4]@6 ~@2 [c4,e4,a4]@4 [c4,e4,a4]@3 ~ [c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@7 ~ [c5,e5,a5]@7 ~ [c5,e5,a5]@6 ~ [c5,e5,a5]@6 ~@2 [c5,e5,a5]@6 ~@2 [c5,e5,a5]@4 [c5,e5,a5]@3 ~@19]/4", // Am
  X: "[~@12 [a4,c5,e5]@3 ~ [a4,c5,e5]@23 ~@5 [f4,a4,c5]@3 ~ [f4,a4,c5]@23 ~@5 [c4,e4,g4]@3 ~ [c4,e4,g4]@23 ~@5 [g4,b4,d5]@3 ~ [g4,b4,d5]@23 ~@5 [a4,c5,e5]@3 ~ [a4,c5,e5]@23 ~@5 [f4,a4,c5]@3 ~ [f4,a4,c5]@23 ~@5 [c4,e4,g4]@3 ~ [c4,e4,g4]@23 ~@5 [g4,b4,d5]@3 ~ [g4,b4,d5]@16]/8", // Am F C G Am F C G
  Y: "[~@6 [a4,c5,e5]@29 ~@13]/3", // Am
})).s("gm_piano").gain(0.32)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@8 A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@15 E@3 F G H I F G H I F G H I F G H I F J ~@15 K L M N
  O P Q N R ~@10
>`.pickRestart({
  A: "a3@3 ~ c4@3 ~ b3@3 ~ e4@3 ~ b3@3 ~ c4@3 ~ a3@3 ~ c4@3 ~", B: "~@4 f3@3 ~ g3@3 ~ e4@7 ~ c4@3 ~ f3@3 ~ c4@3 ~",
  C: "~@4 g3@3 ~ c4@3 ~ c4@3 ~ e4@3 ~ c4@3 ~ g3@6 ~@2", D: "~@4 g3@3 ~ c4@3 ~ c4@3 ~ e4@3 ~ c4@3 ~ g3@3 ~ e4@3 ~",
  E: "[~@23 a3@3 ~ c4@3 ~ b3@3 ~ e4@3 ~ b3@3 ~ c4@3 ~ a3@3 ~ c4@3 ~@5 f3@3 ~ g3@3 ~ e4@7 c4@3 ~ f3@3 ~ c4@3 ~@5 g3@3 ~ c4@2]/3",
  F: "~@2 c4@3 ~ e4@3 ~ c4@3 ~ g3@6 ~@6 g3@3 ~ c4@2", G: "~@2 c4@3 ~ e4@3 ~ c4@3 ~ g3@3 ~ e4@3 ~ a3@3 ~ c4@3 ~ b3@2",
  H: "~@2 e4@3 ~ b3@3 ~ c4@3 ~ a3@3 ~ c4@3 ~@5 f3@3 ~ g3@2", I: "~@2 e4@7 ~ c4@3 ~ f3@3 ~ c4@3 ~@5 g3@3 ~ c4@2",
  J: "~@2 c4@3 ~ e4@3 ~ c4@3 ~ g3@3 ~ e4@3 ~@11", K: "~@14 a3@3 ~ c4@3 ~ b3@3 ~ e4@3 ~ b3@2",
  L: "~@2 c4@3 a3@3 ~ c4@3 ~@5 f3@3 ~ g3@3 ~ e4@7", M: "~ c4@3 ~ f3@3 ~ c4@3 ~@5 g3@3 ~ c4@3 e4@7 ~",
  N: "c4@3 ~ g3@6 ~@6 g3@3 ~ c4@3 ~ e4@7 ~", O: "c4@3 ~ b3@3 ~ g3@3 ~ a3@3 ~ c4@3 ~ b3@3 ~ e4@3 ~ b3@3 ~",
  P: "c4@3 ~ a3@3 ~ c4@3 ~@5 f3@3 ~ g3@3 ~ e4@7 ~", Q: "c4@3 ~ f3@3 ~ c4@3 ~@5 g3@3 ~ c4@3 ~ e4@7 ~",
  R: "c4@3 ~ b3@3 ~ g3@3 ~@21",
})).s("gm_acoustic_guitar_nylon").gain(0.24)

// bass · acoustic bass
const bass = note(`<
  A B C D A B C D E F G H E F G H E F I J E F G H E F I J E F G H E F I J K F L@3 M N O P Q@6 R S T U V W X Y Z W X U V
  W X Y Z W X U AA AB AC AD AE AF AG AH@3 AI AJ AK AL@3 AM AN AO AP AQ AR AS AP AT@8 AU@3
>`.pickRestart({
  A: "a1@3 ~ a1@23 ~@5", B: "f1@3 ~ f1@23 ~@5", C: "c2@3 ~ c2@23 ~@5", D: "g1@3 ~ g1@23 ~@5",
  E: "a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3 ~ a1@6 ~@2 g1@3 ~", F: "f1@3 ~ f1@6 ~@2 f1@3 ~ f1@3 ~ f1@6 ~@2 g1@3 ~",
  G: "c2@3 ~ c2@6 ~@2 c2@3 ~ c2@3 ~ c2@6 ~@2 a1@3 ~", H: "g1@3 ~ g1@6 ~@2 g1@3 ~ g1@3 ~ g1@6 ~@2 g1@3 ~",
  I: "c2@3 ~ c2@6 ~@2 c2@3 ~ c2@3 ~ c2@6 ~@2 c2@3 ~", J: "d2@3 ~ d2@6 ~@2 d2@3 ~ g1@3 ~ g1@6 ~@2 g1@3 ~",
  K: "f1@3 ~ f1@6 ~@2 f1@3 ~ f1@3 ~ f1@6 ~@2 f1@3 ~",
  L: "[a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3 ~ a1@6 ~@2 a1@3 a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3 ~ a1@3 ~ g1@6 ~@2 f1@3 ~ f1@6 ~@2 f1@3 ~ f1@3 f1@6 ~@2 f1@3 ~ f1@2]/3",
  M: "~@2 f1@6 ~@2 f1@3 ~ f1@3 ~ f1@6 ~@2 g1@3 ~ a1@2", N: "~@2 a1@6 ~ a1@3 ~ a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3",
  O: "~ a1@6 ~@2 a1@3 ~ a1@3 ~ a1@3 ~ g1@6 ~ f1@3 ~", P: "f1@6 ~@2 f1@3 ~ f1@3 ~ f1@6 ~@2 f1@3 ~ f1@3 ~",
  Q: "[f1@6 ~ f1@3 ~ f1@3 ~ f1@6 ~@2 g1@3 ~ a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3 ~ a1@6 ~@2 a1@3 a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3 ~ a1@3 ~ g1@6 ~@2 f1@3 ~ f1@6 ~@2 f1@3 ~ f1@3 f1@6 ~@2 f1@3 ~ f1@3 ~ f1@6 ~@2 f1@3 ~ f1@3 ~ f1@3 ~ g1@6 ~@2 a1@3 ~ a1@6 ~ a1@3 ~ a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3 ~ a1@4]/6",
  R: "~@4 a1@3 ~ a1@3 ~ a1@3 ~ a1@6 ~ a1@3 ~ a1@5", S: "~@3 a1@3 ~ a1@3 ~ a1@6 ~@2 g1@3 ~ f1@3 ~ f1@5",
  T: "~@3 f1@3 f1@3 ~ f1@6 ~@2 g1@3 ~ c2@3 ~ c2@6", U: "~@2 c2@3 ~ c2@3 ~ c2@6 ~@2 c2@3 ~ d2@3 ~ d2@6",
  V: "~@2 d2@3 ~ g1@3 ~ g1@6 ~@2 g1@3 ~ a1@3 ~ a1@6", W: "~@2 a1@3 ~ a1@3 ~ a1@6 ~@2 g1@3 ~ f1@3 ~ f1@6",
  X: "~@2 f1@3 ~ f1@3 ~ f1@6 ~@2 g1@3 ~ c2@3 ~ c2@6", Y: "~@2 c2@3 ~ c2@3 ~ c2@6 ~@2 a1@3 ~ g1@3 ~ g1@6",
  Z: "~@2 g1@3 ~ g1@3 ~ g1@6 ~@2 g1@3 ~ a1@3 ~ a1@6", AA: "~@2 d2@3 ~ g1@3 ~ g1@6 ~@2 g1@3 ~ f1@3 ~ f1@6",
  AB: "~@2 f1@3 ~ f1@3 ~ f1@6 ~@2 f1@3 ~ f1@3 ~ f1@6", AC: "~@2 f1@3 ~ f1@3 ~ f1@6 ~@2 g1@3 ~ a1@3 ~ a1@6",
  AD: "~@2 a1@3 ~ a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3 ~ a1@6", AE: "~@2 a1@3 ~ a1@3 ~ a1@3 ~ g1@6 ~ f1@3 ~ f1@6 ~",
  AF: "~ f1@3 ~ f1@3 ~ f1@6 ~@2 f1@3 ~ f1@3 ~ f1@6 ~", AG: "~ f1@3 f1@3 ~ f1@6 ~@2 g1@3 ~ a1@3 ~ a1@6 ~@2",
  AH: "[a1@3 ~ a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3 a1@6 ~@2 a1@3 ~ a1@3 ~ a1@3 ~ g1@6 ~@2 f1@3 ~ f1@6 ~@2 f1@3 ~ f1@3 ~ f1@6 ~ f1@3 ~ f1@3 ~ f1@6 ~@2 f1@2]/3",
  AI: "~@2 f1@3 ~ f1@6 ~@2 g1@3 ~ a1@3 ~ a1@6 ~ a1@3", AJ: "~ a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3 ~ a1@6 ~@2 a1@3",
  AK: "~ a1@3 ~ a1@3 ~ g1@6 ~ f1@3 ~ f1@6 ~@2 f1@3 ~",
  AL: "[f1@3 ~ f1@6 ~@2 f1@3 ~ f1@3 ~ f1@6 ~@2 f1@3 f1@3 ~ f1@3 ~ g1@6 ~@2 a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3 a1@6 ~@2 a1@3 ~ a1@2]/3",
  AM: "~@2 a1@3 ~ a1@6 ~@2 a1@3 ~ a1@6 ~@2 a1@3 ~ a1@2", AN: "~@2 a1@6 ~ g1@3 ~ f1@3 ~ f1@6 ~@2 f1@3 ~ f1@3",
  AO: "~ f1@6 ~@2 g1@3 ~ c2@3 ~ c2@6 ~ c2@3 ~ c2@3 ~", AP: "c2@6 ~@2 c2@3 ~ d2@3 ~ d2@6 ~@2 d2@3 ~ g1@3 ~",
  AQ: "g1@6 ~@2 g1@3 ~ a1@3 ~ a1@6 ~@2 a1@3 ~ a1@3 ~", AR: "a1@6 ~@2 g1@3 ~ f1@3 ~ f1@6 ~@2 f1@3 ~ f1@3 ~",
  AS: "f1@6 ~@2 g1@3 ~ c2@3 ~ c2@6 ~@2 c2@3 ~ c2@3 ~",
  AT: "[g1@6 ~@2 g1@3 ~ a1@3 ~ a1@23 ~@5 f1@3 ~ f1@23 ~@5 c2@3 ~ c2@23 ~@5 g1@3 ~ g1@23 ~@5 a1@3 ~ a1@23 ~@5 f1@3 ~ f1@23 ~@5 c2@3 ~ c2@23 ~@5 g1@3 ~ g1@16]/8",
  AU: "[~@6 a1@29 ~@13]/3",
})).s("gm_acoustic_bass").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  A@8 B@28 C@2 D E F G H I J K L M N O P Q R S T@18 U@3 V W X Y Z AA AB AC AD D E F AE AF AG AH@5 AI AJ@7 AK ~@2
>`.pickRestart({
  A: "x!2 ~@6", B: "x!2 ~ x ~ x ~ x", C: "x!2 ~ x!3 ~ x", D: "x ~@3 x ~@7 x ~@3 x ~@3 x ~@7 x ~@2 x",
  E: "~@3 x ~@7 x ~@3 x ~@3 x ~@7 x ~@3 x", F: "~@3 x ~@7 x ~@3 x ~@2 x ~@7 x ~@3 x ~",
  G: "~ x ~@3 x ~ x ~ x ~@3 x ~ x", H: "~@2 x ~@6 x ~@3 x ~@3 x ~@7 x ~@3 x ~@2",
  I: "~ x ~@7 x ~@3 x ~@3 x ~@6 x ~@3 x ~@3", J: "x ~ x!3 ~ x!2", K: "x ~@6 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x",
  L: "~@7 x ~@3 x ~@3 x ~@7 x ~@2 x ~@3 x ~", M: "~@3 x ~ x ~ x ~@3 x ~ x ~ x",
  N: "~@6 x ~@3 x ~@2 x ~@7 x ~@3 x ~@3 x ~@2", O: "~@5 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@2", P: "~ x!3 ~ x!3",
  Q: "~@4 x ~@3 x ~@3 x ~@6 x ~@3 x ~@3 x ~@4", R: "~@3 x ~@7 x ~@7 x ~@3 x ~@3 x ~@4",
  S: "~@3 x ~@6 x ~@7 x ~@3 x ~@3 x ~@5", T: "~ x ~@3 x ~@3 x ~ x ~ x ~@2", U: "~ x ~ x ~ x ~@3 x ~ x ~ x ~@2",
  V: "~@2 x ~@3 x ~@3 x ~@6 x ~@3 x ~@3 x ~@6", W: "~ x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@6",
  X: "~ x ~@2 x ~@3 x ~@7 x ~@3 x ~@3 x ~@7", Y: "x ~@3 x ~@3 x ~@7 x ~@3 x ~@2 x ~@7 x",
  Z: "~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@7 x", AA: "~@3 x ~@3 x ~@6 x ~@3 x ~@3 x ~@7 x ~",
  AB: "~@2 x ~@3 x ~@7 x ~@3 x ~@3 x ~@6 x ~@2", AC: "~ x ~@3 x ~@7 x ~@3 x ~@3 x ~@7 x ~@2",
  AD: "~ x ~@3 x ~@7 x ~@2 x ~@3 x ~@7 x ~@3", AE: "~ x ~@3 x ~ x ~ x ~@3 x ~@2",
  AF: "~@2 x ~@6 x ~@3 x ~@3 x ~@7 x ~@6", AG: "~ x ~@7 x ~@3 x ~@3 x ~@6 x ~@7", AH: "x ~ x!3 ~ x ~",
  AI: "x ~ x!3 ~@3", AJ: "~@3 x!2 ~@3", AK: "~@3 x ~@4",
})).gain(0.1)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A@31 B@2 C D@2 E F@2 G@2 H I@2 J K@23 L M@2 N@2 O P@2 Q R S@2 T U@6 ~@11
>`.pickRestart({
  A: "~ x", B: "~@15 x ~@16", C: "~@7 x ~@8", D: "~@13 x ~@18", E: "~@3 x ~@4", F: "~@11 x ~@20", G: "~@5 x ~@10",
  H: "~@9 x ~@22", I: "~ x ~@2", J: "~@7 x ~@24", K: "~@3 x ~@12", L: "~@5 x ~@26", M: "~ x ~@6", N: "~@3 x ~@28",
  O: "~ x ~@14", P: "~ x ~@30", Q: "x ~@30 x", R: "~@31 x", S: "~@15 x", T: "~@29 x ~@2", U: "~@7 x",
})).gain(0.14)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@36 A@2 B C D E F G H I J K L M N O ~@19 P Q@3 R S T U V W X Y Z AA AB AC AD ~@18
>`.pickRestart({
  A: "x!4 ~ x!3", B: "x ~@3 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@2 x", C: "~@3 x ~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x",
  D: "~@3 x ~@3 x ~@3 x ~@6 x ~@3 x ~@3 x ~@3 x ~", E: "~ x ~ x ~ x ~@3 x ~ x ~ x ~ x",
  F: "~@2 x ~@2 x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@2", G: "~ x ~@3 x ~@3 x ~@7 x ~@3 x ~@2 x ~@3 x ~@3", H: "x!3 ~ x!4",
  I: "x ~@3 x ~@2 x ~@7 x ~@3 x ~@3 x ~@3 x ~@3 x", J: "~@3 x ~@3 x ~@7 x ~@3 x ~@3 x ~@2 x ~@3 x ~",
  K: "~ x ~ x ~@3 x ~ x ~ x ~ x ~ x", L: "~@2 x ~@3 x ~@6 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  M: "~ x ~@3 x ~@7 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", N: "x!2 ~ x!5", O: "x ~@3 x ~@7 x ~@3 x ~@2 x ~@12",
  P: "~@11 x ~ x ~ x", Q: "~ x ~@3 x ~ x ~ x ~ x ~ x ~ x", R: "~@2 x ~@7 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@2",
  S: "~ x ~@7 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", T: "~ x ~@6 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3",
  U: "x ~@7 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x", V: "~@7 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
  W: "~@7 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~", X: "~@6 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@2",
  Y: "~@5 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", Z: "~@5 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3", AA: "~ x!7",
  AB: "~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@4", AC: "~@3 x ~@3 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@5",
  AD: "~ x ~ x ~ x ~@10",
})).gain(0.14)

// drums · china
const china = s("cr").struct(`<
  ~@7 A ~@3 A ~@3 A ~@15 A ~@3 B C D C E ~ F G H ~ I ~ J K ~ L M ~@19 N O P Q R S T U V W X Y Z AA AB AC AD ~@15 AE ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@6 x!2", C: "x", D: "~@3 x", E: "~@19 x ~@3 x ~@7 x", F: "~@15 x", G: "~@29 x ~@2",
  H: "~@21 x ~@6 x ~@3", I: "~@4 x ~@22 x ~@4", J: "~@9 x ~@3 x ~@2", K: "~@25 x ~@6", L: "~@2 x!2",
  M: "~@12 x ~@3 x ~@2 x ~@3 x ~@8", N: "~@11 x ~@4", O: "~@9 x ~@6", P: "~@7 x ~@3 x ~@4", Q: "~@9 x ~ x ~@4",
  R: "~@10 x ~@3 x ~@6 x ~@10", S: "~@13 x ~@7 x ~@10", T: "~@2 x ~ x!2 ~@2", U: "~@3 x!3 ~@2",
  V: "~@7 x ~@7 x ~@3 x ~@12", W: "~@5 x ~@9 x", X: "~@7 x ~ x ~@6", Y: "~@9 x ~@19 x ~@2", Z: "~@9 x ~@6 x ~@15",
  AA: "~@3 x!2 ~@3", AB: "~@11 x ~@3 x ~@16", AC: "~@7 x ~@7 x ~@16", AD: "~ x ~ x ~ x ~ x ~@8", AE: "~@3 x ~@4",
})).gain(0.14)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@8 A@31 B@2 C D@2 E F@2 G@2 H I@2 J K@23 L M@2 N@2 O P@2 Q R S@2 T U@6 ~@11
>`.pickRestart({
  A: "~ x", B: "~@15 x ~@16", C: "~@7 x ~@8", D: "~@13 x ~@18", E: "~@3 x ~@4", F: "~@11 x ~@20", G: "~@5 x ~@10",
  H: "~@9 x ~@22", I: "~ x ~@2", J: "~@7 x ~@24", K: "~@3 x ~@12", L: "~@5 x ~@26", M: "~ x ~@6", N: "~@3 x ~@28",
  O: "~ x ~@14", P: "~ x ~@30", Q: "x ~@30 x", R: "~@31 x", S: "~@15 x", T: "~@29 x ~@2", U: "~@7 x",
})).gain(0.1)

// drums · ride
const ride = s("rd").struct(`<
  A B@37 C D E F G H I J K L M N B O D P F@21 Q R S T U V W N X Y D E F Z H I@13 AA ~@2
>`.pickRestart({
// … 53 more lines

More by The Cranberries