Strudelify

Madeline

Hanson

KeyG majorTempo96 bpm
0:00/0:00
// Madeline — Hanson
// 96 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · slap bass 2
const bass = note(`<
  A B A C A B A C A D E F A B A C A G H I J K L M N O P Q J K R ~ A B A C A B A C A D E F J K L M N O P Q J K R ~ A B A
  C A B A C J K L M N O P Q J K R ~ A B ~@2
>`.pickRestart({
  A: "g1 ~ g2 ~@3 g1 ~ b1 ~ b1 ~@2 g1 b1 ~", B: "c2 ~ c3 ~@4 e2 ~ g2 a2 ~@2 g2 e2 ~, ~@6 a2 ~",
  C: "c2 ~ c3 ~@3 c2 e2 ~ g2 a2 ~ g2 ~ a2 ~", D: "c2 ~ c3 ~@6 g#1!2 ~ g#1 ~ g#1 ~", E: "a1@2 ~@2 a1 ~@7 a1@2 ~@2",
  F: "~@3 a1 ~@5 d2!3 ~ d2 ~@2", G: "c2 ~ c3 ~@6 g#1!3 ~ g#1@2 a1", H: "a1@4 a1@3 ~@5 a1@2 ~@2",
  I: "~@4 a1 ~@4 d2!3 ~ d2 ~@2", J: "c2 b1", K: "a1 g1", L: "c2@13 ~@3", M: "d2 ~ d2 ~ d2 ~ d2 ~ d2!2 ~ d2 ~ d2 ~@2",
  N: "g1@2 ~@4 g1@2 e1@2 ~@4 e1 ~", O: "c2@2 ~@4 c2 ~ d2 ~ d2@2 c2 ~ d2 ~", P: "g1 ~@5 g1@2 e1@2 ~@4 e1@2",
  Q: "c2@2 ~@4 c2 ~ d2 ~ d2 ~ c2 ~ d2 ~", R: "c2@7 ~@9",
})).s("gm_slap_bass_2").gain(0.79)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  A B C B D B C B D E F G D B C B D E F G H I J K ~@4 L M N ~ A B C B D B C B D E F G H I J K ~@4 L M N ~ A B C B D B C
  B H I J K ~@4 L M N ~ A B ~@2
>`.pickRestart({
  A: "~@4 [b4,d5,g5] ~@7 [a4,d5,f5,f#5] ~@3", B: "~@4 [g4,c5,d#5,e5] ~@5 d5 [a4,d5,f#5] ~@4, ~@9 [a4,d5,f5,f#5]@2 ~@5",
  C: "~@4 [b4,d5,f5,g5] ~@7 [a4,d5,f5,f#5] ~@3", D: "~@4 [b4,d5,f5,g5] ~@7 [a4,d5,f#5] ~@3",
  E: "~@4 [g4,c5,d#5,e5] ~@4 [c4,d#4,g#4]!2 [c4,d#4,g#4]@2 ~ [c4,g#4]@2, ~@13 d#4@2 ~", // C G# Fm
  F: "[c4,e4,a4] ~ [c4,e4,a4] ~@3 [c4,e4,a4] ~", // Am
  G: "~@4 [c4,e4,a4] ~@4 [f#4,a4,c5,d5] ~ [a4,c5,d#5] ~ [f#4,a4,c5,d5] ~@2, ~@5 [f#4,a4,c5,d5] ~@2", // Am D7 Adim D7
  H: "[g4,c5,e5]@7 ~ [f#4,b4,d5]@6 ~@2", I: "[e4,a4,c5]@7 ~ [d4,g4,b4]@5 ~@3", J: "[g4,c5,e5]@7 ~",
  K: "[a4,c5,d5,f#5] ~ [a4,c5,d5,e5,f#5] [c5,f#5] [a4,d5] ~ [a4,c5,d5,f#5] ~ [a4,c5,d5,f#5] ~ [a4,c5,d5,f#5] ~ [a4,c5,d5,f#5] ~ [a4,c5,d5,f#5] ~", // D7 Cdim D5 D7
  L: "[g3,c4,e4]@7 ~ [f#3,b3,d4]@7 ~, d#4 ~@15", M: "[e3,a3,c4]@8 [d3,g3,b3]@7 ~", N: "[g3,c4,e4]",
})).s("gm_overdriven_guitar").gain(0.51)

// chords · distortion guitar
const distortion_guitar = note("<~@24 A B C D ~@20 A B C D ~@16 A B C D ~@8>".pickRestart({
  A: "[b3,d4,g4]@7 ~ [a3,d4,f#4]@8", B: "[g3,c4,e4]@7 ~ [a3,d4,f#4]@7 ~", C: "[b3,d4,g4]@8 [a3,d4,f#4]@7 ~",
  D: "[g3,c4,e4]@7 ~ [a3,d4,f#4]@7 ~, ~@8 c#4 ~@7", // C D
})).s("gm_distortion_guitar").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  [x ~@3 x ~@2 x!2 ~@3 x!4]!31
  ~
  [x ~@3 x ~@2 x!2 ~@3 x!4]!23
  ~
  [x ~@3 x ~@2 x!2 ~@3 x!4]!19
  ~
  [x ~@3 x ~@2 x!2 ~@3 x!4]!2
  ~@2
>`).gain(0.67)

// drums · rim
const rim = s("rim").struct("<[x!8]!31 ~ [x!8]!23 ~ [x!8]!19 ~ [x!8]!2 ~@2>").gain(0.4)

// drums · rim · soft notes
const rim_soft = s("rim").struct(`<
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!31
  ~
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!23
  ~
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!19
  ~
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!2
  ~@2
>`).gain(0.27)

// drums · snare
const snare = s("sd").struct("<A@11 B A@7 B A@3 B A@7 ~ A@11 B A@3 B A@7 ~ A@11 B A@7 ~ A@2 ~@2>".pickRestart({
  A: "~ x ~ x", B: "x!16",
})).gain(0.67)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!31 ~ [~ x ~ x]!23 ~ [~ x ~ x]!19 ~ [~ x ~ x]!2 ~@2>").gain(0.6)

// drums · hihat
const hihat = s("hh").struct("<[x!16]!31 ~ [x!16]!23 ~ [x!16]!19 ~ [x!16]!2 ~@2>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<A ~@19 A ~@7 A ~@3 A ~@11 A ~@7 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3>".pickRestart({
  A: "x",
})).gain(0.53)

// drums · tambourine
const tambourine = s("tb").struct("<[x!8]!31 ~ [x!8]!23 ~ [x!8]!19 ~ [x!8]!2 ~@2>").gain(0.6)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!31
  ~
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!23
  ~
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!19
  ~
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!2
  ~@2
>`).gain(0.33)

// drums · cowbell
const cowbell = s("cb").struct(`<
  [x ~ x ~@3 x!3 ~ x ~@5]!31
  ~
  [x ~ x ~@3 x!3 ~ x ~@5]!23
  ~
  [x ~ x ~@3 x!3 ~ x ~@5]!19
  ~
  [x ~ x ~@3 x!3 ~ x ~@5]!2
  ~@2
>`).gain(0.6)

stack(
  bass, overdriven_guitar, distortion_guitar, kick, rim, rim_soft, snare, clap, hihat, crash, tambourine,
  tambourine_soft, cowbell
)

More by Hanson