Strudelify

Get Back

Zebrahead

KeyD minorTempo250 bpm
0:00/0:00
// Get Back — Zebrahead
// 250 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "vocals" trombone (copy of ch 6 "vocals" alto sax)
// note: Full arrangement: all 219 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar.
setcpm(250/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 · "guitar"
const overdriven_guitar = note(`<
  A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C ~@8 A B A C A B A C A B A C A B A C
  ~@32 A B A C A B A C A B A C A B A C A B A C A B A C ~@40 A B A C A B A C A B A C A B A D ~@43
>`.pickRestart({
  A: "a2 ~ [a2,e3] ~ [e2,b2] ~ [e2,e3] ~", B: "[f2,c3] ~ [e2,b2] ~ [g2,g3] ~ [e2,e3] ~",
  C: "[f2,c3] ~ [e2,e3] ~ [f2,c3] ~ [e2,b2] ~", D: "[f2,c3] ~@7",
})).s("gm_overdriven_guitar").gain(0.8).pan(0.3)

// chords · overdriven guitar · "guitar"
const overdriven_guitar_2 = note(`<
  ~@7 A B@3 C B@3 C B@3 C B@3 C ~@8 D@6 E@2 F G F G F G F H B@3 C B@3 C B@3 C B@3 C I J K L I J K L I J K L I J K L I J
  K L I J K L I J K L I J K L B@3 C B@3 C D@6 E@2 D@6 E@2 F G F G F G F M I J K L I J K L I J K L I J K L I J K L I J K
  L I J K L I J K L ~@16 F G F G F G F M I J K L I J K L I J K L I J K L I J K L I J K L I J K L I J K L I J N
>`.pickRestart({
  A: "~@12 [a3,a4] ~ [a3,a4] ~", B: "[a3,a4] ~ [a3,a4] ~ a4@4 [a3,a4] ~ [a3,a4] ~ a4@4",
  C: "[a3,a4] ~ [a3,a4] ~ a4@4 ab4@4 a4@4", D: "[~@4 e3 ~ e3 ~ [e3,e4] ~@3 [e3,e4]@20]/2",
  E: "[~@4 e3 ~ e3 ~ [e3,e4] ~@3 e3@20, ~@3 e4@4 ~]/2", F: "[a2,e3,a3]@6 [bb2,f3,bb3]!2",
  G: "[bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3] [ab2,eb3,ab3]@3", H: "[bb2,f3,bb3] ~@3", I: "[g2,d3,g3]!3 [d3,a3,d4]",
  J: "[d3,a3,d4]!4", K: "[f2,c3,f3]!3 [bb2,f3,bb3]", L: "[bb2,f3,bb3]!3 [a2,e3,a3]", M: "[bb2,f3,bb3] ~ [bb2,f3,bb3] ~",
  N: "[f2,c3,f3] ~@3", // F5
})).s("gm_overdriven_guitar").gain(0.57).pan(0.7)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@16 A B A C A B A C A B A C A B A C A B A C A B A C D E D E D E D F A B A C A B A C A B A C A B A C G H I J G H I J G
  H I J G H I J G H I J G H I J G H I J G H I J A B A C A B A C A B A C A B A C A B A C A B A C D E D E D E D K G H I J
  G H I J G H I J G H I J G H I J G H I J G H I J G H I J A B A C A B A C A B A C A B A L D E D E D E D K G H I J G H I
  J G H I J G H I J G H I J G H I J G H I J G H I J G H M
>`.pickRestart({
  A: "a1 ~ e2 ~ b1 ~ e2 ~", B: "c2 ~ b1 ~ g2 ~ e2 ~", C: "c2 ~ e2 ~ c2 ~ b1 ~", D: "a1@6 bb1!2",
  E: "bb1@2 bb1@2 bb1 ab1@3", F: "bb1 ~@3", G: "g1!3 d2", H: "d2!4", I: "f1!3 bb1", J: "bb1!3 a1", K: "bb1 ~ bb1 ~",
  L: "c2 ~@7", M: "f1 ~@3",
})).s("gm_electric_bass_finger").gain(0.8)

// other · pad warm · "synth"
const pad_warm = note("<~@95 A@4 ~@120>".pickRestart({
  A: "[~@3 gb5@4 db5@9]/4",
})).s("gm_pad_warm").gain(0.38).pan(0.7)

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

// drums · snare
const snare = s("sd").struct("<~@16 A@7 B A@23 ~ A@55 B A@23 ~ A@39 B A@7 ~ A@7 ~ A@34 ~>".pickRestart({
  A: "~ x", B: "x!2 ~@2 x ~ x!2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A B C B A B C B A B C B A B C B A B C B A B C D ~@8 A B C B A B C B A B C B A B C ~@33 A B C B A B C B A B C B A
  B C D A B C B A B C D ~@40 A B C B A B C B A B C B A B C E ~@43
>`.pickRestart({
  A: "~@2 x ~ x ~ x!2", B: "x ~ x ~ x!3 ~", C: "x ~ x ~ x ~ x!2", D: "x!4", E: "x",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@16 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 B@7 A@2 ~@3 A ~@3 A ~@3 A ~@2 B@33 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 B@7 C
  B@32 A ~@3 A ~@3 A ~@3 A ~@3 B@7 C B@34 A
>`.pickRestart({
  A: "x", B: "x!4", C: "x!2",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct("<~@40 A ~@23 A ~@55 A ~@7 A ~@47 A ~@7 A ~@34>".pickRestart({
  A: "x",
})).gain(0.8)

stack(overdriven_guitar, overdriven_guitar_2, bass, pad_warm, kick, snare, hihat, open_hat, crash)

More by Zebrahead