Strudelify

Yoo Hoo

Imperial Teen

KeyF majorTempo204 bpm
0:00/0:00
// Yoo Hoo — Imperial Teen
// 204 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 194 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, guitar.
setcpm(204/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · acoustic guitar steel · "guitar"
const acoustic_guitar_steel = note(`<
  ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "~@3 eb3",
})).s("gm_acoustic_guitar_steel").gain(0.57).pan(0.3)

// chords · electric guitar clean · "guitar"
const electric_guitar_clean = note(`<
  A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C D@2 E F D@2 E F D@2 E F D@2 E F A@2 B C A@2 B C A@2 B
  C A@2 B C D@2 E F D@2 E F D@2 E F D@2 E ~ A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C D@2 E F D@2
  E F D@2 E F D@2 E F A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C
  A@2 B C A@2 B C A@2 B C A@2 B C G ~
>`.pickRestart({
  A: "[f2,c3,f3]!4", B: "[f2,bb2,f3]!3 [f2,bb2,f3,bb3]",
  C: "[f2,bb2,f3,bb3] [f2,bb2,f3,b3] [f2,bb2,f3,bb3] [f2,bb2,f3,ab3]", D: "[c3,f3]!4", E: "[bb2,f3]!3 [bb2,f3,bb3]",
  F: "[bb2,f3,bb3] [bb2,f3,b3] [bb2,f3,bb3] [bb2,f3,ab3]", G: "[f2,c3,f3] ~@3",
})).s("gm_electric_guitar_clean").gain(0.57).pan(0.7)

// chords · electric guitar clean · "guitar" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A
  B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A ~@3 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A
  B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2
  A B ~@2 A B ~@2 A B ~@2 A B ~@2
>`.pickRestart({
  A: "~ bb3!2 ~", B: "~@4 c4 ~@11",
})).s("gm_electric_guitar_clean").gain(0.28).pan(0.7)

// chords · overdriven guitar · "guitar"
const overdriven_guitar = note(`<
  ~@12 A B C@2 ~@80 A B D E A B D F G H I J A B D@2 ~@32 A B D E A B D F A B D E A B D K G H I J A B D@2 G H I J A B D@2
  ~@15 L ~@2
>`.pickRestart({
  A: "~ b4", B: "bb4 ab4", C: "g4/2", D: "g4!4", E: "g4 ab4!2 c4", F: "g4 gb4!2 c4", G: "eb5 d5", H: "db5 ~", I: "b4!4",
  J: "b4 ~@2 c4", K: "g4 gb4!3", L: "~@3 [ab2,eb3]",
})).s("gm_overdriven_guitar").gain(0.57)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@7 A B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E
  B C D E B C D E B C D E B C D ~ B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D
  E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C D E B C
  D E B C D E B C D E F ~
>`.pickRestart({
  A: "~ bb1!2 ab1", B: "f1!4", C: "f1!2 ab1 f1", D: "bb1!4", E: "bb1!3 ab1", F: "f1 ~@3",
})).s("gm_electric_bass_finger").gain(0.8)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@14 A ~@99 A B ~@2 A B ~@4 C B ~@68>".pickRestart({
  A: "~@2 x!2", B: "x!2 ~@2", C: "~ x!3",
})).gain(0.32)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@15 A B A ~ A ~ A ~ A ~ A ~ A ~ A C@2 ~@14 C@2 B A ~ A ~ A ~ A ~ A ~ A ~ A C@2 ~@7 A ~@6 C ~ B A ~ A ~ A ~ A ~ A ~ A
  ~ A C@2 D E D E D E D E D E D E D E F A ~@15 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 B ~
>`.pickRestart({
  A: "~@3 x", B: "x", C: "~ x ~ x", D: "x!2", E: "x ~ x!2", F: "x ~@2 x",
})).gain(0.64)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@96 A B A B A B A B A B A B A B ~@84>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@71 A ~@37 A@3 ~@15 A ~@64 B ~>".pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.64)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@16 A ~@31 A ~@31 A ~@15 A ~@97>".pickRestart({
  A: "x",
})).gain(0.4)

// drums · shaker
const shaker = s("sh").struct("<[x!4]!79 x [x!4]!112 ~@2>").gain(0.48)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<[~ x ~ x ~ x ~ x]!79 ~ [~ x ~ x ~ x ~ x]!112 ~@2>").gain(0.24)

stack(
  acoustic_guitar_steel, electric_guitar_clean, electric_guitar_clean_2, overdriven_guitar, bass, kick, snare,
  snare_soft, hihat, open_hat, open_hat_soft, crash, crash_soft, shaker, shaker_soft
)