Strudelify
KeyD minorTempo103 bpm
0:00/0:00
// Hell — Squirrel Nut Zippers
// 103 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 78 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/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.

// other · clarinet
const clarinet = note("<~@2 A B C D E F G H ~@60 A B C D E F G I>".pickRestart({
  A: "d4@5 [bb3,c4] a3@5 ~ a3@2 ~ ab3 ~ a3 ~@6", B: "a3 ~@2 ab3 ~ a3 ~@6 g3 ~@2 gb3 ~ f3 ~@6",
  C: "g3 ~@2 gb3 ~ f3 ~@6 g3 ~@2 gb3@2 db4 ~@6", D: "~@2 bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ a3 ~@2 bb3 ~ a3@2 ~@5",
  E: "d4@5 [bb3,c4] a3@5 ~ a3 ~@2 ab3@2 a3 ~@6", F: "a3 ~@2 ab3 a3@2 ~@6 g3 ~@2 gb3 ~ f3@2 ~@5",
  G: "g3 ~@2 gb3 ~ f3@2 ~@5 g3 ~@2 gb3 ~ db4 ~@6", H: "~@2 bb3 ~ bb3 ~ bb3 ~@2 bb3 ~ bb3 a3@2 ~ bb3 ~ a3@2 ~@5",
  I: "~ a3@3 ~ bb3 ~ g3@2 ~ e3@2 d3@3 ~@3 d3@2 ~@4, ~@6 a3@2 ~ f3@2 ~@13",
})).s("gm_clarinet").gain(0.5).pan(0.7)

// other · tenor sax
const tenor_sax = note("<~@2 A B C D E F G H ~@27 I J@2 K@2 L@3 M@2 ~@23 A B C D N F G O>".pickRestart({
  A: "d3@5 [bb2,c3] a2@5 ~ a2@2 ~ ab2 ~ a2 ~@6", B: "a2 ~@2 ab2 ~ a2 ~@6 g2 ~@2 gb2@2 f2@2 ~@5",
  C: "g2 ~@2 gb2 f2@2 ~@6 g2 ~@2 gb2@2 db3@2 ~@5", D: "~@2 bb2 ~ bb2 ~@2 bb2 ~ bb2!2 ~ a2@2 ~ bb2 ~ a2@2 ~@5",
  E: "d3@5 [bb2,c3] a2@4 ~@2 a2 ~@2 ab2 ~ a2@2 ~@5", F: "a2 ~@2 ab2 ~ a2 ~@6 g2 ~@2 gb2 f2@2 ~@6",
  G: "g2 ~@2 gb2 ~ f2@2 ~@5 g2 ~@2 gb2 ~ db3 ~@6", H: "~@2 bb2 ~ bb2 ~@2 bb2 ~ bb2 ~ bb2 a2@2 ~ bb2 ~ a2@2 ~@5",
  I: "~@15 d3@2 ~ f3@2 ~ d3@2 e3, ~@17 e3@2 ~ e3@2 ~@2",
  J: "[f3@2 ~ f3@2 e3 d3@2 e3 f3@2 ~ f3@2 ~ f3@2 e3 ~@2 e3 f3@2 ~ f3@2 e3@2 ~ e3@2 f3@2 e3 ~ d3@2 db3@2 ~ db3@2 a2@4 ~@2, ~@2 e3@2 ~@7 e3@2 ~ e3@2 ~@3 d3@2 ~@2 e3@2 ~@3 f3@2 ~@9 d3@2 ~@7]/2",
  K: "[~ ab2@2 a2@2 db3 ~@2 e3 ~@2 a2 a3@3 ab3@2 ~ bb3@3 a3@2 ab3@2 ~ ab3@2 a3@3 db4@2 c4@2 ~ d4@12, a2@2 ~@15 a3@2 ~@6 a3@2 ~@8 db4@2 ~@11]/2",
  L: "[~@3 a3@2 f4 d4@4 ~@2 a3@2 ~ d4@5 ~ a3@2 f4@2 d4 ~ d4!2 ~ d4@2 db4 ~ d4 ~ d4 e4@13 ~ a3@2 ~ db4@5 ~ a3@2 ~ db4@5 ~ a3@2 e4, ~@2 ab3@2 ~@7 ab3@2 ~ f4@2 ~@4 ab3@2 ~@15 eb4 ~@12 ab3@2 ~ e4@2 ~@4 ab3@2 ~ e4@2 ~@4 ab3@2 ~@2]/3",
  M: "[[db4,e4] ~ db4 ~@2 db4 ~ db4@2 c4 db4 ~ db4 d4@26 ~@9]/2", N: "d3@4 ~ [bb2,c3] a2@4 ~@2 a2 ~@2 ab2 ~ a2@2 ~@5",
  O: "~@2 a2!2 ~ a2!2 ~@2 a2 ~@2 d3@2 ~@4 d3@3 ~@3",
})).s("gm_tenor_sax").gain(0.5).pan(0.7)

// other · trumpet
const trumpet = note("<~@2 A B C D E F G H ~@60 A B C D E F G I>".pickRestart({
  A: "d5@4 ~ [bb4,c5] a4@5 ~ a4 ~@2 ab4 ~ a4 ~@6", B: "a4 ~@2 ab4 a4 ~@7 g4 ~@2 gb4 ~ f4@2 ~@5",
  C: "g4 ~@2 gb4 f4@2 ~@6 g4 ~@2 gb4 ~ db5@2 ~@5", D: "~@2 bb4 ~ bb4 ~ bb4 ~@2 bb4!2 ~ a4@2 ~ bb4 ~ a4 ~@6",
  E: "d5@4 ~ [bb4,c5] a4@5 ~ a4 ~@2 ab4 ~ a4@2 ~@5", F: "a4 ~@2 ab4 ~ a4 ~@6 g4 ~@2 gb4 ~ f4 ~@6",
  G: "g4 ~@2 gb4 ~ f4 ~@6 g4 ~@2 gb4 ~ db5 ~@6", H: "~@2 bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ a4 ~@2 bb4 a4 ~@7",
  I: "~@2 a3@2 ~ a3!2 ~@2 a3 ~@2 d4@3 ~@3 d4@3 ~@3",
})).s("gm_trumpet").gain(0.5).pan(0.3)

// other · trumpet
const trumpet_2 = note("<~@5 A B C D E ~@43 F G H I@2 J K L M ~@11 A B C D N>".pickRestart({
  A: "~@18 d5 ~ d5 e5 ~@2", B: "f5@4 e5 eb5 d5@5 ~ d5 ~@2 db5 ~ d5 ~@6", C: "d5 ~@2 db5 ~ d5 ~@6 e5 ~@2 eb5 ~ f5 ~@6",
  D: "e5 ~@2 eb5 ~ f5 ~@6 e5 ~@2 eb5 ~ g5 ~@6", E: "~@2 db5 ~@2 db5 ~ db5 ~ db5 ~ db5 d5@9 ~@3",
  F: "~@18 a4 ~ d5 e5 ~ f5", G: "a5@2 ~@3 a5 ~@2 ab5 ~ a5 bb5 ~ a5@11", H: "~@2 a5 ~ ab5 ~ a5 ~ bb5 ~ a5 ~ a5@4 ~ a4@7",
  I: "[~@3 [e5,f5] g5@7 f5 e5@2 f5 g5@2 ~ db5 ~ d5 e5@2 a4@2 ~ a4@2 ~@3 db5 e5@2 d5 [db5,d5] ~ d5@11, ~@29 a4@2 ~@17, ~@30 bb4@2 d5 ~@15]/2", // Fmaj7 Dmaj7
  J: "a5@6 ~ c6@3 ~ bb5 ~ a5@4 f5@2 ~ g5@4",
  K: "~@2 d5 e5@2 d5 ~@2 a4 ~@3 bb4 ~ bb4 a4 ~ a4@5 ~@2, ~ f5@2 ~@8 a4@2 ~@11",
  L: "~@2 g5 ~@2 e5 g5@4 ~ e5 g5@2 ~ gb5 ~ f5 e5 ~@2 g5@2 ~", M: "e5 ~ db5 ~@2 bb4 a4 ~ g4 f4@2 e4 d4@10 ~@2",
  N: "~ a4@2 ~@2 a4!2 ~@2 a4@2 ~ d5@3 ~@3 d5@3 ~@3",
})).s("gm_trumpet").gain(0.79).pan(0.3)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@3 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 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 A B
  C D A B C D A B C D A B C D A B C E
>`.pickRestart({
  A: "[f3,a3,d4] ~ [f3,a3,d4]!2 ~ [f3,d4] [f3,a3,d4] ~ [f3,a3,d4]!2 ~ [f3,a3,d4]!2 ~ [f3,a3,d4]!2 ~ [f3,a3,d4]!2 ~ [f3,a3] [f3,a3,d4] ~ [f3,a3,d4]", // Dm F Dm
  B: "[f3,a3,d4] ~ [f3,a3,d4]!2 ~ [f3,d4] [f3,a3,d4] ~ [f3,a3,d4]!2 ~ [f3,a3,d4] [e3,g3,a3,db4] ~ [e3,g3,a3,db4]!2 ~ [e3,g3,a3,db4]!2 ~ [e3,g3,a3,db4]!2 ~ [e3,g3,a3,db4]", // Dm A7
  C: "[e3,g3,a3,db4] ~ [e3,g3,a3,db4]!2 ~ [e3,g3,a3,db4]!2 ~ [e3,g3,db4] [e3,g3,a3,db4] ~ [e3,g3,a3,db4]!2 ~ [e3,g3,a3,db4]!2 ~ [e3,g3,a3,db4]!2 ~ [e3,db4] [e3,g3,a3,db4] ~ g3", // A7 Dbdim A7 Dbm A7
  D: "[e3,g3,a3,db4] ~ [e3,g3,db4] [e3,g3,a3,db4] ~ [e3,g3,db4] [e3,g3,a3,db4] ~ e3 [e3,g3,a3,db4] ~ [e3,g3,a3,db4] [f3,g3,a3,d4] ~ f3 [f3,a3,d4] ~ d4 [f3,a3,d4] ~ [f3,d4] [f3,a3,d4] ~ [f3,d4]", // A7 Dbdim A7 Dbdim A7 Dm
  E: "[e3,g3,a3,db4] ~ [e3,g3,db4] [e3,g3,a3,db4] ~ [e3,g3,db4] [e3,g3,a3,db4] ~ e3 [e3,g3,a3,db4] ~ [e3,g3,a3,db4] [f3,g3,d4] ~@5 [f3,a3,d4] ~@5", // A7 Dbdim A7 Dbdim A7 G7 Dm
})).s("gm_acoustic_guitar_nylon").gain(0.22)

// chords · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note(`<
  A@3 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 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 A B
  C D A B C D A B C D A B C D A B C E
>`.pickRestart({
  A: "~@5 a3 ~@14 d4 ~@3", B: "~@5 a3 ~@18", C: "~@8 a3 ~@11 [g3,a3] ~@2 [e3,a3,db4]",
  D: "~@2 a3 ~@2 a3 ~@2 [g3,a3,db4] ~@5 [a3,d4] ~@2 [f3,a3] ~@2 a3 ~@2 a3", E: "~@2 a3 ~@2 a3 ~@2 [g3,a3,db4] ~@15",
})).s("gm_acoustic_guitar_nylon").gain(0.12)

// bass · acoustic bass
const bass = note(`<
  ~@2 A B C D E F G H I J K H E F G H E F G H E F G H E F G H E F G H E F G H E F G H E F K H I J K H E F K H I J K H E
  F G H I J K H I J K H I J K H I J K L
>`.pickRestart({
  A: "~ d2@3 ~ a2@3 ~@4 d2@3 ~@2 a2@3 ~@4", B: "~ d2@2 ~@2 a2@4 ~@3 a2@3 ~@2 e2@2 ~@5, ~ c2 ~@22",
  C: "a2@2 ~@3 e2@2 ~@5 a2@2 ~@3 e2@2 ~@5", D: "a2 ~@4 e2@2 ~@5 a2@2 ~@3 d2@2 ~@5",
  E: "d2@2 ~@3 a2@2 ~@5 d2 ~@4 a2@2 ~@5", F: "d2@2 ~@3 a2 ~@6 a2@2 ~@3 e2 ~@6", G: "a2@2 ~@3 e2 ~@6 a2 ~@4 e2 ~@6",
  H: "a2 ~@4 e2 ~@6 a2 ~@4 d2 ~@6", I: "d2 ~@4 a2 ~@6 d2 ~@4 a2 ~@6", J: "d2 ~@4 a2 ~@6 a2 ~@4 e2 ~@6",
  K: "a2 ~@4 e2 ~@6 a2 ~@4 e2 ~@6", L: "a2 ~@4 e2 ~@6 a2 ~@5 d2@6",
})).s("gm_acoustic_bass").gain(0.8)

// chords · epiano1
const epiano1 = note("<~@14 A B C D ~@4 E F G H I J K L ~@4 A B C D ~@12 A B C D ~@4 A B C D ~@16>".pickRestart({
  A: "[f4,a4,d5] ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4 ~@2 [f4,a4,d5]", // Dm
  B: "~ a4 ~ [a4,d5] ~ [f4,a4,d5] ~ a4 ~ a4 ~ [f4,a4,d5] ~ [g4,a4] ~ [g4,a4] ~ [g4,a4,db5] a4 [g4,db5] [e4,a4] [g4,db5] [e4,g4,a4,db5] ~", // D5 Dm Gsus2 A7 Gdim A5 Gdim A7
  C: "[g4,a4,db5] ~ [g4,a4,db5] ~ [e4,g4,a4,db5] ~ [e4,g4,a4,db5] ~ [e4,g4,a4,db5] ~ [g4,a4,db5] ~ [g4,a4] ~ [g4,a4] ~@2 [g4,a4] ~ [g4,a4] ~ [g4,a4,db5] ~ [g4,a4]", // A7 Gsus2 A7 Gsus2
  D: "~ [g4,a4] ~ [g4,a4] [g4,a4,db5] ~@2 [g4,a4,db5] ~ [g4,a4] ~ [g4,a4,db5] ~ [f4,d5]@2 a4!2 ~@2 [a4,d5] ~ a4 ~ a4, ~@13 a4 ~@10", // Gsus2 A7 Gsus2 A7 Dm D5
  E: "~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5]!2 ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5]@2 ~ [f4,a4,d5]@3", // Dm
  F: "~@2 [f4,a4,d5] ~ [f4,a4,d5] d5 [f4,a4] [f4,a4,d5] ~ [f4,a4,d5]!2 ~@2 [e4,g4] g4 [e4,bb4] ~ [e4,g4,bb4,db5] ~ [e4,bb4,db5]@2 [e4,g4,bb4,db5]@3, ~@9 g4 ~@2", // Dm F Dm Em Edim Bbdim Edim
  G: "~@2 [e4,g4,bb4,db5]!2 ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5]!2 ~ [e4,g4,bb4,db5]!2 ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5]@2 ~ [e4,g4]@2, ~@7 [bb4,db5]", // Edim Em Bbm
  H: "~@2 [e4,g4,bb4,db5]!2 ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5]!2 ~@2 [f4,a4,d5] ~ [f4,a4,d5]!2 ~ [f4,a4,d5]@2 ~ [f4,a4,d5]@3", // Edim Dm
  I: "~@2 [f4,a4,d5] ~ [f4,a4,d5]!2 ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5]@2 ~ d5@2, ~@7 [f4,a4]", // Dm F
  J: "~@2 [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5]!2 ~ [f4,a4,d5] ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5]@3", // Dm Edim
  K: "~@2 [e4,g4,bb4,db5]!2 ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5] ~ [e4,g4,bb4,db5]!2 ~@2 [e4,g4,bb4,db5]@3", // Edim
  L: "~@2 [g4,a4] [g4,a4]@2 bb4@2 ~ d5@2 ~ bb4 a4@9 ~@3, ~@7 c5@2 ~ c5@2 ~@12", // Gsus2
})).s("gm_epiano1").gain(0.24)

// chords · epiano1 · soft notes
const epiano1_soft = note("<~@14 A B C D ~@16 A B C D ~@12 A B C D ~@4 A B C D ~@16>".pickRestart({
  A: "~@2 [f4,d5] ~ [f4,d5] ~ [f4,d5] ~ [f4,d5] ~ [f4,d5] ~ [f4,d5] ~ [f4,d5] ~ [f4,d5] ~ [f4,d5] ~ [f4,d5] ~@3", // Dm
  B: "~ [f4,d5] ~ f4 ~@3 [f4,d5] ~ [f4,d5] ~@5 db5 ~ e4!2 ~@5, ~@7 e4 ~@4", // Dm
  C: "e4 ~ e4 ~@7 e4 ~ [e4,db5] ~ [e4,db5] ~ e4 db5 ~ [e4,db5] ~ e4!2 db5", // Dbm
  D: "~ [e4,db5] e4 db5 e4 ~@2 e4 ~ [e4,db5] e4 ~@6 [f4,d5] ~ f4 ~ [f4,d5] ~ [f4,d5]", // Dbm Dm
})).s("gm_epiano1").gain(0.12)

// drums · kick
const kick = s("bd").struct("<~@2 [x!2]!75 [x ~ x!2]>").gain(0.31)

// drums · snare
const snare = s("sd").struct("<~ [~@7 x] [~@3 x ~@3 x]!75 [~@3 x ~@2 x ~]>").gain(0.31)

// drums · low tom
const low_tom = s("lt").struct("<~ [~@7 x] [~@5 x ~@11 x ~@6]!75 [~@5 x ~@12 x ~@5]>").gain(0.31)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@3
  [x ~ x!2 ~ x!2 ~ x ~@2 x!2 ~ x!2 ~ x!2 ~ x!3 ~]!74
  [x ~ x!2 ~ x!2 ~ x ~@2 x!2 ~@11]
>`).gain(0.31)

stack(
  clarinet, tenor_sax, trumpet, trumpet_2, acoustic_guitar_nylon, acoustic_guitar_nylon_2, bass, epiano1, epiano1_soft,
  kick, snare, low_tom, hihat
)