Strudelify
KeyE minorTempo107 bpm
0:00/0:00
// Sunday — The Cranberries
// 107 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (2/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 93 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(107/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(`<
  ~@14 A@2 B@2 C@5 D E@4 F@2 ~@3 G@4 H I@3 J@4 H K@3 ~@9 L@2 M@2 N O P Q R@4 H S@3 T U V@2 W@2 X@2 ~@11
>`.pickRestart({
  A: "[~@15 a4@40 ~@2 a4@7]/2", B: "[~ c5@7 ~ e5@35 ~@6 b4@13 ~]/2",
  C: "[~@3 c5@7 ~ c5@3 ~ a4@30 ~@7 a4@7 ~ g4@7 ~ g4@7 ~@2 e5@70 ~@13]/5", D: "~@24 a4@7 ~",
  E: "[c5@3 ~ c5@7 ~ d5@3 ~ d5@3 ~ e5@24 ~@5 c5@3 ~ c5@3 ~@2 b4@10 ~@2 c5@7 ~ d5@7 ~ a4@24 ~@5 g4@3 ~ a4@3 ~ a4@5]/4",
  F: "[~@4 g4@7 ~ g4@7 ~ e5@39 ~@5]/2",
  G: "[~@12 e5@3 ~ f5@2 e5@3 ~ d5@4 e5@2 [g4,b4,e5]@14 ~@2 e5@3 ~ f5@2 e5@3 ~ d5@4 e5@2 [a4,b4,e5]@14 ~@2 d5@3 ~ f5@2 e5@3 ~ d5@4 e5@3 ~ e5@5 ~ f5@2 e5@5 ~ e5@2 e5@2 f5@3 ~ e5@2 d5@4 e5@5 ~, ~@94 [g4,b4]@15 ~@19]/4", // Em Asus2 G
  H: "[f4,a4,c5]@10 ~@2 g4@3 ~ a4@3 ~ c5@2 c5@5 ~ d5@3 ~", // F
  I: "[[g4,c5,e5]@10 ~@2 d5@3 ~ e5@3 ~ [d5,g5]@2 g5@5 ~ a4@14 ~@2 c5@3 ~ c5@3 ~ c5@2 d5@2 c5@3 ~ [e4,g4,c5]@23 ~@5 d5@3 ~ c5@3 ~]/3", // C G5 C
  J: "[e5@10 ~@2 e5@3 ~ f5@2 e5@3 ~ d5@4 e5@2 [g4,b4,e5]@14 ~@2 e5@3 ~ f5@2 e5@3 ~ d5@4 e5@2 [a4,b4,e5]@14 ~@2 d5@3 ~ f5@2 e5@3 ~ d5@4 e5@3 ~ e5@5 ~ f5@2 e5@5 ~ e5@2 e5@2 f5@3 ~ e5@2 d5@4 e5@5 ~, ~@94 [g4,b4]@15 ~@19]/4", // Em Asus2 G
  K: "[[g4,c5,e5]@10 ~@2 d5@3 ~ e5@3 ~ [d5,g5]@2 g5@5 ~ a4@14 ~@2 c5@3 ~ c5@3 ~ c5@2 d5@2 c5@3 ~ [e4,g4,c5]@14 ~@2 c5@10 ~@10]/3", // C G5 C
  L: "[~@12 e5@2 e5@2 f5@2 e5@3 ~ d5@4 e5@2 ~@4 [g4,b4]@10 ~@2 e5@3 ~ d5@6 ~@2 e5@3 ~ g5@3 ~, ~@14 e5@7 ~@11]/2", // G
  M: "[[a4,b4,e5]@6 ~@6 e5@2 e5@2 f5@2 e5@3 ~ d5@4 e5@2 ~@4 [g4,b4]@10 ~@2 e5@3 ~ d5@6 ~@2 e5@3 ~ g5@3 ~, ~@14 e5@7 ~@11]/2", // Asus2 G
  N: "[a4,b4,e5]@10 ~@2 e5@3 ~ f5@2 e5@3 ~ d5@4 e5@5 ~", O: "[e4,g4,c5]@10 ~@2 g4@3 ~ a4@2 g4@3 ~ a4@4 g4@5 ~",
  P: "d5@3 ~ e5@10 ~@2 f5@3 ~ e5@2 d5@4 e5@5 ~", Q: "[e4,g4,c5]@19 ~@5 d5@3 ~ c5@3 ~",
  R: "[e5@6 ~@6 e5@3 ~ f5@2 e5@3 ~ d5@4 e5@2 [g4,b4,e5]@14 ~@2 e5@3 ~ f5@2 e5@3 ~ d5@4 e5@2 [a4,b4,e5]@14 ~@2 d5@3 ~ f5@2 e5@3 ~ d5@4 e5@3 ~ e5@5 ~ f5@2 e5@5 ~ e5@2 e5@2 f5@3 ~ e5@2 d5@4 e5@5 ~, ~@94 [g4,b4]@15 ~@19]/4", // Em Asus2 G
  S: "[[g4,c5,e5]@10 ~@2 d5@3 ~ e5@3 ~ [d5,g5]@2 g5@5 ~ a4@14 ~@2 c5@3 ~ c5@3 ~ c5@2 d5@2 c5@3 ~ [e4,g4,c5]@34 ~@2]/3", // C G5 C
  T: "[e4,a4]@19 ~ a4@3 ~ c5@3 ~ d5@3 ~", U: "[g4,b4,e5]@13 ~@3 b4@6 ~@2 c5@3 ~ c5@3 ~",
  V: "[[e4,a4]@13 ~@3 a4@3 ~ g4@3 ~ g4@3 ~@5 [g4,b4]@19 ~ b4@10 ~@2, ~@28 e5@23 ~@13]/2", // A5 G
  W: "[[a4,c5,e5]@13 ~@3 a4@3 ~ c5@2 c5@4 d5@2 ~@4 [g4,c5]@10 ~@2 c5@2 c5@2 b4@5 ~ c5@4 d5@5 ~, ~@14 e5@7 ~@11]/2", // Am C5
  X: "[[f4,a4]@10 ~@2 g4@2 g4@2 a4@3 ~ g4@3 ~ g4@3 ~@5 [g4,c5]@30 ~@2, ~@14 e5@17 ~]/2", // F C5
})).s("gm_pad_poly").gain(0.48)

// chords · pad poly · soft notes
const pad_poly_soft = note("<~@37 A B@3 ~@4 A C@3 ~@21 A D@3 ~@19>".pickRestart({
  A: "~@12 c5@3 ~ d5@3 ~ e5@2 e5@5 ~ f5@3 ~",
  B: "[g5@10 ~@2 g5@3 ~ a5@3 ~@3 c6@5 ~ f5@14 ~@2 f5@3 ~ f5@3 ~ f5@2 g5@2 f5@3 ~ e5@23 ~@13]/3",
  C: "[g5@10 ~@2 g5@3 ~ a5@3 ~@3 c6@5 ~ f5@14 ~@2 f5@3 ~ f5@3 ~ f5@2 g5@2 f5@3 ~ e5@14 ~@22]/3",
  D: "[g5@10 ~@2 g5@3 ~ a5@3 ~@3 c6@5 ~ f5@14 ~@2 f5@3 ~ f5@3 ~ f5@2 g5@2 f5@3 ~ e5@34 ~@2]/3",
})).s("gm_pad_poly").gain(0.16)

// other · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@3 B@3 C D E@5 F@2 G H I J@4 K@2 L M N@5 ~@3 O ~@2 P ~@3 O ~@3 P ~@18 P ~ O ~@3 P ~@3 O ~@18
>`.pickRestart({
  A: "[~@11 e4@4 b3@4 f#3@4 e4@4 b3@4 f#3@4 e4@4 b3@4 ~ f#3@4 e4@8 b3@4 e4@8 ~@9 e4@4 b3@4 f#3@4 e4@4 b3@3]/3",
  B: "[~ f#3@4 e4@4 b3@4 f#3@4 ~ e4@8 b3@4 e4@8 ~@8 e4@4 b3@4 ~ f#3@4 e4@4 b3@4 f#3@4 e4@4 b3@4 f#3@4 e4@8 ~ b3@4]/3",
  C: "e4@8 ~@8 e4@4 b3@4 f#3@4 ~ e4@3", D: "~ b3@4 f#3@4 e4@4 b3@4 f#3@4 e4@8 b3@3",
  E: "[~@2 e4@8 ~@8 e4@4 b3@4 f#3@4 e4@4 ~ b3@4 f#3@4 e4@4 b3@4 f#3@4 e4@8 b3@4 e4@8 ~ f4@2 f4@6 f4@2 f4@6 f4@2 f4@6 f4@2 f4@6 ~ f4@2 f4@6 f4@2 f4@6 f4@2 f4@6 f4@2 f4@6 ~ e4@2 e4@6 e4@2 e4@6 e4@2]/5",
  F: "[e4@6 e4@2 e4@6 e4@3 e4@6 e4@2 e4@6 e4@2 e4@6 e4@2 e4@6 f4@2 f4@6 ~ f4@2 f4@6]/2",
  G: "f4@2 f4@6 f4@2 f4@6 f4@2 f4@6 ~ f4@2 f4@5", H: "~ f4@2 f4@6 f4@2 f4@6 e4@2 e4@6 e4@3 e4@4",
  I: "~ e4 e4@3 e4 e4@3 e4 e4@3 e4 e4@2",
  J: "[~@3 e4@2 e4@6 e4@2 e4@6 f4@2 f4@6 f4@2 f4@6 ~ f4@2 f4@6 f4@2 f4@6 f4@2 f4@6 f4@2 f4@6 f4@3 f4@6 f4@2 f4@6 e4@2 e4@6 e4@2 e4@6 e4@2 e4@6 ~ e4@2 e4@6 e4@2 e4@6 e4@2]/4",
  K: "[e4@6 e4@2 e4@6 ~ e4@2 e4@6 f4@2 f4@6 f4@2 f4@6 f4@2 f4@6 f4@3 f4@6 f4@2 f4@6]/2",
  L: "f4@2 f4@6 f4@2 f4@6 f4@2 f4@6 ~ e4@2 e4@5", M: "~ e4@2 e4@6 e4@2 e4@6 e4@2 e4@6 ~ e4@2 e4@4",
  N: "[~@2 e4@2 e4@6 e4@2 e4@6 e4@2 e4@6 f4@3 f4@6 f4@2 f4@6 f4@2 f4@6 f4@2 f4@6 f4@2 f4@6 ~ f4@2 f4@6 f4@2 f4@6 f4@2 f4@6 e4@2 e4@6 ~ e4@2 e4@6 e4@2 e4@6 e4@2 e4@6 e4@2 e4@6 e4@3 e4@6 e4@2 e4@6 e4@2 e4@6 ~@2]/5",
  O: "[e4,g4]@31 ~", P: "e4@31 ~",
})).s("gm_acoustic_guitar_steel").gain(0.22)

// chords · acoustic guitar steel
const acoustic_guitar_steel_2 = note(`<
  A ~ B@2 C@2 D@2 E@2 ~@22 F@3 ~ G@2 ~@2 G@2 ~@2 G@2 ~@17 G@4 ~@2 G@2 ~@2 G@2 ~@18
>`.pickRestart({
  A: "~@5 f#4@27, ~ f#3@15, ~@3 b3@29, ~ d#4@7", B: "[~@5 e4@31 ~@28, ~ c#4@8 ~@7]/2", C: "[~@7 [b3,g4]@31 ~@26]/2",
  D: "[~ [c#4,e4]@4 ~@3]/2", E: "[~@11 g4@31 ~@22, ~@10 b3@31 ~@23]/2",
  F: "[~@8 [f3,a3,b3,e4]@7 b3@8 ~, ~@9 f2@11 ~@12, ~@7 c3@8 ~@9]/3", G: "[~@7 b3@8 ~]/2",
})).s("gm_acoustic_guitar_steel").gain(0.25)

// chords · acoustic guitar steel
const acoustic_guitar_steel_3 = note(`<
  ~@33 A B A B C D C B A B A B C D C B C E F E F E F E F G B A B A B G B A B A B C D C B A B A B A D C D C E F E F E F E
  F H@2
>`.pickRestart({
  A: "~ e4@3 ~ e4 ~ f3 ~ e4@3 ~@3 e4@3 ~ e4 ~ f3 ~ e4 ~ f3@3 ~ e4@3, [f3,a3,b3]@2 [f3,a3,b3] [a3,b3,e4] [f3,a3,b3]@2 ~ [f3,a3,b3]@2 [f3,a3,b3] [a3,b3,e4] [f3,a3,b3] [a3,b3,e4]@2 [f3,a3,b3]@2", // Bm7b5 Asus2 Bm7b5 Asus2 Bm7b5 Asus2 Bm7b5
  B: "~ e4@3 ~ e4 ~ e3 ~ e4@3 ~@3 e4@3 ~ e4 ~ e3 ~ e4 ~ e3@3 ~ e4@3, [e3,g3,b3]@2 [e3,g3,b3] [g3,b3,e4] [e3,g3,b3]@2 ~ [e3,g3,b3]@2 [e3,g3,b3] [g3,b3,e4] [e3,g3,b3] [g3,b3,e4]@2 [e3,g3,b3]@2", // Em
  C: "~ f4@3 ~ f4 ~ f3 ~ f4@3 ~@3 f4@3 ~ f4 ~ f3 ~ f4 ~ f3@3 ~ f4@3, [f3,a3,c4]@2 [f3,a3,c4] [a3,c4,f4] [f3,a3,c4]@2 ~ [f3,a3,c4]@2 [f3,a3,c4] [a3,c4,f4] [f3,a3,c4] [a3,c4,f4]@2 [f3,a3,c4]@2", // F
  D: "~ e4@3 ~ e4 ~ e3 ~ e4@3 ~@3 e4@3 ~ e4 ~ e3 ~ e4 ~ e3@3 ~ e4@3, [e3,g3,c4]@2 [e3,g3,c4] [g3,c4,e4] [e3,g3,c4]@2 ~ [e3,g3,c4]@2 [e3,g3,c4] [g3,c4,e4] [e3,g3,c4] [g3,c4,e4]@2 [e3,g3,c4]@2", // C
  E: "~ e4@3 ~ e4 ~ e3 ~ e4@3 ~@3 e4@3 ~ e4 ~ e3 ~ e4 ~ e3@3 ~ e4@3, [e3,g#3,b3]@2 [e3,g#3,b3] [g#3,b3,e4] [e3,g#3,b3]@2 ~ [e3,g#3,b3]@2 [e3,g#3,b3] [g#3,b3,e4] [e3,g#3,b3] [g#3,b3,e4]@2 [e3,g#3,b3]@2", // E
  F: "~ e4@3 ~ e4 ~ e3 ~ e4@3 ~@3 e4@3 ~ e4 ~ e3 ~ e4 ~ e3@3 ~ e4@3, [e3,a3,c4]@2 [e3,a3,c4] [a3,c4,e4] [e3,a3,c4]@2 ~ [e3,a3,c4]@2 [e3,a3,c4] [a3,c4,e4] [e3,a3,c4] [a3,c4,e4]@2 [e3,a3,c4]@2", // Am
  G: "~ e4@3 ~ e4 ~ f3 ~ e4@3 ~@3 e4@3 ~ e4 ~ f3 ~ e4 ~ f3@3 ~ e4@3, [f3,a3,c4]@2 [f3,a3,c4] [a3,c4,e4] [f3,a3,c4]@2 ~ [f3,a3,c4]@2 [f3,a3,c4] [a3,c4,e4] [f3,a3,c4] [a3,c4,e4]@2 [f3,a3,c4]@2", // F Am F Am F Am F
  H: "[~ [b3,e4]@56 ~@7, [e3,g#3]@7 ~]/2", // E5 E
})).s("gm_acoustic_guitar_steel").gain(0.19)

// other · violin
const violin = note("<~ A@5 B@2 C@2 D@2 E@8 F@2 G@2 H@7 ~@50 I J K L M N M N M O P@2>".pickRestart({
  A: "[~@3 d#5@33 c#5@33 c#5@12 ~ b4@12 c#5@8 b4@33 b4@12 a4@12 ~]/5", B: "[b4@8 c#5@33 c#5@12 d5@11]/2",
  C: "[~@2 c#5@8 b4@33 b4@12 a4@9]/2", D: "[~@3 b4@8 ~ c5@33 c5@12 b4@7]/2",
  E: "[~@5 c5@8 ~ g4@57 a4@8 c5@33 c5@12 ~ b4@12 c5@8 g4@58 a4@8 c5@33 c5@12]/8", F: "[b4@12 ~ c5@8 g4@33 c5@10]/2",
  G: "[~@2 d5@12 ~ e5@8 f5@33 f5@8]/2",
  H: "[~@4 e5@12 d5@8 ~ e5@33 e5@12 d5@12 e5@8 f5@33 f5@12 ~ e5@12 d5@8 e5@49 ~@19]/7", I: "c5@21 d5@5 ~ e5@5",
  J: "f5@5 e5@5 ~ d5@5 f5@5 e5@5 ~ d5@5", K: "f5 e5@3", L: "b5@3 a5 a5@4", M: "b5@6 b5@2 b5@2 b5!2 b5@2 b5!2",
  N: "b5 c6 a5@2 a5 g5 a5 b5", O: "b5@4 c6@4 a5@8 a5@5 g5@5 ~ a5@5", P: "[b5@47 ~@17]/2",
})).s("gm_violin").gain(0.14)

// chords · synth strings 2
const synth_strings_2 = note("<~@12 A@2 B@4 C@4 D@4 E@7 ~@60>".pickRestart({
  A: "[~@7 [g4,c5,e5]@25]/2", B: "[~@15 [f4,a4,c5,e5]@66 [g4,c5,e5]@47]/4",
  C: "[~@19 [f4,a4,c5,e5]@66 [g4,c5,e5]@43]/4", D: "[~@23 [f4,a4,c5,f5]@66 [g3,g4,c5]@39]/4",
  E: "[~@26 [g3,f4,a4,c5]@66 [g4,c5,e5]@66 [f4,a4,c5,e5]@57 ~@9]/7", // F C Fmaj7
})).s("gm_synth_strings_2").gain(0.25)

// chords · pizzicato strings
const pizzicato_strings = note("<~@49 A B C B C B C B C D ~@34>".pickRestart({
  A: "[f4,a4,c5]@4 [f4,a4,c5]@2 ~ [f4,a4,c5] ~ [f4,a4,c5] [f4,a4,c5]@2 [f4,a4,c5]@4", // F
  B: "[e4,g#4,b4]@4 [e4,g#4,b4]@2 ~ [e4,g#4,b4] ~ [e4,g#4,b4] [e4,g#4,b4]@2 [e4,g#4,b4]@2 [e4,g#4,b4]@2", // E
  C: "[a4,c5,e5]@4 [a4,c5,e5]@2 ~ [a4,c5,e5] ~ [a4,c5,e5] [a4,c5,e5]@2 [a4,c5,e5]@2 [g4,b4,d5]@2", D: "[e4,a4,c5] ~@3",
})).s("gm_pizzicato_strings").gain(0.4)

// bass · fretless bass
const bass = note("<~@21 A@3 ~ B C@2 ~ D@3 ~@18 E F E F E F E F ~@20 G H G I ~ E F E F E F E J@3>".pickRestart({
  A: "[~@22 f3@8 e3@4 f3@8 e3@4 ~ f3@4 e3@4 c3@33 ~@8]/3", B: "~@13 e3@4 f3@4 e3@4 ~ f3@6",
  C: "[~@2 e3@4 f3@8 e3@4 f3@4 e3@4 c3@33 ~@5]/2", D: "[~@29 f3@8 e3@4 ~ f3@8 e3@4 f3@4 e3@4 c3@33 ~]/3",
  E: "e3@3 d3@3 c3@2 c3@2 ~ c3@3 c3@2", F: "a2@15 ~", G: "f3@2 e3 f3@2 e3 f3 e3", H: "c3@3 c3 b2 c3 d3 e3", I: "c3",
  J: "[a2@12 a2@31 ~@5]/3",
})).s("gm_fretless_bass").gain(0.45).pan(1)

// bass · fretless bass
const bass_2 = note(`<
  A B C D E@8 F@2 G@2 H@2 I@2 J@2 K@2 L@2 M@7 N O N O N P N Q R S R S R S R T U V W V W V W V W X S R S R S R Y R S R S
  R S R Z R S R S R S R Q N AA AB AA AB AA AB AA AB AC@2
>`.pickRestart({
  A: "~@3 b1@29", B: "~@3 b1@8 ~ b1@3 c#2@9 b1@8", C: "~ a1@7", D: "~@5 a1@8 a1@4 b1@9 a1@6",
  E: "[~@6 g1@33 g1@8 g1@4 a1@8 g1@12 ~ a1@33 a1@8 a1@4 b1@8 a1@12 ~ g1@33 g1@8 g1@4 a1@8 g1@12 ~ f1@52]/8",
  F: "[~@5 f1@8 ~ c2@50]/2", G: "[~@7 c2 ~@7 f1@49]/2", H: "[~@9 f1@8 c2@47]/2", I: "[~@11 c2 ~@7 f1@45]/2",
  J: "[~@13 f1@8 c2@43]/2", K: "[~@14 c2 ~@8 f1@41]/2", L: "[~@17 f1@8 c2@39]/2",
  M: "[~@18 c2 ~@7 f1@58 f1@8 c2@57 ~ c2 ~@7 f1@66]/7", N: "f1@8 f1@6 f1@6 f1@4 g1@3 ~ g1@3 ~",
  O: "c2@8 c2@6 c2@6 c2@3 ~ d2@3 ~ d2@3 ~", P: "c2@8 c2@6 c2@6 c2@4 d2@3 ~ d2@3 ~",
  Q: "c2@6 c2@6 c2@4 c2@6 c2@2 d2@3 ~ c2@3 ~", R: "f1@4 f1@3 f1@3 f1@2 g1@2 g1@2", S: "c2@4 c2@3 c2@3 c2@2 d2@2 d2@2",
  T: "c2@3 c2@3 c2@2 c2@3 c2 d2@2 c2@2", U: "f1@4 f1@3 f1@3 f1@2 g1@2 f1@2", V: "e1@4 e1@3 e1@3 e1@2 e1@2 e1@2",
  W: "a1@4 a1@3 a1@3 a1@2 a1@2 g1@2", X: "f1@6 f1@2 f1@3 f1 g1@2 g1@2", Y: "c2@3 c2@3 c2@2 c2@3 c2 d2@4",
  Z: "c2@7 g2@2 f2@3 e2@2 d2@2", AA: "e1@8 e1@6 e1@6 e1@4 e1@3 ~ e1@3 ~", AB: "a1@8 a1@6 a1@6 a1@4 a1@3 ~ a1@3 ~",
  AC: "e1/2",
})).s("gm_fretless_bass").gain(0.4)

// other · tremolo strings
const tremolo_strings = note("<~@49 A B C D C D C D C E F G@2 ~@19 H I J K L M L M L N O@2>".pickRestart({
  A: "c5 ~@3 c5 ~@2 c5 ~ c5!2 ~ c5 ~@3", B: "b4 ~@2 a#4 b4 ~@2 a#4 b4@4 ~@4", C: "e5 ~@3 e5 ~@2 e5 ~ e5!2 ~ e5 ~ d5 ~",
  D: "c5 ~@3 c5 ~@3 c5@4 ~@4, ~@3 b4@2 ~@2 b4@2 ~@7", E: "c5@6 a4@2 b4@3 c5@3 a4@2", F: "b4@3 c5@3 a4@2 b4@3 c5@5",
  G: "[d5@3 e5@6 ~@7]/2", H: "c5@21 d5@5 ~ e5@5", I: "f5@5 e5@5 ~ d5@5 f5@5 e5@5 ~ d5@5", J: "f5 e5@3",
  K: "b5@3 a5 a5@4", L: "b5@6 b5@2 b5@2 b5!2 b5@2 b5!2", M: "b5 c6 a5@2 a5 g5 a5 b5",
  N: "b5@4 c6@4 a5@8 a5@5 g5@5 ~ a5@5", O: "[b5@47 ~@17]/2",
})).s("gm_tremolo_strings").gain(0.4)

// other · guitar harmonics
const guitar_harmonics = note(`<
  ~@41
  [e3 ~@3 d3 ~@2 e3 ~ e3 ~ e3!2 ~ c4 ~]!8
  ~@25
  [e3 ~@3 d3 ~@2 e3 ~ e3 ~ e3!2 ~ c4 ~]!8
  ~@11
>`).s("gm_guitar_harmonics").gain(0.22)

// chords · distortion guitar
const distortion_guitar = note("<~@82 A ~@7 B@2 ~>".pickRestart({
  A: "~ c4@31", B: "[~@6 [g#3,b3] [g#3,b3]@8 ~]/2",
})).s("gm_distortion_guitar").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@33 A B A B A B A B A B A B A B A C A D A D A D A D A@2 B A@3 B A E A B A B A B A C A B A B A B A F A D A D A D A D A
  F ~
>`.pickRestart({
  A: "x ~@4 x ~ x", B: "x ~@6 x ~@2 x ~@3 x ~", C: "x ~@2 x!2 ~@3", D: "x ~@4 x ~@2", E: "x ~@2 x!3 ~ x", F: "x",
})).gain(0.14)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@48 A ~ B ~ B ~ B ~ B ~@16 C ~@9 D ~ D ~ D ~ D ~@3>".pickRestart({
  A: "~@5 x ~@2", B: "~@13 x ~@2", C: "~@7 x", D: "~@13 x!3",
})).gain(0.09)

// drums · low tom
const low_tom = s("lt").struct("<~@52 A ~@3 A ~@25 A ~@2 A ~@3 A ~@3>".pickRestart({
  A: "x",
})).gain(0.17)

// drums · hihat
const hihat = s("hh").struct("<~@91 x ~>").gain(0.14)

// drums · open hat
const open_hat = s("oh").struct("<~@33 [x ~ x ~ x ~ x!7 ~ x ~]!58 x ~>").gain(0.14)

// drums · mid tom
const mid_tom = s("mt").struct("<~@48 A ~@2 B ~@3 B ~@25 A ~@2 B ~@3 B ~@4>".pickRestart({
  A: "~@14 x!2", B: "~@7 x",
})).gain(0.17)

// drums · high tom
const high_tom = s("ht").struct("<~@53 A ~@3 A ~@28 A ~@3 A ~@2>".pickRestart({
// … 56 more lines

More by The Cranberries