Strudelify

Find Another Way (single mix)

Captain Hollywood Project

KeyC majorTempo158 bpm
0:00/0:00
// Find Another Way (single mix) — Captain Hollywood Project
// 158 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 156 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(158/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 B C D E B C D E B C D E B C D F ~@16 B C D E B C D F ~@40 B C D E B C D F ~@40 B C D E B C D F ~@8 B C D E B C D F
  ~@2
>`.pickRestart({
  A: "~@10 e5 d5 c5 ~ g4 ~", B: "[e4,g4,c5] ~@5 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~",
  C: "[g4,b4,d5] ~@5 [g4,b4,d5] ~@3 c5 b4 a4 ~ g4 ~", D: "[e4,a4,c5] ~@5 [e4,a4,c5] ~@3 [e4,a4,c5] ~@3 [e4,a4,c5] ~",
  E: "[f4,a4,c5] ~@5 [g4,b4,d5] ~@3 e5 d5 c5 ~ g4 ~", F: "[f4,a4,c5] ~@5 [g4,b4,d5] ~@9",
})).s("gm_piano").gain(0.72).pan(0.7)

// bass · synth bass 2
const bass = note(`<
  ~@18 A B A B A B A C A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B D E A B A B A B A F A B A B A B A G A
  B D E A B D E A B D E A B D E H I J K H I J K A B D E A B D E A B A B A B A F A B A B A B A G A B D E A B D E A B D E
  A B D L A B D E A B D E ~@10
>`.pickRestart({
  A: "c2 ~ c3 ~ c2 ~ c3 ~ c2 ~ c3 ~ c2 ~ c3 ~", B: "g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 ~", C: "g1 ~@15",
  D: "a1 ~ a2 ~ a1 ~ a2 ~ a1 ~ a2 ~ a1 ~ a2 ~", E: "f1 ~ f2 ~ f1 ~ f2 ~ g1 ~ g2 ~ g1 ~ g2 ~",
  F: "g1 ~ g1 ~@3 g1 ~@3 g1 ~@3 g1 ~", G: "g1 ~ g1 ~@13", H: "~ c2 ~ c2 ~ c2 ~ c2", I: "~ g1 ~ g1 ~ g1 ~ g1",
  J: "~ a1 ~ a1 ~ a1 ~ a1", K: "~ f1 ~ f1 ~ g1 ~ g1", L: "f1 ~ f2 ~ f1 ~ f2 ~ g1 ~ g1 ~@3 g1 ~",
})).s("gm_synth_bass_2").gain(0.48)

// chords · piano
const piano_2 = note("<~@2 A B C D A B C D A E C F A E C G ~@128 A E C F A E C G ~@2>".pickRestart({
  A: "[e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~", // C
  B: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~@5", // G
  C: "[e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~ [e4,a4,c5] ~", // Am
  D: "[f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~@5", // F G
  E: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // G
  F: "[f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // F G
  G: "[f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [g4,b4,d5] ~@9", // F G
})).s("gm_piano").gain(0.44).pan(0.6)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@2 A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@16 A B C D A
  B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D A B C D A E@6 F@7
>`.pickRestart({
  A: "[g3,c4,e4,g4,c5,e5]", B: "[g3,b3,d4,g4,b4,d5]", C: "[e3,a3,c4,e4,a4,c5]",
  D: "[f3,a3,c4,f4,a4,c5] [g3,b3,d4,g4,b4,d5]", // F G
  E: "[[g3,b3,d4,g4,b4,d5]@15 [e3,a3,c4,e4,a4,c5]@16 [f3,a3,c4,f4,a4,c5]@8 [g3,b3,d4,g4,b4,d5]@8 [g3,c4,e4,g4,c5,e5]@16 [g3,b3,d4,g4,b4,d5]@16 [e3,a3,c4,e4,a4,c5]@16 [f3,a3,c4,f4,a4,c5]]/6", // G Am F G C G Am F
  F: "[~@7 [g3,b3,d4,g4,b4,d5]@8 [g3,c4,e4,g4,c5,e5]@16 [g3,b3,d4,g4,b4,d5]@16 [e3,a3,c4,e4,a4,c5]@16 [f3,a3,c4,f4,a4,c5]@8 [g3,b3,d4,g4,b4,d5]@8 [c2,c3,g3,c4,e4,g4,c5,e5]@32 ~]/7", // G C G Am F G C
})).s("gm_synth_strings_1").gain(0.13)

// other · lead 1 square
const lead_1_square = note("<~@18 A B C D A B C E ~@40 A B C D A B C E ~@40 A B C D A B C E ~@34>".pickRestart({
  A: "[c3,c4]!2 [c3,c4]@2 ~@2 [c3,c4]@2 [c3,c4] ~ [c3,c4] ~ [c3,c4] ~ [c3,c4]@2", // C
  B: "[g2,g3]!2 [g2,g3]@2 ~@2 [g2,g3] ~ [g2,g3]!3 ~ [g2,g3]!3 ~", // G
  C: "[c3,c4]!3 ~@3 [c3,c4] ~ [c3,c4] ~ [c3,c4]@2 [c3,c4] ~ [c3,c4]@2", // C
  D: "[g2,g3]!3 ~@3 [g2,g3] ~ [g2,g3]!3 ~ [g2,g3]!3 ~", E: "[g2,g3]!3 ~@13",
})).s("gm_lead_1_square").gain(0.3).pan(0.3)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@22 A B A ~@25 A B C D A B C D ~@40 A B C D A B C D ~@50>".pickRestart({
  A: "c3!2 c3@2 c3!2 c3@2 c3!2 c3@2 c3!2 c3@2", B: "g2!2 g2@2 g2!2 g2@2 g2!2 g2@2 g2!2 g2@2",
  C: "a2!2 a2@2 a2!2 a2@2 a2!2 a2@2 a2!2 a2@2", D: "f2!2 f2@2 f2!2 f2@2 g2!2 g2@2 g2!2 g2@2",
})).s("gm_lead_2_sawtooth").gain(0.38).pan(0.9)

// other · overdriven guitar
const overdriven_guitar = note("<~@25 [g5@11 ~@5] ~@47 [g5@11 ~@5] ~@47 [g5@11 ~@5] ~@34>")
  .s("gm_overdriven_guitar").gain(0.28).pan(0.8)

// other · overdriven guitar
const overdriven_guitar_2 = note("<~@25 [~@4 g5@11 ~] ~@47 [~@4 g5@11 ~] ~@47 [~@4 g5@11 ~] ~@34>")
  .s("gm_overdriven_guitar").gain(0.24).pan(0.2)

// other · lead 2 sawtooth
const lead_2_sawtooth_2 = note(`<
  ~@42 A B C D A B C D A B C D A B C D ~@32 A B C D A B C D A B C D A B C D ~@32 A B C D A B C D ~@10
>`.pickRestart({
  A: "g4!2 c5@2 g4!2 c5@2 g4!2 c5@2 g4!2 c5@2", B: "d4!2 g4@2 d4!2 g4@2 d4!2 g4@2 d4!2 g4@2",
  C: "e4!2 a4@2 e4!2 a4@2 e4!2 a4@2 e4!2 a4@2", D: "c4!2 f4@2 c4!2 f4@2 d4!2 g4@2 d4!2 g4@2",
})).s("gm_lead_2_sawtooth").gain(0.24)

// other · baritone sax
const baritone_sax = note(`<
  ~@58 A B C D E F G H I J K L M N O P ~@32 Q R S T U V W X Y Z AA AB AC AD AE AF ~@34
>`.pickRestart({
  A: "c3@2 g2 ~ c3@2 g2 c3 ~ c3 g2 ~ c3@2 g2 ~", B: "c3 ~ c3 g2 c3@2 g2@2 ~@2 c3 ~ c3@2 g2@2",
  C: "g2@2 c3 ~ g2 ~ c3 ~ g2@2 c3 ~ g2@2 c3 ~", D: "c3@2 g2@2 c3@3 ~ e3@2 c3 ~ a2@2 c3@2",
  E: "a#2@3 ~ a#2@3 ~ a#2!4 c3@3 ~", F: "a#2@4 c3@3 ~ e3@2 a#2@2 c3@3 ~", G: "a#2 ~ a#2!2 c3@3 ~ a#2 ~ a#2 ~ c3@2 ~@2",
  H: "a#2 ~ a#2 ~ c3 ~ c3 ~ e3 a#2!2 ~ c3 ~ a#2!2", I: "c3@3 ~ c3@3 ~ a#2 ~ a#2@2 c3@4",
  J: "~@2 a#2!2 c3 ~ c3@2 a#2 ~ a#2 ~ c3@3 ~", K: "a#2@2 c3 ~ a#2@2 c3 ~ a#2!2 c3@2 e3@2 c3@2",
  L: "a#2@2 c3 ~ a#2@2 c3 ~ a#2@2 c3 ~ e3@2 c3@2", M: "a#2@2 c3@2 a#2@2 c3@2 e3@2 a#2@2 c3@3 ~",
  N: "a#2 ~ a#2 ~ a#2@2 c3@2 a#2@2 c3@2 a#2@2 a#2@2", O: "c3@5 ~ a#2 ~ c3@2 a#2@2 e3@2 a#2@2", P: "c3@3 ~@5",
  Q: "c3@2 g2 ~ e3@2 c3 ~ c3@2 g2 ~ e3@2 c3@2", R: "c3!2 g2@2 e3@2 c3@2 ~@2 g2@2 e3@2 c3@2",
  S: "a#2@2 c3 ~ c3@2 a#2 c3@3 a#2 ~ c3@2 a#2 ~", T: "c3@3 ~ c3@2 a#2 ~@3 a#2@2 c3@2 a#2 ~",
  U: "a#2 ~ a#2 ~ c3@3 ~ a#2 ~ a#2 ~ c3@2 a#2!2", V: "a#2 ~ a#2 ~ c3@3 ~@3 a#2 ~ a#2 ~ a#2 ~",
  W: "a#2@2 ~@2 a#2 ~ a#2 ~ a#2 ~ a#2 ~ c3@3 ~", X: "a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ c3@2 ~@2",
  Y: "~@2 a#2@2 c3 ~ c3@2 a#2!2 a#2@2 c3 ~ c3@2", Z: "a#2 ~ a#2 ~ c3@3 ~ a#2 ~ a#2@2 c3 ~ c3 ~",
  AA: "a#2 ~ a#2 ~ c3@4 ~@2 a#2 ~ c3@3 ~", AB: "a#2!2 a#2@2 c3 ~ c3 ~ e3@2 a#2 ~ c3@3 ~",
  AC: "a#2 ~ a#2 ~ c3 ~ c3 ~ a#2 a#2@2 ~ c3@3 ~", AD: "a#2!3 ~ c3 ~ c3 ~ e3@2 a#2 ~ c3@2 a#2 ~",
  AE: "c3@5 ~ a#2 ~ c3@2 a#2@2 e3@2 c3@2", AF: "g2@5 ~@11",
})).s("gm_baritone_sax").gain(0.75)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@22 A@3 B C D E F E G E H C D E F E G A@2 C D E F E G E H C D E F E G E B ~@16 C D E F E G E H C D E F E G E H ~@6
  A@2 C D E F E G E B ~@16 C D E F E G E H C D E F E G E H C D E F E G A@2 ~@10
>`.pickRestart({
  A: "x!16", B: "x", C: "~@4 x ~@3 x ~@3 x ~ x!2", D: "x ~@3 x ~@3 x ~@3 x ~ x!2", E: "x ~@3 x ~@3 x ~@3 x ~@2 x",
  F: "x ~@3 x ~@7 x ~ x!2", G: "x ~@3 x ~@7 x ~@2 x", H: "x!4",
})).gain(0.35)

// drums · clap
const clap = s("cp").struct(`<
  ~@18 A B A B A B A C 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 D A B A D A B A D A B A D A B A C A
  B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A D A B A D A B A D A B A D A B A C A B A B A B A B A B A B A B
  A B A B A B A B A B ~@10
>`.pickRestart({
  A: "x ~ x ~@3 x ~@3 x ~ x!2 ~ x", B: "x!2 ~ x ~ x ~ x", C: "x", D: "x ~ x ~@3 x ~@3 x!3 ~ x ~",
})).gain(0.5)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@18 A@7 B A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 B A@3 C A@3 B A@3 C A@3 B A@3 C A@3 C A@3 C A@3 C ~@8 A@3 C
  A@3 B A@3 C A@3 D A@3 C A@3 B A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C ~@10
>`.pickRestart({
  A: "x!4", B: "x", C: "x ~@3 x ~@3 x ~@3 x ~@2 x", D: "x!3 ~",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<A B ~@16 C@7 D C@31 D C@7 D C@7 D C@16 ~@8 C@7 D C@7 B C@7 D C@24 ~@10>".pickRestart({
  A: "x!2", B: "x!3 ~", C: "x!4", D: "x",
})).gain(0.05)

// drums · open hat
const open_hat = s("oh").struct("<~@18 A@7 ~ A@31 ~ A@7 ~ A@7 ~ A@16 ~@8 A@7 ~ A@7 B A@7 ~ A@24 ~@10>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@26 A@31 B ~@8 A@7 B A@31 B ~@8 A@7 B A@24 ~@10>".pickRestart({
  A: "x!16", B: "x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@10 A ~@7 A ~@6 A@2 ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@9
>`.pickRestart({
  A: "x",
})).gain(0.5)

// drums · shaker
const shaker = s("sh").struct("<~@18 [x!16]!7 ~@131>").gain(0.4)

stack(
  piano, bass, piano_2, synth_strings_1, lead_1_square, lead_2_sawtooth, overdriven_guitar, overdriven_guitar_2,
  lead_2_sawtooth_2, baritone_sax, kick, snare, clap, low_tom, hihat, open_hat, tambourine, crash, shaker
)

More by Captain Hollywood Project