Strudelify
KeyD minorTempo135 bpm
0:00/0:00
// Impossible — Captain Hollywood Project
// 135 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 142 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(135/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.

// other · piano
const piano = note("<~@43 A ~@15 A ~@15 A ~@15 A ~@31 A ~@15 A ~@2>".pickRestart({
  A: "~@3 g4@13",
})).s("gm_piano").gain(0.62).pan(0.3)

// bass · synth bass 2
const bass = note(`<
  ~@8 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 ~ A B A B A B A B A B A B A B A B C@8 A B A
  B A B A B A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B C@8 A B A B A B A B A B A B A B A B C@8 D E
>`.pickRestart({
  A: "d2@2 ~ d2@2 ~ d2 ~ d2@2 ~ d2@2 ~ d2@2", B: "bb1!2 ~ bb1@2 ~ bb1 ~ c2@2 ~ c2 ~ c2 bb1 ~",
  C: "[d2 d2@2 d2 d2@2 d2!3 d2@2 d2 d2@2 d2 ~ bb1!4 bb1@2 bb1!2 c2 c2@2 c2!3 [bb1,c2] bb1, ~@15 d2@2 ~@15]/2", // Bbsus2
  D: "c2 bb1!3 [bb1,c2] bb1!3 [bb1,c2] bb1 [bb1,c2] bb1!2 c2 bb1!2", E: "bb1 [bb1,c2] bb1!2 ~@12",
})).s("gm_synth_bass_2").gain(0.57)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  A B@7 A B@3 A B@3 ~@4 A B@7 ~@24 A B@7 ~@8 A B@7 ~@24 A B@7 A B@7 A B@6 C ~@8 A B@7 D E
>`.pickRestart({
  A: "d4 [d4,a4]!3 [d4,g4,a4] [d4,g4]!2 [d4,g4,a4] [d4,a4]!4 [d4,g4,a4] [d4,g4]!2 [d4,f4,g4]", // D5 Dsus4 G5 Dsus4 D5 Dsus4 G5 G7
  B: "[d4,f4] [d4,f4,a4] [d4,a4]!2 [d4,g4,a4] [d4,g4]!2 [d4,g4,a4] [d4,a4]!4 [d4,g4,a4] [d4,g4]!2 [d4,f4,g4]", // Dm D5 Dsus4 G5 Dsus4 D5 Dsus4 G5 …
  C: "f4!11 ~@5", D: "f4!16", E: "f4!4 ~@12",
})).s("gm_lead_2_sawtooth").gain(0.24).pan(0.4)

// chords · synth strings 1
const synth_strings_1 = note(`<
  A B A C A B A C A B A C A B A C D ~@99 A B A C A B A E A B A C A B A C A B A C A B A C ~@2
>`.pickRestart({
  A: "[f4,d5,f5,a5]", B: "[f4,d5,g5,bb5] [c4,c5,e5,g5]", C: "[f4,d5,g5,bb5] [e4,e5,g5,c6]", D: "[f4,d5,f5,a5] ~@15",
  E: "[f4,d5,g5,bb5] ~@15", // Gm7
})).s("gm_synth_strings_1").gain(0.22).pan(0.6)

// other · lead 2 sawtooth
const lead_2_sawtooth_2 = note(`<
  ~@8 A B A B A B A B A B A B A B A B A B A B A C A C A C A C A C A C A C A ~ 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 A C A C A C A C A C A C A ~ A B A B A B A B A B A B A B A B ~@8 A B A B A B A ~ A B A B A B
  A B ~@10
>`.pickRestart({
  A: "d2 d3 d2 d3 d2 d3 d2 d3", B: "bb1 bb2 bb1 bb2 c2 c3 c2 a2", C: "bb1 bb2 bb1 bb2 c2 c3 c2 c3",
})).s("gm_lead_2_sawtooth").gain(0.24)

// other · lead 2 sawtooth
const lead_2_sawtooth_3 = note(`<
  ~@12 A B A C A B A C A B A B A B A B ~@8 A B A C A B A ~ A B A C A B A C A B A C A B A C ~@8 A B A C A B A C ~@8 A B A
  C A B A ~ A B A C A B A C A B A C A B A C ~@8 A B A C A B A ~ A B A C A B A C ~@10
>`.pickRestart({
  A: "d3 d4 d3 d4 d3 d4 d3 d4", B: "bb2 bb3 bb2 bb3 c3 c4 c3 f4", C: "bb2 bb3 bb2 bb3 c3 c4 c3 c4",
})).s("gm_lead_2_sawtooth").gain(0.24).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@12 A@31 ~ A@16 ~@4 A@27 ~ A@15 ~@5 A@11 ~ A@12 ~@6>".pickRestart({
  A: "x!4",
})).gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@43 A ~@31 A ~@15 A ~@31 A ~@18>".pickRestart({
  A: "~@11 x!2 ~@3",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~@16 A@6 B A B A@18 ~ A@16 C D@7 A@23 ~ A@16 ~@8 A@7 E A@12 ~@6>".pickRestart({
  A: "x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@2", B: "~@2 x ~ x ~ x ~ x ~ x ~ x!2 ~@2", C: "x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~",
  D: "x!3 ~ x ~ x ~ x ~ x ~ x!3 ~", E: "x!10 ~@6",
})).gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct("<~@43 A ~@31 A ~@15 A ~@31 A ~@18>".pickRestart({
  A: "~@5 x ~@2 x ~@7",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct("<~@16 A@27 ~ A@47 ~ A@16 ~@8 A@7 ~ A@12 ~@6>".pickRestart({
  A: "~@7 x",
})).gain(0.4)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@60 [~@15 x]!8 ~@74>").gain(0.25)

// drums · high tom
const high_tom = s("ht").struct("<~@43 A ~@31 A ~@15 A ~@31 A ~@18>".pickRestart({
  A: "x!2 ~@6",
})).gain(0.5)

// drums · cowbell
const cowbell = s("cb").struct("<~@28 A@2 B C A@3 D A@2 B C A@3 ~@33 A@2 B C A@3 D A@2 B C A@3 ~@51>".pickRestart({
  A: "x!4 ~@2 x!3 ~ x ~ x ~ x!2", B: "x!4 ~ x!4 ~ x ~ x ~ x!2", C: "x!4 ~ x!4 ~ x!6", D: "x!4 ~@2 x!3 ~ x!6",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A ~@3 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15 A ~@7 A ~@15 A ~@7 A ~@7 A ~@7 A ~
>`.pickRestart({
  A: "x",
})).gain(0.4)

// drums · shaker
const shaker = s("sh").struct("<~@16 A@12 B@15 ~ A@16 ~@8 A@8 B@15 ~ A@16 ~@8 A@7 ~ A@12 ~@6>".pickRestart({
  A: "x!16", B: "~@2 x!2 ~@2 x!2 ~@2 x!3 ~ x ~",
})).gain(0.35)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@28
  [x!2 ~@2 x!2 ~@2 x!2 ~@3 x ~ x]!15
  ~@33
  [x!2 ~@2 x!2 ~@2 x!2 ~@3 x ~ x]!15
  ~@51
>`).gain(0.15)

stack(
  piano, bass, lead_2_sawtooth, synth_strings_1, lead_2_sawtooth_2, lead_2_sawtooth_3, kick, low_tom, hihat, mid_tom,
  open_hat, open_hat_soft, high_tom, cowbell, crash, shaker, shaker_soft
)

More by Captain Hollywood Project