Strudelify

Master Blaster

Stevie Wonder

KeyC minorTempo130 bpm
0:00/0:00
// Master Blaster — Wonder Stevie
// 130 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 154 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · synth bass 2 · "SYNTH BASS"
const bass = note(`<
  ~@6 A B C D E F A G H I J K L M N O H I J K L M N O H I J K L M N O H I J K L M N O P Q R S T U V W X Y X Z H I J K L
  M N O H I J K L M N O P Q R S T U V W P Q R S T U V W X Y X Z AA AB AC AD A B C D E F A G H I J K L M N O H I J K L M
  N O P Q R S T U V W P Q R S T U V W P Q R S T U V AE ~@8
>`.pickRestart({
  A: "c2@2 ~@2 c2 ~ c3@2 ~@2 c3 ~@13", B: "c2@2 ~@2 c2 ~ c3@2 ~@2 c3 ~ bb1@2 ~@2 bb1 ~ bb2@2 ~@2 bb2 ~",
  C: "ab1@2 ~@2 ab1 ~ ab2@2 ~@2 ab2 ~@13", D: "ab1@2 ~@2 ab1 ~ ab2@2 ~@2 ab2 ~ g1@2 ~@2 g1 ~ g2@2 ~@2 g2 ~",
  E: "f1@2 ~@2 f1 ~ f2@2 ~@2 f2 ~@13", F: "f1@2 ~@2 f1 ~ f2@2 ~@2 f2 ~ f1@2 ~@2 f1 ~ f2@2 ~@2 f2 ~",
  G: "bb1@2 ~@2 bb1 ~ bb2@2 ~@2 bb2 ~@13", H: "c3@4 c3 ~ g2@4 g2 ~ eb2@4 eb2 ~ c2@5 ~",
  I: "~@6 c3@4 g2 ~ bb2@4 bb2 ~ f2@4 bb2 ~", J: "ab2@4 ab2 ~ eb2@4 eb2 ~ c2@4 c2 ~ ab1@5 ~",
  K: "~@6 ab2@4 eb2 ~ g2@4 g2 ~ d2@4 g2 ~", L: "f3@4 f3 ~ c3@4 c3 ~ a2@4 a2 ~ f2@5 ~",
  M: "~@6 f3@4 eb3 ~ f3@4 eb3 ~ c3@4 bb2 ~", N: "c3@4 c3 ~ g2@4 g2 ~ c2@4 ~@8", O: "bb2@4 bb2 ~ f2@4 bb1 ~@13",
  P: "c3@4 c3 ~ g2@4 g2 ~ c3@5 ~@7", Q: "~@4 b2 ~ g2@4 g2 ~ b2@4 b2 ~ g2@4 bb2 ~",
  R: "f2@2 f2@2 ~@2 c3@4 f3 ~@9 eb2 ~ f2 ~", S: "g3@5 ~ f3@5 ~ eb3@4 eb3 ~ c3@4 bb2 ~",
  T: "c3@4 c3 ~ g2@4 c3 ~@5 c3 ~ g2@2 ~@4", U: "b2@4 b2 ~ g2@4 g2 ~ d3@4 d3 ~ g3@4 g3 ~",
  V: "g3@4 g3 ~ c3@4 f3 ~@9 eb3 ~ f3 ~", W: "g3@4 g3 ~ f3@4 f3 ~ eb3@4 eb3 ~ eb3 ~ c3 ~ bb2 ~",
  X: "c3@5 ~@3 bb2 ~ c3 ~ eb3@5 ~@3 c3 ~ eb3 ~", Y: "f3 ~ g3 ~ f3 ~ eb3 ~ c3 ~ bb2 ~ c3@5 ~@3 g2 ~ bb2 ~",
  Z: "f3 ~ g3 ~ f3 ~ eb3 ~ c3 ~ eb3 ~ f3 ~ g3 ~ f3 ~ eb3 ~ c3 ~ bb2 ~", AA: "bb2@5 ~@3 g2 ~ bb2 ~ c3@5 ~@3 bb2 ~ c3 ~",
  AB: "eb3 ~ c3 ~ bb2 ~ g2 ~ bb2 ~ c3 ~ eb3@5 ~@3 bb2 ~ c3 ~",
  AC: "eb3 ~ c3 ~ bb2 ~ c3 ~ bb2 ~ g2 ~ bb2 ~ g2 ~ f2 ~ g2 ~ f2 ~ eb2 ~",
  AD: "g2 ~ f2 ~ eb2 ~ f2 ~ eb2 ~ c2 ~ eb2 ~ c2 ~ bb1 ~ bb1@4 bb1 ~", AE: "g3@4 g3 ~ f3@4 f3 ~ eb3@4 eb3 ~ c3@5 ~",
})).s("gm_synth_bass_2").gain(0.8)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@6 A B C D E F A G H I J K L M N O H I J K L M N O H I J K L M N O H I J K L M N O H P Q ~ H P Q ~ R S R T H I J K L
  M N O H I J K L M N O H P Q ~ H P Q ~ H P Q ~ H P Q ~ R S R T U V W X A B C D E F A G H I J K L M N O H I J K L M N O
  H P Q ~ H P Q ~ H P Q ~ H P Q ~ H P Q ~ H P Q ~@9
>`.pickRestart({
  A: "c3@3 ~ c3 ~ c4@3 ~ c4 ~@13", B: "c3@3 ~ c3 ~ c4@3 ~ c4 ~ bb2@3 ~ bb2 ~ bb3@3 ~ bb3 ~",
  C: "ab2@3 ~ ab2 ~ ab3@3 ~ ab3 ~@13", D: "ab2@3 ~ ab2 ~ ab3@3 ~ ab3 ~ g2@3 ~ g2 ~ g3@3 ~ g3 ~",
  E: "f2@3 ~ f2 ~ f3@3 ~ f3 ~@13", F: "f2@3 ~ f2 ~ f3@3 ~ f3 ~ f2@3 ~ f2 ~ f3@3 ~ f3 ~",
  G: "bb2@3 ~ bb2 ~ bb3@3 ~ bb3 ~@13",
  H: "~@7 [eb4,c5]@2 ~ [eb4,g4,c5] ~@8 eb4@2 ~ [eb4,g4,c5] ~, ~@3 g4 ~@5 [g4,c5] ~@2", // Cm C5
  I: "~@7 eb4@2 ~ [eb4,g4,c5] ~@8 bb4@2 ~ [d4,f4,bb4] ~, ~@3 [g4,c5] ~@5 [d4,f4] ~@2", // Cm Bb C5 Dm
  J: "~@7 eb4@2 ~ [c4,eb4,ab4] ~@8 eb4@2 ~ [c4,eb4,ab4] ~, ~@3 [c4,ab4] ~@5 [c4,ab4] ~@2", // Ab Fm
  K: "~@7 eb4@2 ~ [c4,eb4,ab4] ~@8 d4@2 ~ [b3,d4,g4] ~, ~@3 [c4,ab4] ~@5 [b3,g4] ~@2", // Ab G Fm Em
  L: "~@7 c4@2 ~ [a3,c4,f4] ~@8 f4@2 ~ [a3,c4,f4] ~, ~@3 [a3,f4] ~@5 [a3,c4] ~@2", // F Dm Am
  M: "~@7 f4@2 ~ [a3,c4,f4] ~@8 f4@2 ~ [a3,c4,f4] ~, ~@3 [a3,c4] ~@5 [a3,c4] ~@2", // F Am
  N: "~@7 eb4@2 ~ [c4,eb4,g4] ~@8 eb4@2 ~ [c4,eb4,g4] ~, ~@3 [c4,g4] ~@5 [c4,g4] ~@2", // Cm C5
  O: "~@7 bb4@2 ~ [d4,f4,bb4] ~@8 bb4@2 ~ [d4,f4,bb4] ~, ~@3 [d4,f4] ~@5 [d4,f4] ~@2", // Bb Dm
  P: "~@7 d4@2 ~ [d4,g4,b4] ~@8 b4@2 ~ [d4,g4,b4] ~, ~@3 [g4,b4] ~@5 [d4,g4] ~@2", // G G5
  Q: "~@7 g4@2 ~ [eb4,g4,c5] ~@8 eb4@2 ~@3, ~@3 [eb4,c5] ~@5 [g4,c5] ~@2", R: "c4@3 ~ bb3 c4 eb4@3 ~ c4 eb4",
  S: "f4 g4 f4 eb4 c4 bb3 c4@3 ~ g3 bb3", T: "f4 g4 f4 eb4 c4 eb4 f4 g4 f4 eb4 c4 bb3",
  U: "bb4@3 ~ g4 bb4 c5@3 ~ bb4 c5", V: "eb5 c5 bb4 g4 bb4 c5 eb5@3 ~ bb4 c5",
  W: "eb5 c5 bb4 c5 bb4 g4 bb4 g4 f4 g4 f4 eb4", X: "g4@2 f4@2 eb4@2 f4@2 eb4@2 c4@2 eb4@2 c4@2 bb3@2 bb3@4 bb3 ~",
})).s("gm_electric_guitar_muted").gain(0.48).pan(0.3)

// chords · trumpet
const trumpet = note(`<
  ~@22 A B C D E ~ F G ~@36 A B C D E ~ F G H I J ~ H I J ~ H I J ~ H I J ~@25 A B C D E ~ F G H I J ~ H I J ~ H I J ~ H
  I J ~ H I J ~@13
>`.pickRestart({
  A: "~@10 c4 ~ g4@3 ~ c5 ~ eb5@4 ~@2", B: "~@22 d5 ~", C: "c5@3 ~ ab4 ~ eb4@4 ~@14", D: "~@22 f4 ~",
  E: "a4@3 ~ c5 ~ eb5@3 ~@15", F: "~@10 g5 ~ eb5@4 c5 ~ g4@3 ~@3", G: "~@4 f5@2 d5@3 ~ bb4 ~ f4@3 ~@9",
  H: "[eb5,g5]@23 ~", I: "[d5,f5]@23 ~", J: "[c5,eb5]@5 ~ [c5,eb5]@4 [c5,eb5] ~@13",
})).s("gm_trumpet").gain(0.48).pan(0.2)

// chords · trumpet · soft notes · Eb Dm Cm
const trumpet_soft = note("<~@142 [[eb5,g5]@23 ~] [[d5,f5]@23 ~] [[c5,eb5]@5 ~ [c5,eb5]@4 [c5,eb5] ~@13] ~@9>")
  .s("gm_trumpet").gain(0.24).pan(0.2)

// other · rock organ · "ELEC ORGAN"
const rock_organ = note(`<
  ~@14 A ~ B ~ C ~ A D A ~ B ~ C ~ A D A ~ B ~ C ~ A D A ~ B ~ C ~ A D E F G H E F G I J K J L A ~ B ~ C ~ A D A ~ B ~ C
  ~ A D E F G H E F G I E F G H E F G I J K J L M N O P ~@8 A ~ B ~ C ~ A D A ~ B ~ C ~ A D E F G H E F G I E F G H E F
  G I E F G H E F G Q ~@8
>`.pickRestart({
  A: "~@2 [g5,bb5] ~", B: "~@2 [eb5,ab5] ~", C: "~@2 [c5,f5] ~", D: "~@2 [d5,f5] ~", E: "[eb5,g5]", F: "[d5,f5]",
  G: "[c5,eb5]@9 ~ eb5 f5", H: "g5@4 g5 ~ g5@4 f5 ~ eb5@4 eb5 ~ g5@2 f5@2 g5@2",
  I: "g5@4 g5 ~ f5@4 f5 ~ eb5@4 eb5 ~ c5@4 bb4 ~", J: "c5@3 ~ bb4 c5 eb5@3 ~ c5 eb5",
  K: "f5 g5 f5 eb5 c5 bb4 c5@3 ~ g4 bb4", L: "f5 g5 f5 eb5 c5 eb5 f5 g5 f5 eb5 c5 bb4",
  M: "bb5@3 ~ g5 bb5 c6@3 ~ bb5 c6", N: "eb6 c6 bb5 g5 bb5 c6 eb6@3 ~ bb5 c6",
  O: "eb6 c6 bb5 c6 bb5 g5 bb5 g5 f5 g5 f5 eb5", P: "g5@2 f5@2 eb5@2 f5@2 eb5@2 c5@2 eb5@2 c5@2 bb4@2 bb4@4 bb4 ~",
  Q: "g5@4 g5 ~ f5@4 f5 ~ eb5@4 eb5 ~ c5@6",
})).s("gm_rock_organ").gain(0.36)

// drums · kick
const kick = s("bd").struct("<[~ x ~@2] [~ x!3] [x!4]!144 ~@8>").gain(0.6)

// drums · rim
const rim = s("rim").struct("<~@2 [~ x ~ x]!144 ~@8>").gain(0.6)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A C ~@8
>`.pickRestart({
  A: "x ~ x!2 ~@2 x ~ x!2 ~ x", B: "x ~ x!2 ~ x!3 ~@2 x!2", C: "x ~ x!2 ~ x!3 ~@2 x ~",
})).gain(0.6)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A B ~@3 C ~@7 C ~@7 D ~@7 C ~@7 C ~@7 C ~@3 E ~@3 F ~@11 G ~@7 H ~@3 I ~@3 I ~@3 E ~@3 J ~@7 K ~@7 J ~@7 I ~@7 I ~@7 I
  ~@7 K ~@16
>`.pickRestart({
  A: "~ x!2 ~@21", B: "~ x!2 ~@10 x!3 ~@2 x ~@5", C: "~@12 x ~@5 x ~@4 x", D: "x ~@5 x ~@5 x ~@5 x ~@4 x",
  E: "~@3 x ~ x!2 ~ x!4", F: "~@8 x ~@2 x", G: "x ~@2 x ~@2 x ~ x ~@3", H: "~@3 x ~@2 x ~ x ~@3",
  I: "~@3 x ~@2 x ~@2 x ~ x", J: "x ~@2 x ~@2 x ~@2 x ~ x", K: "~@3 x ~ x!2 ~ x!2 ~ x",
})).gain(0.6)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@2 B ~@4 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7
  A ~@7 A ~@15
>`.pickRestart({
  A: "x", B: "~@11 x",
})).gain(0.42)

stack(bass, electric_guitar_muted, trumpet, trumpet_soft, rock_organ, kick, rim, hihat, mid_tom, crash)

More by Stevie Wonder