Strudelify

Mickey

Toni Basil

KeyB majorTempo156 bpm
0:00/0:00
// Mickey — Toni Basil
// 156 bpm, 4/4, key B 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(156/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.

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@12 A B A@3 B C@2 D E F G D E H@2 I@2 ~@8 C@2 ~@6 C@2 D E F G D E H@2 I@2 ~@8 C@2 ~@6 C@2 D E F G D E H@2 I@2
>`.pickRestart({
  A: "b1 ~ b2 b1 ~ b1 b2 b1", B: "a1 ~ a2 a1 ~ a1 a2 a1", C: "b1!8", D: "e2@2 g#2 b2 a1@2 c#2 e2",
  E: "e2@2 g#2 b2 b1@2 d#2 f#2", F: "a1@2 c#2 e2 a1@2 c#2 e2", G: "b1@2 d#2 f#2 b1@2 d#2 f#2",
  H: "a1 ~ a1 ~ c#2 ~ e2 ~ a1 ~ a1 ~ c#2 ~ e2 ~", I: "b1 ~ b1 ~ d#2 ~ f#2 ~ b1 ~ b1 ~ d#2 ~ f#2 ~",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · accordion
const accordion = note(`<
  ~@18 A@2 B C D E B C F@2 G@2 ~@8 A@2 ~@6 A@2 B C D E B C F@2 G@2 ~@8 A@2 ~@6 A@2 B C D E B C F@2 G@2
>`.pickRestart({
  A: "[~@3 b4, b3, ~ d#4@3, ~ f#4]/2",
  B: "[b3,e4,b4]@4 [b3,e4,b4] ~ [b3,e4,b4] ~ [a3,e4,a4]@4 [a3,e4,a4] ~ [a3,e4,a4] ~", // E5 A5
  C: "[g#3,e4,g#4] ~ [g#3,e4,g#4] ~ [g#3,e4,g#4] ~ [f#3,d#4,f#4]@8 ~@2", D: "[a2,e3,a3] [a2,e3,c#4]",
  E: "e4@2 d#4 ~ d#4 ~@3 [b2,f#3]@8, [b2,f#3] ~, ~@3 d#4@5", F: "[~@3 a3, a2, ~ c#3@3, ~ e3]/2",
  G: "[~@3 b3, b2, ~ d#3@3, ~ f#3]/2",
})).s("gm_accordion").gain(0.32)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@30 A@8 ~@2 A@6 ~@12 A@8 ~@2 A@6 ~@12>".pickRestart({
  A: "x!7 ~",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@12 [x!8]!6 ~@2 [x!8]!10 ~@18 [x!8]!10 ~@18 [x!8]!10>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@24 A ~@4 B ~@22 A ~@4 B ~@22 A ~@4 B>".pickRestart({
  A: "x", B: "~@6 x!2",
})).gain(0.4)

stack(bass, accordion, kick, snare, low_tom, hihat, crash)