Strudelify

I Won't Hold You Back

Toto

KeyC minorTempo108 bpm
0:00/0:00
// I Won't Hold You Back — Toto
// 108 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(108/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 B@2 C D E@2 F G@3 H I@4 J@4 K L@2 M G@3 H I@4 J@4 K L@2 N O P Q R O S@2 T O P U V W X G@3 Y Z@3 H J@4 AA AB@3 O P Q
  R O S@2 T O P U V W X
>`.pickRestart({
  A: "[g5,bb5] [d5,f5,bb5], [eb4,bb4]", // Gm Bb Eb5
  B: "[~ g4 bb4 c5 d5 eb5 bb5 [d5,bb5]@3 ~ d5 bb5@3 c5, [eb5,g5,bb5]@2 ~@3 bb4@3]/2", C: "~@3 bb4 g5@4, a5 ~",
  D: "[eb4,g4,bb4] [d4,f4,bb4]", E: "[[bb3,eb4,g4,bb4]@4 d4 eb4 bb4 [d4,bb4]@3 ~ d4 bb4@3 c4]/2", F: "a4",
  G: "[[eb4,g4,bb4]@2 bb4 bb4@3 bb4 [eb4,g4,bb4]@3 bb4 ~@3 d5 [d4,g4,bb4]@3 ~ d4 bb4@2 ~ c4, ~@3 [d4,f4]@4 ~@4 [eb4,g4,bb4,c5]@4 ~@9]/3", // Eb Gm Dm Cm7
  H: "a4@2 ~ bb3 g4@4",
  I: "[~@2 g4 bb4@3 bb4 [eb4,g4,bb4]@3 bb4 ~@3 d5 [d4,g4,bb4,d5]@3 eb5 [d4,g4,bb4,d5]@3 c5 [d4,g4,bb4]@4 bb3 g4@4, ~@3 [d4,f4]@4 ~@4 [eb4,g4,bb4,c5]@4 ~@17]/4", // Eb Gm Dm Cm7
  J: "[~@5 d5 eb5 [c4,d4,f4,bb4,d5]@3 d5 [c4,d4,f4,bb4,c5]@2 c5@2 [c4,eb4,ab4,bb4,c5]@6 d5 eb5 [c4,d4,f4,bb4,d5]@3 d5 [c4,d4,f4,bb4,c5]@4 bb4, [c4,eb4,ab4,bb4,c5]@3 ~@13]/4", // Bb Ab Bb Ab
  K: "[c4,eb4,ab4,c5]@2 bb4 [ab3,eb4,g4,bb4]@3 [ab3,eb4]@2", // Ab Eb Ab5
  L: "[[c4,f4,c5]@2 bb4 [c4,f4,bb4]@3 g4 g4@3 g4 c5 d5 g5 c6 d6, ~@7 [d4,c5]@4 ~@5]/2", M: "g6", N: "~@6 bb4 ~, g6",
  O: "[ab4,c5,eb5,ab5]@3 [g4,bb4,eb5,g5]@2 ~ [eb4,g4,bb4,eb5]@2", // Ab Eb
  P: "[eb4,ab4,c5,eb5]@3 [eb4,bb4,eb5,f5]@2 ~ [g4,bb4,c5,eb5,g5]@2", Q: "[f4,bb4,d5,f5]@12 ~@2 [eb4,eb5]!2",
  R: "[eb4,eb5]@2 [d4,d5]@2 [d4,d5]@2 [c4,c5]!2 [c4,c5]@2 [bb3,bb4]@2 [bb3,bb4]@2 bb4@2", // Eb D C Bb
  S: "[[eb4,ab4,c5,eb5]@3 [eb4,bb4,eb5,f5]@2 ~ [g4,bb4,c5,eb5,g5] [f4,bb4,d5,f5]@6 ~@3]/2", T: "~@7 bb4",
  U: "[f4,bb4,d5,f5]@2 bb3 c4", V: "[f3,bb3,d4]", W: "[g3,c4,d4]@4 ~ g3 c4 d4", X: "[g3,b3,d4]",
  Y: "a4@2 ~ bb3 g4@3 g4",
  Z: "[[eb4,g4,bb4]@2 bb4 bb4@3 bb4 [eb4,g4,bb4]@3 bb4 ~@3 d5 [d4,g4,bb4,d5]@3 ~ d4 bb4@2 ~ c4, ~@3 [d4,f4]@4 ~@4 [eb4,g4,bb4,c5]@4 ~@9]/3", // Eb Gm Dm Cm7
  AA: "[ab4,eb5,ab5]@2 g5 [eb4,g4,c5,eb5]@3 [ab3,eb4]@2", // Ab5 Cm Ab5
  AB: "[[f4,bb4,c5,f5]@2 [f4,bb4,c5,f5] [f4,bb4,c5,f5]@3 eb5 [g4,c5,d5,g5]@12 ~@4 c5]/3", // Fsus4 Gsus4
})).s("gm_piano").gain(0.41)

// other · lead 5 charang
const lead_5_charang = note("<~@16 A B A B C D E@2 ~@60>".pickRestart({
  A: "~ bb2 c3@4 ~@2, ab2 ~@3", B: "f2 c3 f3@4 ~@2", C: "~@3 bb2@4 ~, c3 ~", D: "bb2", E: "[c3@3 ~]/2",
})).s("gm_lead_5_charang").gain(0.26)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@4 A@3 ~@5 B C@2 ~@17 D@2 E@3 F G@8 ~@16 D@2 H@4 I ~@15>".pickRestart({
  A: "[bb5 bb5]/3", B: "bb5", C: "[bb5@3 ~]/2", D: "[~ bb4, ab4@3 ~]/2",
  E: "[ab4 ab4 [c4,ab4,eb5], bb4 ~, ~@2 [c5,d5]@3 ~]/3", F: "[d4,bb4,f5]@3 ~", G: "[e4,c5,g5]/8",
  H: "[ab4@4 ab4@4 [ab4,eb5]@4 [d4,bb4,f5]@3 ~, bb4@3 ~@5, ~ c5@3, ~@2 d5@3 ~@3]/4", I: "[e4,c5,g5]",
})).s("gm_string_ensemble_2").gain(0.36)

// chords · melodic tom · Am
const melodic_tom = note("<~@24 [[a2,c3,e3] ~@3]!60>").s("gm_melodic_tom").gain(0.41)

// chords · slap bass 1
const slap_bass_1 = note("<~@40 A B C D A E@2 F A B G H I J ~@16 A B C D A E@2 F A B G H I J>".pickRestart({
  A: "[ab4,c5,eb5,ab5]@3 [g4,bb4,eb5,g5]@2 ~ [eb4,g4,bb4,eb5]@2", // Ab Eb
  B: "[eb4,ab4,c5,eb5]@3 [eb4,bb4,eb5,f5]@2 ~ [g4,bb4,c5,eb5,g5]@2", C: "[f4,bb4,d5,f5]@12 ~@2 [eb4,eb5]!2",
  D: "[eb4,eb5]@2 [d4,d5]@2 [d4,d5]@2 [c4,c5]!2 [c4,c5]@2 [bb3,bb4]@2 [bb3,bb4]@2 bb4@2", // Eb D C Bb
  E: "[[eb4,ab4,c5,eb5]@3 [eb4,bb4,eb5,f5]@2 ~ [g4,bb4,c5,eb5,g5] [f4,bb4,d5,f5]@6 ~@3]/2", F: "~@7 bb4",
  G: "[f4,bb4,d5,f5]@2 bb3 c4", H: "[f3,bb3,d4]", I: "[g3,c4,d4]@4 ~ g3 c4 d4", J: "[g3,b3,d4]",
})).s("gm_slap_bass_1").gain(0.36)

// bass · slap bass 1
const bass = note("<~@40 A B C@2 A B D E A B F G H@2 ~@16 A B C@2 A B D E A B F G H@2>".pickRestart({
  A: "f2 ~@3 [f3,bb3,eb4]@2 f2 g2", B: "[ab1,ab2] ~@3 ab3@2 [ab1,ab2]@2", C: "[[bb1,bb2]@3 f2 [bb1,bb2]@12]/2",
  D: "[bb1,bb2]@3 f2 bb1@2 f2 g2", E: "[ab1,ab2]@3 [c2,c3]@3 [eb2,eb3]@2", F: "[bb1,bb2]@3 f2 bb1@4", G: "[ab1,ab2]",
  H: "[g2@3 ~]/2",
})).s("gm_slap_bass_1").gain(0.31)

// drums · clap
const clap = s("cp").struct("<~@11 [~@6 x!2] ~@11 [~@6 x!2] [~@2 x!2 ~@2 x!2]!60>").gain(0.2)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct("<~@24 [~ x]!60>").gain(0.45)

stack(piano, lead_5_charang, string_ensemble_2, melodic_tom, slap_bass_1, bass, clap, woodblocks)

More by Toto