Strudelify

I'm The Man

Joe Jackson

KeyE majorTempo170 bpm
0:00/0:00
// I'm The Man — Joe Jackson
// 170 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 149 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(170/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 B A B@3 C@2 ~@18 D@2 E F D@2 G H A B A B A B A I J K@3 ~@17 D@2 E F D@2 G H A B A B A B A I J L@4 M N O@2 M N
  O@2 P Q R@2 S T U@2 V W X@2 Y@2 Z AA AB AC X@2 Y@2 Z AA AB@2 D@2 E AD D@2 G H A B A B A B A AE A B A B A B A B AF@4 AG
>`.pickRestart({
  A: "[g#3,b3,e4]@2 [g#3,b3,e4]!2 [a3,c#4,e4]@2 [a3,c#4,e4]!2", // E A
  B: "[a3,d4,f#4]@2 [a3,d4,f#4]!2 [a3,c#4,e4]@2 [a3,c#4,e4]!2", C: "[g#3,b3,e4]/2",
  D: "[c#3,g#3]@2 [c#3,g#3]!2 [a2,e3]@2 [a2,e3]!2", E: "[e3,b3]!6 [e3,b3]@2", F: "[b2,f#3]", G: "[b2,f#3]!6 [b2,f#3]@2",
  H: "[d3,a3]!2 [d3,a3]@2 [a2,e3]@2 [a2,e3]@2", I: "~@15 b3", J: "c#4@3 b3@8 ~@5", K: "[e3,g#3,b3]/3",
  L: "[[e3,g#3,b3]@28 ~ [g#3,b3,e4]!3]/4", M: "[f#3,a3,d4]@2 [f#3,a3,d4] [e3,a3,c#4]@2 [e3,a3,c#4] [f#3,a3,d4]@2",
  N: "[f#3,a3,d4] [e3,a3,c#4]@2 [e3,a3,c#4] [f#3,a3,d4]@2 [e3,a3,c#4]@2", // D A D A
  O: "[f#3,a3,d4] [g#3,b3,e4]!2 [g#3,b3,e4]@2 [g#3,b3,e4] [g#3,b3,e4]@2", // D E
  P: "[a3,d4,f#4]@2 [a3,d4,f#4] [a3,c#4,e4]@2 [a3,c#4,e4] [a3,d4,f#4]@2", // D A D
  Q: "[a3,d4,f#4] [a3,c#4,e4]@2 [a3,c#4,e4] [a3,d4,f#4]@2 [a3,c#4,e4]@2", // D A D A
  R: "[a3,d4,f#4] [b3,e4,g#4]!2 [b3,e4,g#4]@2 [b3,e4,g#4] [b3,e4,g#4]@2", // D E
  S: "[a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4,f#4]@2", // D
  T: "[a3,d4,f#4] [a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4,f#4]@2 [a3,d4,f#4]@2", // D
  U: "[b3,e4,g#4]!2 [b3,e4,g#4]@2 [b3,e4,g#4]!2 [b3,e4,g#4]@2", // E
  V: "[b3,e4,g#4]@2 [b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4] [b3,e4,g#4]@2", W: "[b3,e4,g#4] [b3,e4,g#4]@2 [b3,e4,g#4]!5",
  X: "[e3,g#3,b3,e4]/2", Y: "[[e3,a3,c#4,e4] [e3,g#3,b3,e4]@3]/2", Z: "[d3,f#3,a3,d4] [e3,a3,c#4,e4]",
  AA: "[e3,g#3,b3,e4]", AB: "[d#3,f#3,b3,d#4]", AC: "[c#3,e3,a3,c#4]", AD: "[b2,d#3,f#3]", AE: "[d#3,f#3,b3]",
  AF: "[e3,g#3,b3,e4]/4", AG: "[e3,g#3,b3,e4] ~@7",
})).s("gm_overdriven_guitar").gain(0.32).pan(0.6)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A B A B A B C@2 D E F@4 G F H F I J F@2 G F H F I@2 K@2 F I K@2 I H A B A B A B A L@2 D E F@4 G F H F I J F@2 G F H F
  I@2 K@2 F I K@2 I H A B A B A B A L@2 F@14 D@2 M@2 N D@3 F@2 G F H F I J F@2 G F H F I@2 K@2 F I K@2 I H A B A B A B A
  O P Q P Q P Q P Q R@4 S
>`.pickRestart({
  A: "e2@2 e2!2 a2@2 a2!2", B: "d2@2 d2!2 a2@2 a2!2", C: "d3@2 d3!2 a2@2 a2!2", D: "e3!8",
  E: "e3@2 e3@2 e3@2 e3@2 e3@2 e3@2 e3@2 e3 b2", F: "e2!8", G: "a2!4 e2!4", H: "d2!4 a1!4", I: "b1!8", J: "a1!7 b1",
  K: "c#2!4 a1!4", L: "[b1!2 c#3 b2@2 ~@3, ~@8 b2 ~@23]/2", M: "d3 ~ c#3 ~ d3 ~ c#3 ~", N: "d3 e3!7",
  O: "b1!2 c#3 b2, ~@8 b2 ~@7", P: "e2!4 a2!4", Q: "d2!4 a2!4", R: "e2/4", S: "[e1,e2] ~@7",
})).s("gm_electric_bass_pick").gain(0.1).pan(0.4)

// chords · electric guitar muted · "Muted guitar"
const electric_guitar_muted = note(`<
  ~@8 A@6 B A C A D E A@2 B A C A D@2 ~@17 A@6 B A C A D E A@2 B A C A D@2 ~@84
>`.pickRestart({
  A: "[e2,b2]!8", B: "[e2,a2]!4 [e2,b2]!4", C: "[d2,a2]!4 [a2,e3]!4", D: "[f#2,b2]!8", E: "[e2,a2]!8",
})).s("gm_electric_guitar_muted").gain(0.14).pan(0.6)

// drums · kick
const kick = s("bd").struct("<[x!2]!43 ~@2 [x!2]!35 ~@2 [x!2]!62 x ~@3 x>").gain(0.29)

// drums · snare
const snare = s("sd").struct("<A@35 B A@7 ~ C A@35 ~ C A@21 D A@23 B A@16 E ~@3 E>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!3", C: "~@2 x!2", D: "~@4 x ~@7 x!4", E: "x",
})).gain(0.29)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!43 ~@2 [x!8]!35 ~@2 [x!8]!62 ~@5>").gain(0.29)

// drums · crash
const crash = s("cr").struct(`<
  A ~@35 A ~ A ~ A ~ A@2 ~ A ~@27 A ~ A ~ A ~ A ~@2 A ~@21 A ~@23 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.29)

stack(overdriven_guitar, bass, electric_guitar_muted, kick, snare, hihat, crash)

More by Joe Jackson