Strudelify

Stepping Out

Joe Jackson

KeyF♯ majorTempo160 bpm
0:00/0:00
// Stepping Out — Joe Jackson
// 160 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "Bass" named as a bass, played on electric bass finger (its acoustic guitar nylon patch is not one); ch 3 "Organ Fill" named as an organ, played on drawbar organ (its pad new age patch is not one)
// note: Full arrangement: all 147 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/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 · piano
const piano = note(`<
  A@2 B@2 C D E F A@2 B@2 C D E F A@2 B@2 C D E F G@2 H I J@2 K L M N O M N P A@2 B@2 C D E F G@2 H I J@2 K L M N O M N
  P A@2 B@2 C D E F G@2 H I J@2 K L M N O M N P A@2 B@2 C D E F G@2 H I J@2 K L M N O M N P A@2 B@2 C D E F A@2 B@2 C D
  E F A@2 B@2 C D E F A@2 B@2 C D E F A@2 B@2 C D E F ~@3
>`.pickRestart({
  A: "[[c#4,f4,a#4,c#5]@3 ~@9 g#4@2 a#4@2, ~@3 [c#4,f4]@12 ~, ~@3 a#4@11 ~@2]/2", // A#m C#
  B: "[[e4,g#4,b4,d#5]@3 [d#4,f#4,a#4,c#5]@12 ~]/2", C: "[a3,c#4,e4]@3 [b3,d#4,f#4]@3 [b3,e4,g#4]@2", D: "[b3,d#4,f#4]",
  E: "[d4,f#4,a4]@3 [e4,g#4,b4]@3 [e4,a4,c#5]@2", F: "[e4,g#4,b4]", G: "[[f#4,a#4,c#5]@6 [f#4,a#4,c#5] [e4,g#4,b4]]/2",
  H: "[f#4,a4,d5]@2 e5 f#5@3 d5@2", I: "[e4,g#4,b4] a4@2 g#4@3 b4@2", J: "[[f#4,a#4,c#5]@6 ~ [e4,g#4,b4]]/2",
  K: "[f#4,a4,d5] e5@2 f#5@3 d5@2", L: "[e4,g#4,b4]@2 a4 g#4@3 f#4@2", M: "[c#4,e4]@3 b4", N: "b4 a4@6 ~, [d4,f#4]",
  O: "[e4,g#4,b4]@4 b4 a4 g#4 f#4", P: "[d4,f#4,a4] [e4,g#4,b4]",
})).s("gm_piano").gain(0.4)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A B A B A B A B A B A B A B A B A B A B A B A B C D E F A B E F G E F G E H A B A B A B A B C D E F A B E F G E F G E
  H A B A B A B A B C D E F A B E F G E F G E H A B A B A B A B C D E F A B E F G E F G E H 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 I@3
>`.pickRestart({
  A: "f#1 f#2 f#1 f#2 b1 b2 c#2 c#3", B: "f#2 f#3 c#2 c#3 b1 b2 c#2 c#3", C: "f#2 f#3 f#2 f#3 f#2 f#3 f#2 f#3",
  D: "f#2 f#3 f#2 f#3 f#2 f#3 e2 e3", E: "d2 d3 d2 d3 d2 d3 d2 d3", F: "e2 e3 e2 e3 e2 e3 e2 e3",
  G: "c#2 c#3 c#2 c#3 c#2 c#3 c#2 c#3", H: "d2 d3 d2 d3 e2 e3 e2 e3", I: "[f#1!6 f#1@8 ~@2]/3",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · drawbar organ · "Organ Fill"
const drawbar_organ = note(`<
  ~@8 A@2 B@2 C D E F A@2 B@2 C D E F ~@14 A@2 B@2 C D E F ~@14 A@2 B@2 C D E F ~@14 A@2 B@2 C D E F ~@14 A@2 B@2 C D E
  F ~@8 A@2 B@2 C D E F A@2 B@2 C D E F A@2 B@2 C D E F G@3
>`.pickRestart({
  A: "[[c#4,f4,a#4,c#5]@3 ~@9 g#4@2 a#4@2, ~@3 [c#4,f4]@12 ~, ~@3 a#4@11 ~@2]/2", // A#m C#
  B: "[[e4,g#4,b4,d#5]@3 [d#4,f#4,a#4,c#5]@12 ~]/2", C: "[a3,c#4,e4]@3 [b3,d#4,f#4]@3 [b3,e4,g#4]@2", D: "[b3,d#4,f#4]",
  E: "[d4,f#4,a4]@3 [e4,g#4,b4]@3 [e4,a4,c#5]@2", F: "[e4,g#4,b4]",
  G: "[f#4@3 f#4@3 f#4@3 f#4@3 f#4@3 f#4@3 f#4@16 ~@14]/3",
})).s("gm_drawbar_organ").gain(0.3)

// chords · celesta · "Bell Highlights"
const celesta = note("<~@16 A@2 B@2 C D E F ~@120 G@3>".pickRestart({
  A: "[[c#5,f5,a#5,c#6]@3 ~@9 g#5@2 a#5@2, ~@3 [c#5,f5]@12 ~, ~@3 a#5@11 ~@2]/2", // A#m C#
  B: "[[e5,g#5,b5,d#6]@3 [d#5,f#5,a#5,c#6]@12 ~]/2", C: "[a4,c#5,e5]@3 [b4,d#5,f#5]@3 [b4,e5,g#5]@2", D: "[b4,d#5,f#5]",
  E: "[d5,f#5,a5]@3 [e5,g#5,b5]@3 [e5,a5,c#6]@2", F: "[e5,g#5,b5]",
  G: "[f#4@3 f#4@3 f#4@3 f#4@3 f#4@3 f#4@3 f#4@16 ~@14]/3",
})).s("gm_celesta").gain(0.4)

// other · synth strings 1 · "String Highlights"
const synth_strings_1 = note(`<
  ~@60 A@2 B@2 C D E F ~@36 A@2 B@2 C D E F ~@16 A@2 B@2 C D E F A@2 B@2 C D E F ~@3
>`.pickRestart({
  A: "[c#5@3 a#4@8 ~ g#4@2 a#4@2]/2", B: "[d#5@3 c#5@12 ~]/2", C: "e4@3 f#4@3 g#4@2", D: "f#4", E: "a4@3 b4@3 c#5@2",
  F: "b4",
})).s("gm_synth_strings_1").gain(0.4)

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

// drums · snare
const snare = s("sd").struct("<~@16 [~ x ~ x]!96 ~@16 [~ x ~ x]!16 ~@3>").gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@23 A ~@21 A ~@21 A ~@21 A ~@21 A ~@23 A ~@11>".pickRestart({
  A: "~@11 x!4 ~",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!144 ~@3>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@21 A ~@21 A ~@21 A ~@21 A ~@23 A ~@11>".pickRestart({
  A: "~@8 x!3 ~@5",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@144 [x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x] [x!3 ~@13] ~>").gain(0.4)

stack(piano, bass, drawbar_organ, celesta, synth_strings_1, kick, snare, low_tom, hihat, mid_tom, ride)

More by Joe Jackson