Strudelify
Heroes cover art

1998 · Heroes

Heroes

The Wallflowers

KeyD majorTempo118 bpm
0:00/0:00
// Heroes — The Wallflowers
// 118 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 106 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(118/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, A@4 for four bars: edit a riff to change every repeat.

// chords · electric guitar clean · "CLEAN GUITAR"
const electric_guitar_clean = note(`<
  ~ A@4 B@7 C@6 D@4 E F G@3 H I@3 J@2 K@7 L@2 M@4 N O@4 P@5 Q@4 R@4 S@4 T@6 U V W@2 X Y@6 Z@3 AA@6 AB@8 AC@4
>`.pickRestart({
  A: "[~@8 f#4@13 ~@3 e4@4 d4@4, ~@22 d3@39 ~@9 [d3,g3]@26, ~@23 [f#3,a3]@38 ~@10 b3@25]/4", // G5 F#m
  B: "[~@24 f#4@35 ~@13 e4@11 d4@27 ~@10 d4@44 ~@3 d3, ~@22 d3@35 ~@14 [d3,g3,b3]@40 ~@7 d3@46 ~@4, ~@23 [f#3,a3,d4]@35 ~@61 [f#3,a3]@45 ~@4]/7", // G D F#m
  C: "[~ d4@37 ~@10 [a3,d4]@42 ~@6 d4@38 ~@10, [g3,b3]@38 ~@8 d3@43 ~@5 d3@40 ~@10, ~@47 f#3@43 ~@5 [g3,b3]@39 ~@10]/6", // D5 G
  D: "[~ c4@43 ~@4 [d3,a3]@44 ~@4, c3@23 ~ d4@21 ~@3, [e3,g3]@43 ~@4 f#3@43 ~@6]/4", E: "~ a3@18 ~@5, a2, e3@19 ~@5",
  F: "~ e3@19 ~@4, [e2,b2]@5 ~", G: "[~ d4@43 ~@4 [e3,c4]@22 ~@2, [d3,a3]@44 ~@3 c3@24 ~, ~@12 g3@5 ~]/3",
  H: "[d3,g3]@3 ~, g2@23 ~", I: "[~ d4@45 ~@2 d4@24, [d3,f#3,a3]@23 d3@13, ~@47 [f#3,a3]@25]/3",
  J: "[~ d4, ~@23 [d3,g3,b3]@25]/2", // G
  K: "[~@24 d4@43 ~@5 [b3,d4]@43 ~@5 d4@44 ~@3 d3, ~@22 d3@45 ~@4 [d3,g3]@44 ~@3 d3@46 ~@4, ~@23 [f#3,a3]@44 ~@52 [f#3,a3]@45 ~@4]/7", // Bm G5 F#m
  L: "[~ d4@37 ~@10, [g3,b3]@19 ~@5]/2", M: "[~ c4@37 ~@10 [a3,d4]@40 ~@8, [c3,e3,g3]@39 ~@8 [d3,f#3]@42 ~@7]/4",
  N: "[e3,a3]@7 ~, a2@3 ~", // A5
  O: "[[e2,b2,e3]@18 ~@6 d4@44 ~@4 [g3,c4]@19 ~@4 [g2,b2], ~@23 [d3,f#3,a3]@45 ~@3 [c3,e3]@20 ~@5]/4", // E5 C5 G D C
  P: "[[d3,g3]@18 ~@7 [f#3,a3,d4]@42 ~@5 [a3,d4]@46 ~@2, ~@23 d3@43 ~@5 [d3,f#3]@47 ~@2]/5", // G5 D D5 D
  Q: "[~ g3@29 ~@18 [a3,d4]@37 ~@11, [g2,b2,d3]@29 ~@18 [d3,f#3]@38 ~@11]/4", // D5 G D
  R: "[[g2,b2,d3,g3]@33 ~@15 [a3,d4]@37 ~@11, ~@47 [d3,f#3]@38 ~@11]/4", // G D5 D
  S: "[[g2,b2,d3,g3]@11 ~@5 d4@12 ~@4, ~@47 [d3,f#3,a3]@37 ~@12]/4", // G D
  T: "[[g2,b2,d3,g3]@14 ~@10 c4@21 ~@3 [d3,a3,d4]@21 ~@3, ~@47 [c3,e3,g3]@43 ~@5 f#3@43 ~@6]/6", U: "[a2,e3,a3]@7 ~",
  V: "[e2,b2,e3]@3 ~", W: "[[d3,f#3,a3,d4]@43 ~@5]/2", X: "[c3,e3,g3,c4]@3 ~",
  Y: "[[g2,d3,g3]@18 ~@6 [a3,d4]@46 ~@2 d4@41 ~@6 [g2,d3,g3]@25, ~@23 [d3,f#3]@46 ~@2 [d3,f#3,a3]@42 ~@5 b2@26]/6", // G5 D5 G5 D
  Z: "[~@24 d4@41 ~@6 g2, ~@23 [d3,f#3,a3]@43 ~@6]/3", // D
  AA: "[[b2,d3,g3]@40 ~@8 [d3,a3,d4]@42 ~@6 [d3,g3]@41 ~@7, ~@47 f#3@43 ~@5 [g2,b2]@42 ~@7]/6", // G D5 G5 G
  AB: "[[d3,f#3,a3]@43 ~@5 [d3,g3]@37 ~@11 d4@38 ~@10 [d3,g3]@37 ~@11, d4@41 ~@6 b2@38 ~@10 [d3,f#3,a3]@40 ~@8 b2@38 ~@11, ~@16 g2@13 ~@19 g2@13 ~@3]/8", // D G5 D
  AC: "[~ d4@81 ~@14, [d3,f#3,a3]@41 ~@7]/4", // D
})).s("gm_electric_guitar_clean").gain(0.07)

// bass · electric bass pick · "BASS"
const bass = note(`<
  ~@2 A B C D A E C F A@2 C G A H C@2 I@2 A@2 J K A@2 L M A N A E C O A E C O A E P Q I R A E S T A E U V A N A@2 W G A
  E C X A E C G A E C@2 I R A E S T A E U V A N A E C F A@2 C G A E C F A@2 C G A Y C X Z@2 ~@2
>`.pickRestart({
  A: "d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2",
  B: "d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~ d2@3 ~", C: "g1@2 ~ g1@3 b1@3 a1@3 g1 ~@2 g1 ~@2 g1 ~@2 g1 ~@2",
  D: "g1 ~ g1@3 ~ b1@3 a1@3 g1@2 b1@3 c2@4 c#2@3", E: "d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2@3",
  F: "g1 ~@2 g1@3 b1@3 a1@3 g1@3 b1@3 c2@2 c#2@2 ~@2", G: "g1 ~@2 g1@3 b1@3 a1@3 g1@3 b1@3 c2@3 c#2@3",
  H: "d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2 d2@2 ~",
  I: "c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2",
  J: "a1 ~@2 a1 ~@2 a1 ~@2 a1 ~@2 a1 ~@2 a1@2 ~ c2@3 d2@3",
  K: "e1@2 ~ e1 ~@2 e1 ~@2 e1 ~@2 e1 ~@2 e1 ~@2 e1 ~@2 e1@2 ~",
  L: "c2@2 ~ c2@2 ~ e1@2 ~ e1@3 f1@2 ~ f1@2 ~ f#1@2 ~ f#1@3",
  M: "g1@3 g1@2 ~ b1@2 ~ b1@2 ~ c2@2 ~ c2@2 ~ c#2@2 ~ c#2@2 ~",
  N: "d2 ~@2 d2@2 ~ b1@2 ~ b1@2 ~ c2@2 ~ c2@2 ~ c#2@2 ~ c#2@2 ~", O: "g1 ~@2 g1@3 b1@3 a1@3 g1@2 ~ g1 ~@2 g1 ~@2 g1@3",
  P: "g1 ~@2 g1@3 b1@3 a1@3 g1 ~@2 g1 ~@2 g1 ~@2 g1 ~@2", Q: "g1 ~@2 g1@3 b1@3 a1@3 g1@2 ~ g1 ~@2 g1@3 b1@2 c2",
  R: "c2 ~@2 c2@2 ~ c2 ~@2 c2 ~@2 c2@2 ~ c2 ~@2 c2 ~@2 c2@3", S: "a1@2 ~ a1 ~@2 a1 ~@2 a1 ~@2 a1 ~@2 a1@3 c2@3 d2@3",
  T: "e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~ e1@3",
  U: "c2@2 ~ c2@3 e1@2 ~ e1@3 f1 ~@2 f1@2 ~ f#1@2 ~ f#1@2 ~",
  V: "g1@2 ~ g1 ~@2 b1@2 ~ b1 ~@2 c2 ~@2 c2@2 ~ c#2@2 ~ c#2@2 ~",
  W: "~ g1 ~ g1@3 b1@3 a1@2 ~ g1@2 ~ g1 ~@2 g1@2 ~ g1 ~@2", X: "g1 ~@2 g1@3 b1@3 a1@3 g1@2 ~ b1@3 c2@2 ~ c#2@2 ~",
  Y: "d2 f#2 ~ f#2 ~@2 f#2@2 ~ e2 ~@2 e2 ~@2 e2@2 ~ d2@2 ~ d2@2 ~, e2 ~@11", Z: "[d2@23 ~]/2",
})).s("gm_electric_bass_pick").gain(0.31)

// chords · overdriven guitar · "AIR GUITAR"
const overdriven_guitar = note(`<
  A@5 B@5 ~@7 C@5 ~@8 D@4 E@8 F@2 G@2 H I@3 J K@3 L@2 M@2 N@2 O@2 P@2 Q@2 R@2 S@2 T@2 U@3 V@3 W X@5 Y@4 Z@2 AA@4 AB@2
  AC@4 AD@2 AE@4
>`.pickRestart({
  A: "[~ a4@9]/5", B: "[~@23 a4@93 ~@4]/5",
  C: "[~@16 f#4@6 e4@5 f#4@3 d4@8 ~ f#4@6 e4@6 f#4@3 d4@9 f#4@6 a3@40 ~@11]/5",
  D: "[a3@6 b3@3 a3@21 b3@3 ~@15 g3@2 ~ g3@3 b3@3 a3 ~@2 g3@2 ~ g3@2 ~ g3@2 ~ g3@2 ~@2 g3@2 g3@3 b3@3 ~@3 g3@2 ~ g3@2 ~ g3@2 ~ g3@2 ~, [d3,d4]@48 d4@47 ~, ~@33 a3@22 ~@3 a3@21 ~@2 a3@15, ~@2 d3 d3]/4", // D
  E: "[~@6 b3@3 a3@21 b3@3 ~@18 g3@3 b3@3 ~@3 g3@2 ~ g3@2 ~ g3 ~@2 g3 ~@3 g3 ~ g3@3 b3@3 a3 ~@2 g3@2 ~ g3@2 ~ g3 ~@2 g3 ~@2 a3@6 b3@3 a3@21 b3@3 ~@15 g3@2 ~ g3@3 b3@3 ~@3 g3@2 ~ g3@2 ~ g3 ~@2 g3 ~@2 g3@2 ~ g3@3 b3@3 ~@3 g3@2 ~ g3@2 ~ g3 ~@2 g3 ~@2, [d3,d4]@47 ~ d3@24 d3@23 ~ d3@47 ~ d3@24 d3@19 ~@5, ~@33 a3@22 ~@2 a3@21 ~@4 a3@14 ~@33 a3@22 ~@2 a3@21 ~@3 a3@10 ~@5, ~@24 g3 ~@71, ~@49 d4@95 d4@42 ~@6]/8", // D
  F: "[~ c4@34 ~ [c3,c4]@5 ~ [c3,c4]@6, [c3,g3]@17 ~ g3@5 ~]/2", G: "[[d3,d4]@41 ~ [d3,d4]@6, a3@47 ~]/2",
  H: "[a2,e3,a3]@23 ~", I: "[[e2,b2]@23 [d3,a3,d4]@46 ~@3, e3@19 ~@53]/3", J: "[c3,g3,c4]@18 [c3,g3,c4]@5 ~",
  K: "[[g2,d3,g3]@15 ~@3 [g2,d3,g3]@4 ~@2 d4@43 ~@5, ~@23 [d3,a3]@44 ~@5]/3", // G5 D5
  L: "[a3@11 ~ a3@6 b3@3 a3@9 b3@3 a3@5 a3@4 b3@3 a3 ~@2, [d3,d4]@23 ~]/2", // D
  M: "[d3@8 ~ d3@2 ~ d3@5 ~@4 d3@4 ~@2 d3@5 ~ d3@14 ~, g2@47 ~, g3@5 ~]/2",
  N: "[a3@5 ~ a3@5 a3@2 ~ a3@4 b3@3 a3@9 b3@3 a3@5 a3@4 b3@3 a3 ~@2, [d3,d4]@23 ~]/2", // D
  O: "[g3@5 ~ b3@3 a3 ~@5 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3@3 ~@2 a3@2 ~ g3@2 ~ g3 ~@3 g3@3 ~@3, [g2,d3]@47 ~, ~@15 b3@2 ~@7]/2", // G5
  P: "[a3@5 ~ a3@5 ~ a3@2 ~@4 b3@3 a3@5 ~ a3@3 b3@3 a3@5 ~ a3@3 b3@3 a3 ~@2, [d3,d4]@23 ~, ~@15 a3@5 ~@28]/2", // D
  Q: "[g3@6 b3@2 a3@2 ~ g3 ~@3 g3@2 ~ g3@2 ~ g3@2 ~ g3@2 ~ g3@3 b3@3 a3@3 g3 ~@2 g3@2 ~ g3@2 g3 ~@3, [g2,d3]]/2", // G5
  R: "[a3@5 ~ a3@6 a3@6 b3@3 ~@9 b3@3 a3@9 b3@3 a3 ~@2, [d3,d4]@47 ~, ~@21 a3@11 ~@16]/2", // D
  S: "[g3@2 ~ g3@3 b3@3 a3@3 g3@2 ~ g3 ~@2 g3@2 ~ g3@2 ~ g3@6 b3@2 a3@3 g3 ~@3 g3@2 ~ g3@2 g3 ~@3, [g2,d3]@15 ~, a3 ~@47]/2", // G5
  T: "[[c3,g3,c4]@41 ~ [c3,g3,c4]@6]/2", // C5
  U: "[[d3,d4]@35 ~ [d3,d4]@5 ~ [d3,d4]@5 ~ a2@17 ~ [a2,a3]@6, a3@47 a3@17 ~@8, ~@48 e3@23 ~]/3", // D A
  V: "[[e2,b2]@23 ~ d4@35 ~ [d3,d4]@5 ~ [d3,d4]@6, e3@20 ~@3 d3@36 ~@13, ~ a3@2]/3", W: "[c3,g3,c4]",
  X: "[[g2,d3]@23 ~ [a3,d4]@44 ~@19 a3@3 b3@3 a3@9 b3@3 a3@9 b3@3 a3 ~@2, g3@25 ~@46 a3@15 ~@34, ~@23 d3@44 ~@4 d3@47 ~@2, ~@36 d4@23 ~]/5", // G5 D5
  Y: "[g3@2 ~@4 b3@3 ~@3 g3@2 ~ g3@2 g3@2 ~ g3@2 ~@2 g3@2 ~@4 b3@3 a3@3 g3@2 ~ g3@2 ~ g3@2 ~@21 b3@3 a3@6 ~@4 b3@3 a3@9 b3@3 a3 ~@2, [g2,d3]@47 a3@19 ~@9 a3@5 ~@16, ~@2 g3@7 a3@5 ~@13 g3@5 ~@15 d4@47 ~@2, ~@48 d3@47 ~]/4", // G5
  Z: "[g3@2 ~@4 b3@3 a3@3 g3@2 ~ g3@2 g3@2 ~@2 g3@2 ~ g3 ~@2 g3@3 b3@3 a3@3 g3@2 ~ g3 ~@2 g3@2 ~@4, g2@47 ~, d3@11 ~, ~@3 g3@7 ~@38]/2",
  AA: "[a3@18 b3@3 a3@9 b3@3 a3@5 a3@4 ~@2 a3 ~@8 b3@3 a3@4 g3@2 ~ g3@2 ~ g3@2 ~ g3@2 ~ g3@2 ~ g3@3 b3@3 a3@3 g3 ~@2 g3@2 ~ g3@2 g3 ~@3, [d3,d4]@47 ~ g2@48, ~@42 b3@4 ~ g3@2 ~ g3@7 ~@39, ~@24 d3@23 ~]/4", // D
  AB: "[~@17 b3@4 a3@6 a3@3 b3@3 a3@5 ~ a3@3 b3@3 a3 ~@2, [d3,d4]@47 ~, a3@19 ~@29]/2", // D
  AC: "[g3@3 ~@3 b3@3 a3@3 g3@2 ~ g3@2 ~ g3@2 ~ g3@2 ~ g3@2 ~ g3@3 b3@2 a3@3 g3@2 ~@2 g3@2 ~ g3 ~ g3 ~@2 [d3,d4]@36 ~ [d3,d4]@5 ~ [d3,d4]@6, [g2,d3]@15 ~@17, ~@3 g3@7 ~@37 a3@45 ~@4]/4", // D G5
  AD: "[[g2,g3]@47 ~, d3@15 ~]/2", AE: "[[d3,a3,d4]@79 ~@17]/4",
})).s("gm_overdriven_guitar").gain(0.1)

// chords · overdriven guitar · "AIR GUITAR"
const overdriven_guitar_2 = note(`<
  ~ A@7 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I J K@2 L M N@2 O@4 ~@6 P@3 Q@7 ~@4 R@7 S@8 T@2 U@7 ~@3 V@5 W@4 X@4 O@4 ~@8
>`.pickRestart({
  A: "[~@24 f#4@47 ~ e4@12 d4@33 ~@2 [f#3,a3]@46 ~@3, ~@11 d3@46 ~@2 d3@24 ~, ~@23 f#3@48 g3@43 ~@54, ~@23 a3@45 ~@51 f#4@48 ~]/7", // F#m
  B: "[e4@4 d4@11 ~, [d3,g3]@15 ~]/2", C: "[[d3,f#3]@35 ~@2 [d3,f#3]@5 ~ d3@5, ~@7 f#3]/2",
  D: "[[g2,g3]@35 ~ [g2,g3]@5 ~ [g2,g3]@6]/2", E: "[[d3,f#3]@17 ~ [d3,f#3]@3 [d3,f#3]@3]/2", F: "[[g2,g3]@11 ~]/2",
  G: "[c3,g3,c4]/2", H: "[[a3,d4]@47 ~, d3@15 ~]/2", I: "[a2,e3], a3@11 ~", J: "e2, e3@7 ~, b2@19 ~@5",
  K: "[[d3,a3,d4]@15 ~, c3 ~@47]/2", L: "[c3,g3,c4]", M: "[d3,g3]@7 ~, g2", N: "[~ d4@45 ~@2, [d3,a3]@15 ~]/2",
  O: "[a4@47 ~]/4",
  P: "[d3 ~@5 b3@3 a3@3 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~@5 g3 ~@2 b3@3 a3@3 g3 ~@2 g3 ~@2 g3 ~@2 e4@6 f#4@3 d4@9 f#4@6 e4@3, ~@3 d3@47 ~@22, ~@40 f#4@5 g3 ~@26]/3",
  Q: "[~@3 f#4@3 d4@9 f#4@6 a3@42 f#4@6 e4@18 f#4@6 e4@18 f#4@6 a3@41 ~@10]/7", R: "[a4@92 ~@3 a4@73]/7",
  S: "[~@23 a4@91 ~@5 a4@73]/8", T: "[~@5 f#4@2 e4@2 f#4 d4@3 f#4@2 e4]/2",
  U: "[~@3 f#4@3 d4@9 f#4@6 a3@42 f#4@6 e4@15 f#4@9 b3@23 ~ a3@43 ~@8]/7", V: "[~@23 a4@93 ~@4]/5", W: "[a4@23 ~]/4",
  X: "[a4@23 ~, g4 ~@95]/4",
})).s("gm_overdriven_guitar").gain(0.25)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  ~ A@8 B@4 C@5 D@7 E@4 F@6 G@7 H@8 ~@3 I@8 J@3 K@4 L@2 ~@8 M@5 N@5 O P@4 Q@4 R@5 ~@4
>`.pickRestart({
  A: "[~@23 [f#3,a3,d4]@47 e4@13 ~@36 [f#3,a3]@48 e4@12 d4@13, ~@23 d3@169, ~@70 g3@47 ~@50 g3@25, ~@83 d4@85 ~@24]/8", // D F#m
  B: "[~@23 f#3@48 [g3,b3]@25, ~@22 d3@49 ~@25, ~@23 d4@73, ~@23 a3@43 ~@30]/4", // G
  C: "[~@23 [d3,f#3]@47 ~ [d3,g3,b3]@42 ~@7, ~@23 d4@90 ~@7, ~@23 a3@44 ~@53]/5", // D G
  D: "[[c3,g3,c4]@47 [d3,a3]@47 ~ [a2,e3]@24 [e3,b3,e4]@24 [d3,a3,d4]@25, ~@47 d4@48 a3@20 ~@53]/7", // C5 D5 A5 E5 D5
  E: "[~@23 [c3,c4]@24 [g2,d3]@23 ~ [d3,a3,d4]@25, ~@23 g3@48 ~@25]/4", // C G5 D5
  F: "[~@24 [f#3,a3]@45 ~@3 g4@47 ~ [f#3,a3]@24, ~@23 d3@95 ~ [d3,f#4]@25, ~@24 f#4@47 [g3,b3]@46 ~@27]/6", // F#m D G
  G: "[~@24 g4@47 [d3,f#3,f#4]@45 ~@4 [b3,g4]@44 ~@3 g3, ~@23 [d3,g3]@46 ~@50 [d3,g3]@46 ~@3, ~@24 b3@44 ~@3 a3@42 ~@55]/7", // D Em G5
  H: "[[c3,c4]@47 d3@48 a2@24 [e3,e4]@24 [d3,a3,d4]@46 ~@3, ~@47 a3@73 ~@72, ~@47 d4@45 ~@100]/8", // C E D5
  I: "[~@23 [d3,f#3,d4]@47 ~ d3@48 [d3,f#3,d4]@47 ~@2 d3@24, ~@23 a3@48 g2@46 ~@50 [g2,g3]@25, ~@71 g3@44 ~@4 a3@48 ~@25]/8", // D G
  J: "[~@23 [d3,a3]@48 ~, ~@23 [f#3,d4]@46 ~@3]/3", K: "[[g2,d3,g3]@43 ~@4 [d3,a3]@48 ~, ~@47 [f#3,d4]@46 ~@3]/4",
  L: "[[g2,d3,g3]@13 ~@3]/2", M: "[[c3,c4]@23 [g2,d3]@23 ~ [d3,d4]@73, g3@23 a3@37]/5",
  N: "[~@23 [g2,d3]@47 ~@2 d3@46 ~ g2, ~@23 g3@48 [a3,d4]@49]/5", O: "[d3,g3]",
  P: "[~@23 [d3,d4]@47 [g2,d3,g3]@26, ~@23 a3@49 ~@24]/4", Q: "[~@23 [d3,a3,d4]@48 ~ g2@24, ~@71 [d3,g3]@25]/4",
  R: "[~@24 d3@41 ~@6 [g2,d3]@47 ~@2, ~@23 [a3,d4]@48 g3@49]/5", // G5 D5
})).s("gm_pad_warm").gain(0.28)

// chords · string ensemble 2 · "STRINGS"
const string_ensemble_2 = note("<~@49 A@5 B@8 ~ C D@2 ~@3 E@3 F@6 G H@5 I@4 J@8 K@5 L@5>".pickRestart({
  A: "[~@53 d5@5 ~ d5@5 ~@2 d5@5 f#4@18 g4@4 a4@23 ~@4, ~@23 e4@24 d4@69 ~@4, ~ c5 b4 ~@2]/5",
  B: "[a4@59 [g4,b4]@10 ~@12 g4@14 d5@24 f#5@24 ~@19 a4@2 ~ g4@20 ~@7, ~@69 [a4,c5]@13 ~@77 [g4,b4]@4 ~@29, ~@80 b4@12 ~@51 g5@43 ~@6, ~@161 c5@3 b4@21 ~@7]/8", // G Am G
  C: "~ f#5", D: "[[g4,g5]@7 ~]/2", E: "[~@23 c4@49, ~@11 c5@25]/3",
  F: "[[d4,d5]@47 c5@24 b4@24 d5@49, ~@95 d4@47 ~@2]/6", G: "c5", H: "[b4@23 f#5@45 ~@3 d5@49]/5",
  I: "[~@11 [g4,b4]@9 [a4,c5]@15 b4@12 d4@49, ~@35 g4@10 ~@51]/4", // G Am
  J: "[~@11 [g4,b4]@10 [a4,c5]@14 [g4,b4]@12 [d4,d5]@60 [g4,b4]@9 [a4,c5]@15 [g4,b4]@12 d4@49]/8", // G Am G D G Am G
  K: "[~@12 [g4,b4]@9 [a4,c5]@13 ~ g4@12 [d4,d5]@61 [g4,b4]@9 [a4,c5]@3, ~@17 b4@6 ~@37]/5", // G Am D G Am
  L: "[~@12 g4@11 ~@13 b5@2 ~@2 b5@3 ~ b5@68 ~@8, ~@11 b4@12 d4@88 ~@9, ~@25 f#5@88 ~@7]/5",
})).s("gm_string_ensemble_2").gain(0.8)

// drums · kick
const kick = s("bd").struct("<~ A B@7 C B@15 D B@19 D B@29 D B E B D B D B D B@5 D B@7 F B@3 E ~@4>".pickRestart({
  A: "~@15 x ~@4 x ~@3", B: "x ~@2 x!2 ~@2 x", C: "x!2", D: "x ~@2 x!2 ~@3", E: "x ~@2 x ~ x ~ x", F: "x",
})).gain(0.8)

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

// drums · hihat
const hihat = s("hh").struct("<~@2 A B@2 C D B@4 E F B@4 G ~@12 B@12 ~@12 B@3 H B@3 H B@3 H B@4 ~@36>".pickRestart({
  A: "x ~@2 x ~ x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2", B: "x!8", C: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@2 x",
  D: "~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", E: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~",
  F: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", G: "~ x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~@2 x ~@2",
  H: "x!7 ~",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@77 [~@3 x] ~@19 [~@3 x ~@2 x ~] ~@8>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@9 A ~@8 B C D E C@3 F C@4 ~@11 G C@12 ~@3 G ~@3 G ~@3 G ~@4 C@9 H I C@6 J C@5 H K C@7 ~@4
>`.pickRestart({
  A: "~@5 x!2 ~", B: "x!2 ~ x!5", C: "x!8", D: "x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~",
  E: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~@2", F: "x!7 ~", G: "~@7 x",
  H: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x", I: "~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2",
  J: "x ~ x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", K: "~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A B ~@3 B ~@15 B ~@3 B ~@10 C B ~ B ~ B ~ B ~ B ~@3 B ~@15 B ~ B ~ B D ~@2 B D ~@6 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3
>`.pickRestart({
  A: "~@17 x ~@6", B: "x", C: "~@3 x", D: "~@23 x",
})).gain(0.8)

// drums · ride
const ride = s("rd").struct("<~@26 x ~@79>").gain(0.8)

stack(
  electric_guitar_clean, bass, overdriven_guitar, overdriven_guitar_2, pad_warm, string_ensemble_2, kick, snare, hihat,
  low_tom, open_hat, crash, ride
)

More by The Wallflowers