Strudelify

Flagpole Sitta

Harvey Danger

KeyD majorTempo145 bpm
0:00/0:00
// Flagpole Sitta — Harvey Danger
// 145 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 130 bars on a 16-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, guitar program 27.
setcpm(145/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 · overdriven guitar
const overdriven_guitar = note(`<
  ~ A@2 B@2 C@2 A@4 D@2 B@2 A@4 D@2 B@2 A@4 E@2 B@2 A@4 D@2 B@2 A@4 D@2 B@2 A@4 E@2 B@2 A@4 E@2 B@2 A@2 F@2 C@2 G@2 A@2
  F@2 C@2 H@2 C@2 I@7 J A@2 D@2 B@2 A@4 D@2 B@2 A@4 E@2 B@2 A@4 E@2 B@2 A@2 K L@2 M@2 N@2 O P
>`.pickRestart({
  A: "[d3,a3,d4]!4", B: "[c3,g3,c4]!4", C: "[g2,d3,g3]!4", D: "[e3,a3,e4]!4", E: "[e3,b3,e4]!4", F: "[a2,e3,a3]!4",
  G: "[f3,c4,f4]!4", H: "[f2,c3,f3]!4", I: "[a2,d3,a3]!4",
  J: "[c#4,e4,a4] [g#3,c4,d#4,g#4] [f#3,g3,a#3,b3,c#4,d4,f#4,g4] [f3,a3,c4,f4] [e3,g#3,b3,e4] [d#3,g3,a#3,d#4] ~ [c3,c#3,e3,f3,g3,g#3,c4,c#4] [a2,b2,d3,d#3,f#3,a3,b3] [a#2,f3,a#3] ~ [g#2,c3,d#3,g#3] [f#2,g2,a2,a#2,b2,c#3,f#3,g3] [f2,c3,f3] [e2,g#2,b2,e3] [d#2,g2,a#2,d#3], [a2,d3,a3]@4 a2@4 ~@2 [a2,c#3,e3,a3]@2 ~ a2@3, ~@4 [d3,a3]@2 [d3,f#3,a3,d4]@2 ~ d3@3 [d3,a3]@4", // A G# Gmaj7 F E D# C#maj7 B7 …
  K: "[d3,d4]!4", // D
  L: "[[d3,d4]@2 [d3,d4]@2 [d3,d4]@2 [d3,d4] ~ [d3,d4]@2 [d3,d4]@2 [d3,d4]@2 [d3,d4]@2, ~@15 [c3,c4]@2 ~@15]/2", // D C
  M: "[[d3,d4]@2 [d3,d4]@2 [d3,d4]@2 [d3,d4] ~ d4@2 d4@2 d4@2 d4@2, ~@15 [c3,c4]@2 ~@15]/2", // D C
  N: "[d4@2 d4@2 d4@2 d4 ~ d4@2 d4@2 d4@2 d4@2, ~@15 c4@2 ~@15]/2", O: "d4@4 d4@4 d4@3 ~ c4@4", P: "[d2,d3] ~@3",
})).s("gm_overdriven_guitar").gain(0.23).pan(0.3)

// chords · distortion guitar
const distortion_guitar = note("<~@128 [~@11 c3 ~@4] ~>").s("gm_distortion_guitar").gain(0.15).pan(0.7)

// chords · distortion guitar
const distortion_guitar_2 = note("<~ A B C D E@2 F G ~@121>".pickRestart({
  A: "d3 [d3,e3]", B: "[d3,f#3] [d3,a3]", C: "[c3,g3] [c3,f#3]", D: "[c3,e3] [c3,d3]", E: "c3 e3", F: "d3 a2",
  G: "d3 a2 [d3,g3] [d3,f#3]", // G5 D
})).s("gm_distortion_guitar").gain(0.72)

// bass · electric bass finger
const bass = note(`<
  ~ A@2 B@2 C@2 A@4 D@2 B@2 A E A@2 D@2 B@2 A E A@2 F G B H A@4 D@2 B@2 A E A@2 D@2 B@2 A E A@2 F G B H A@4 F G B H A@2
  I@2 J@2 K@2 L@2 I@2 J@2 K@2 J@2 I@8 A@2 D@2 B@2 A E A@2 D@2 B@2 A E A@2 F G B H A@4 F G B H A M A M A M ~@5
>`.pickRestart({
  A: "d2!4", B: "c2!4", C: "g1!4", D: "a1!4", E: "d2 a1 g2 f#2", F: "e2!4", G: "e2@2 e2@2 g2@2 f#2 f2", H: "c2!2 e2!2",
  I: "a2!4", J: "g2!4", K: "f2!4", L: "d3!4", M: "d2@4 d2@4 d2@4 d2@2 ~ c2",
})).s("gm_electric_bass_finger").gain(0.72)

// other · lead 8 bass lead
const lead_8_bass_lead = note("<~@25 A@8 ~@16 B@8 A@8 ~@40 B@8 A@8 ~@9>".pickRestart({
  A: "[d4@11 d4 f#4 a4@2 e4@12 e4 g4 a4@2 e4@12 e4 g4 a4@2 f#4@8 d4@9]/8",
  B: "[d4@11 d4 f#4 a4@2 e4@12 e4 g4 a4@2 e4@12 e4 g4 a4@2 f#4@8 d4@8 ~]/8",
})).s("gm_lead_8_bass_lead").gain(0.72)

// drums · kick
const kick = s("bd").struct(`<
  A B@3 C B C B A D@7 B D@7 B@4 C B C B E D@7 B D@6 F ~ B@3 C B C B E B@3 C B C@2 G H ~@22 H D@7 B D@7 B@4 C B C B E B@3
  C B C@2 D A I A I A I A C H
>`.pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x ~@2 x!2 ~@3", C: "x ~@3 x ~@3 x ~@2 x!2 ~@2 x", D: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x",
  E: "x ~@3 x ~@2 x!2 ~@2 x!2 ~@2 x", F: "x ~@2 x!2 ~@11", G: "~@3 x ~@3 x ~@5 x ~ x", H: "x",
  I: "x ~@3 x ~@3 x ~@3 x ~@2 x",
})).gain(0.46)

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

// drums · hihat
const hihat = s("hh").struct("<~@122 [~@15 x] ~ [~@15 x] ~ [~@15 x] ~@3>").gain(0.46)

// drums · open hat
const open_hat = s("oh").struct("<~ [x!4]!64 x ~@23 [x!4]!40 x>").gain(0.46)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~@23 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@8
>`.pickRestart({
  A: "x",
})).gain(0.46)

// drums · crash · soft notes
const crash_soft = s("cr").struct(`<
  ~@73
  [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]
  [x!2 ~ x!3 ~ x!3 ~ x!2 ~@3]
  ~@3
  [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]
  [x!2 ~ x!3 ~ x!3 ~ x!2 ~@3]
  ~@50
>`).gain(0.21)

// drums · ride
const ride = s("rd").struct("<~@65 [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]!23 ~@42>").gain(0.15)

stack(
  overdriven_guitar, distortion_guitar, distortion_guitar_2, bass, lead_8_bass_lead, kick, snare, hihat, open_hat,
  crash, crash_soft, ride
)

More by Harvey Danger