Strudelify

Head Over Feet

Alanis Morissette

KeyG majorTempo80 bpm
0:00/0:00
// Head Over Feet — Alanis Morissette
// 80 bpm, 8/8, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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 · distortion guitar
const distortion_guitar = note(`<
  ~@12 A B A B A B C D ~@6 A B A B A B C D ~@6 A B A E A B C D ~@14 A B A B A B C D A B A B A B C D A B A E A B C D
>`.pickRestart({
  A: "[d3,a3,d4]@6 [b2,f#3,b3] [b2,f#3,b3]@3 [b2,f#3,b3,d4]@6", B: "[g2,d3,g3]@3 [a2,e3,a3]@5",
  C: "[f2,c3,f3]@3 [c3,g3,c4]@5", D: "[g2,d3,g3]", E: "[a#2,f3,a#3]@3 [a2,e3,a3]@5",
})).s("gm_distortion_guitar").gain(0.4)

// chords · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note(`<
  A B A C A B A C A B A C ~@8 A C A B A C ~@8 A C A B A C ~@8 A C A B A C A C A B A C ~@26
>`.pickRestart({
  A: "[c4,g4,c5]@2 [c4,g4,c5] [g3,d4,g4,b4]@4 [g3,d4,g4,b4]", // C5 G
  B: "[a3,e4,a4,c5]@2 [a3,e4,a4,c5] [f3,c4,f4]@3 ~ [g3,d4,g4,b4]", C: "[a3,e4,a4,c5]@2 [a3,e4,a4,c5] [f3,c4,f4]@3 ~@2",
})).s("gm_electric_guitar_clean").gain(0.4)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@5 A B C B C B C D E D E D E F G B C B C B C D E D E D E F G B C B C B C D E D H D E F G B C B C B C B C B C B C B C
  D E D E D E F G D E D E D E F G D E D H D E F G
>`.pickRestart({
  A: "~@3 c3", B: "c2@3 g1@5", C: "a1@3 f1@5", D: "d2@6 b1 b1@3 b1@6", E: "g1@3 a1@5", F: "f1@3 c2@5", G: "g1",
  H: "a#1@3 a1@5",
})).s("gm_fretless_bass").gain(0.4)

// chords · pad sweep · "Pad 8 (sweep)"
const pad_sweep = note("<A@6 ~@80>".pickRestart({
  A: "[c2@3 g1@5 a1@3 f1@5 c2@3 g1@5 a1@3 f1@5 c2@3 g1@5 a1@3 f1@5, c4]/6",
})).s("gm_pad_sweep").gain(0.41)

// other · harmonica
const harmonica = note("<~@40 A B C D E F G H ~@30 I J ~ K I J L ~>".pickRestart({
  A: "a5@6 ~@2 a5@6 a5 g5", B: "a5@2 b5@2 a5@2 b5@4 d6@2 ~@2 b5 d6", C: "e6@2 d6 b5@2 d6 e6@2 d6 b5@2 d6 e6 f#6 e6 d6",
  D: "e6@2 d6 e6@2 d6 e6@8 ~ b6", E: "d7@2 b6 d7 b6@2 d7@2 b6 d7 b6@2 a6@2 ~ b6",
  F: "d7@2 b6 d7@2 b6 [d7,f#7]@4 b6@4 ~ b6", G: "d6@2 b5 f#5 e5@2 d5@2", H: "e5 d5@2 ~", I: "d6@3 a5@3 ~@2",
  J: "d6@6 g5@4 a5@3 ~@3", K: "a5@3 g5@3 a5@2", L: "g5@3 a5@3 g5@2",
})).s("gm_harmonica").gain(0.4)

// chords · acoustic guitar nylon · "Acoustic Guitar" · G Am F5 C5 F5 C5 G Am …
const acoustic_guitar_nylon = note(`<
  ~@58
  [~@3 [g3,d4,g4,b4]@4 [g3,d4,g4,b4]]
  [[a3,e4,a4,c5]@4 [a3,e4,a4,c5]@2 [f3,c4,f4]@4 ~ [c3,g3,c4] [f3,c4,f4] [f3,c4,f4]@2 [f3,c4,f4]]
  [[c3,g3,c4]@2 [c3,g3,c4] [g2,d3,g3,b3]@4 [g2,d3,g3,b3]]
  [[a2,e3,a3,c4]@4 [a2,e3,a3,c4]@2 [f2,c3,f3]@5 [c3,g3,c4] [f3,c4,f4]@2 [f3,c4,f4]@2]
  ~@24
>`).s("gm_acoustic_guitar_nylon").gain(0.39)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@11 A B@3 C B@3 D ~@5 A B@3 C B@3 D ~@5 A ~@7 A ~@13 E B@3 C B@3 D B@3 C B@3 D ~@7 A
>`.pickRestart({
  A: "~@14 x!2", B: "~ x ~ x", C: "~@4 x ~@9 x!2", D: "~@4 x ~@4 x ~@2 x ~ x ~", E: "~@8 x!2 ~@2 x ~ x ~",
})).gain(0.45)

// drums · clap
const clap = s("cp").struct("<~@6 A@6 ~@8 A@6 ~@14 A@21 B ~@16 A@8>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!6 [x!8]!28 [x!4]!6 [x!8]!46>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@6 A@6 B@8 A@6 B@8 ~@6 A@22 B@16 A@8>".pickRestart({
  A: "~@3 x!2 ~@3", B: "x!4",
})).gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@6 [x!16]!28 ~@6 [x!16]!46>").gain(2.01)

stack(
  distortion_guitar, electric_guitar_clean, bass, pad_sweep, harmonica, acoustic_guitar_nylon, kick, snare, clap, hihat,
  open_hat, cabasa
)

More by Alanis Morissette