Strudelify

Colour My World

Chicago

KeyF majorTempo80 bpm
0:00/0:00
// Colour My World — Chicago
// 80 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 5 "P5-Strings 2" string ensemble 2 (copy of ch 6 "P6-Strings 2" string ensemble 2)
// note: Full arrangement: all 59 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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.

// bass · acoustic bass · "P3-Boston"
const bass = note(`<
  ~ A@2 B@3 C@3 D@3 E@3 F@3 G@3 H@3 I@3 J K@2 L M@2 N@3 O@3 P@3 C@3 Q@3 R@3 F@3 S T@3 ~
>`.pickRestart({
  A: "[~@8 f2@11 ~ f2@6 c3@6]/2", B: "[a2@11 ~ a2@11 ~ bb2@11 ~ bb2@5 ~ f2@5 ~]/3",
  C: "[eb2@11 ~ eb2@11 ~ ab2@11 ~ ab2@6 eb2@6]/3", D: "[gb2@11 ~ gb2@11 ~ d2@11 ~ d2@11 ~]/3",
  E: "[g2@11 ~ g2@11 ~ eb2@11 ~ eb2@11 ~]/3", F: "[c2@11 ~ c2@11 ~ c2@11 ~ c2@6 e2@6]/3",
  G: "[f2@11 ~ bb1@6 c2@6 f2@11 ~ f2@11 ~]/3", H: "[a2@11 ~ a2@11 ~ bb2@11 ~ bb2@11 ~]/3",
  I: "[eb2@11 ~ eb2@11 ~ ab2@11 ~ ab2@11 ~]/3", J: "gb2@11 ~ gb2@4", K: "[~@2 db2@6 d2@11 ~ d2@11 ~]/2",
  L: "g2@11 ~ g2@4", M: "[~@2 d2@6 eb2@11 ~ eb2@5 ~ bb1@6]/2", N: "[c2@11 ~ c2@11 ~ c2@11 ~ c2@5 ~ e2@6]/3",
  O: "[f2@11 ~ bb1@6 c2@6 f2@11 ~ f2@6 c3@6]/3", P: "[a2@11 ~ a2@11 ~ bb2@11 ~ bb2@6 f2@6]/3",
  Q: "[gb2@11 ~ gb2@6 db2@6 d2@11 ~ d2@6 gb2@6]/3", R: "[g2@11 ~ g2@11 ~ eb2@11 ~ eb2@6 bb1@6]/3", S: "f2@11 ~ bb1@4",
  T: "[~@3 c2@6 ~@3 f2@26 ~@10]/3",
})).s("gm_acoustic_bass").gain(0.41).pan(0.6)

// chords · piano · "P1-Grand Piano"
const piano = note("<A@3 B@3 C@3 D@3 E@3 F@3 G@3 H@3 I@3 J@3 E@3 F@3 K@3 B@3 L@3 M@3 N@3 F@3 O@5>".pickRestart({
  A: "[~@5 a3 ~@5 a3 ~@5 a3 ~@2 c4 ~@2 a3, f3!2 [f2,f3] f2, ~ a3@4 ~@2 a3@4 ~@2 a3@4 ~ f3@3 ~@3, ~@2 c4@2 c4@2 ~@2 c4@2 c4@2 ~@2 c4@2 c4@2 ~ a3@2 ~ c4@2, ~ e4 ~ e4 ~ e4 ~ e4]/3", // F
  B: "[~@5 a3 ~@2 c4 ~@2 a3 ~@5 bb3 ~@2 d4 ~@2 bb3, [a2,e3]@2 a2@2 [bb2,f3]@2 [bb2,f3] [f2,f4], ~ a3@4 ~ e3@3 ~@6 f4@3 ~@6, ~@2 c4@2 c4@2 ~ a3@2 ~ c4@2 ~ bb3@4 ~@2 bb3@2 ~@3, ~@3 e4@3 ~@3 e4@3 ~@2 d4@2 d4@2 ~@4 d4@2]/3", // A5 Bb5 F
  C: "[~@5 bb3 ~@2 d4 ~@2 bb3 ~@5 c4 ~@2 eb4 ~@2 c4, [eb2,g3]@2 eb2@2 [ab2,ab3]@2 [ab2,ab3] [eb2,g4], ~ bb3@4 ~ g3@3 ~@6 g4@3 ~@6, ~@2 d4@2 d4@2 ~ bb3@2 ~ d4@2 ~ c4@4 ~@2 c4@2 ~@3, ~@3 f4@3 ~@3 f4@3 ~@2 eb4@2 eb4@2 ~@4 eb4@2]/3", // Eb Ab Eb
  D: "[~@5 bb3 ~@2 db4 ~@2 bb3 ~@5 a3 ~@5 a3, [gb2,gb3]@2 [gb2,gb3] [db2,f4] [d2,gb3]@2 [d2,gb3]@2, ~ bb3@4 ~@2 bb3@2 ~@4 a3@4 ~@2 a3@4 ~, ~ db4!2 ~@2 db4 ~ c4 c4 ~ c4!2, ~ f4 ~@3 e4 ~ e4]/3", // Gb Db D
  E: "[~@5 b3 ~@2 d4 ~@2 b3 ~@5 bb3 ~@2 db4 ~@2 bb3, [g2,g3]@2 [g2,g3] [d2,gb4] [eb2,g3]@2 eb2@2, ~ b3@4 ~@2 b3@2 ~@4 bb3@4 ~ g3@3 ~@3, ~@2 d4@2 d4@2 ~@4 d4@2 ~@2 db4@2 db4@2 ~ bb3@2 ~ db4@2, ~ gb4 ~@3 f4 ~ f4]/3", // G D Eb
  F: "[~@5 bb3 ~@5 bb3 ~@5 bb3 ~@2 c4 ~@2 bb3, [c2,g3]@2 [c2,g3]@2 [c2,g3]@2 [c2,g3] [e2,e4], ~ bb3@4 ~@2 bb3@4 ~@2 bb3@4 ~@2 bb3@2 ~@3, ~ c4!2 ~ c4!2 ~ c4 c4 ~@2 c4, ~ e4 ~ e4 ~ e4 ~@2]/3", // C5 E
  G: "[~@5 a3 f3 bb3 d4 ~@2 c4 ~@5 a3 ~@2 c4 ~@2 a3, [f2,f3]@2 bb1 [c2,g3] [f2,f3]@2 [f2,f3] [c3,e4], ~ a3@4 ~@5 bb3@2 ~ a3@4 ~@2 a3@2 ~@3, ~ c4!2 ~@4 c4 c4 ~@2 c4, ~ e4 ~@3 e4 ~@2]/3", // F C5 F C
  H: "[~@5 a3 ~@2 c4 ~@2 a3 ~@5 bb3 ~@2 d4 ~@2 bb3, [a2,e3] a2 [bb2,f3] bb2, ~ a3@4 ~ e3@3 ~@6 f4@3 ~@3 f4@3, ~@2 c4@2 c4@2 ~ a3@2 ~ c4@2 ~ bb3@4 ~ f3@3 ~@3, ~@3 e4@3 ~@3 e4@3 ~@2 d4@2 d4@2 ~ bb3@2 ~ d4@2]/3", // A5 Bb5
  I: "[~@5 bb3 ~@2 d4 ~@2 bb3 ~@5 c4 ~@2 eb4 ~@2 c4, [eb2,g3]@2 [eb2,g3] ~ [ab2,ab3]@2 [ab2,ab3] ~, ~ bb3@4 ~@2 bb3@2 ~@4 c4@4 ~@2 c4@2 ~@3, ~ d4!2 ~@2 d4 ~ eb4 eb4 ~@2 eb4, ~ f4 ~ f4 ~ g4 ~ g4]/3", // Eb Ab
  J: "[~@5 bb3 ~@2 db4 ~@2 bb3 ~@5 a3 ~@2 c4 ~@2 a3, [gb2,gb3]@2 [gb2,gb3] [db2,f4] [d2,gb3]@2 d2@2, ~ bb3@4 ~@2 bb3@2 ~@4 a3@4 ~ gb3@3 ~@3, ~@2 db4@2 db4@2 ~@4 db4@2 ~@2 c4@2 c4@2 ~ a3@2 ~ c4@2, ~ f4 ~@3 e4 ~ e4]/3", // Gb Db D
  K: "[~@5 a3 f3 bb3 d4 ~@2 c4 ~@5 a3 ~@2 c4 ~@2 a3, [f2,f3]@2 bb1 [c2,g3] [f2,f3]@2 f2@2, ~ a3@4 ~@5 bb3@2 ~ a3@4 ~ f3@3 ~@3, ~@2 c4@2 c4@2 ~@8 c4@2 c4@2 ~ a3@2 ~ c4@2, ~ e4 ~@3 e4 ~ e4]/3", // F C5 F
  L: "[~@5 bb3 ~@2 d4 ~@2 bb3 ~@5 c4 ~@2 eb4 ~@2 c4, [eb2,g3]@2 [eb2,g3] [bb2,f4] [ab2,ab3]@2 [ab2,ab3] [eb2,g4], ~ bb3@4 ~@2 bb3@2 ~@4 c4@4 ~@2 c4@2 ~@3, ~ d4!2 ~@2 d4 ~ eb4 eb4 ~@2 eb4, ~ f4 ~@3 g4 ~@2]/3", // Eb Bb5 Ab Eb
  M: "[~@5 bb3 ~@2 db4 ~@2 bb3 ~@5 a3 ~@2 c4 ~@2 a3, [gb2,gb3]@2 [gb2,gb3] [db2,f4] [d2,gb3]@2 [d2,gb3] [gb2,e4], ~ bb3@4 ~@2 bb3@2 ~@4 a3@4 ~@2 a3@2 ~@3, ~ db4!2 ~@2 db4 ~ c4 c4 ~@2 c4, ~ f4 ~@3 e4 ~@2]/3", // Gb Db D Gb7
  N: "[~@5 b3 ~@2 d4 ~@2 b3 ~@5 bb3 ~@2 db4 ~@2 bb3, [g2,g3]@2 [g2,g3] [d2,gb4] [eb2,g3]@2 [eb2,g3] [bb1,f4], ~ b3@4 ~@2 b3@2 ~@4 bb3@4 ~@2 bb3@2 ~@3, ~ d4!2 ~@2 d4 ~ db4 db4 ~@2 db4, ~ gb4 ~@3 f4 ~@2]/3", // G D Eb Bb5
  O: "[~@10 a3@2 f3@2 ~@2 d4@3 ~@6 c4@3 ~@16 [f3,e4,a4,c5]@9 ~ f2 [c3,f3] gb5@16 ~@8, [f2,f3]@12 bb1@6 ~ [c2,g3]@9 f2@25 ~@27, ~@2 a3@8 ~@4 bb3@4 ~@4 bb3@6 f3@10 e4@3 g4@12 ~@2 g4@17 ~@8, ~@4 c4@4 c4@4 ~@19 a3@22 ~@2 e4@8 ~@17, ~@6 e4@6 ~@22 c4@19 ~@2 [b4,d5]@15 ~@10]/5", // Fmaj7 F5 F C5 Bm
})).s("gm_piano").gain(0.21)

// chords · string ensemble 2 · "P6-Strings 2"
const string_ensemble_2 = note("<~@37 A@2 B@3 C@3 D@3 E@3 F@3 G@4 ~>".pickRestart({
  A: "[~ [f3,a3,c4,e4]@3]/2", B: "[[e3,a3,c4,e4] [f3,bb3,d4,f4]]/3",
  C: "[[g3,bb3,d4,f4] [g3,bb3,eb4] [ab3,c4,eb4,g4] [ab3,c4,eb4,g4]]/3", // Gm7 Eb Abmaj7
  D: "[[gb3,bb3,db4,f4]@2 [gb3,a3,e4,gb4] [gb3,a3,d4,gb4]]/3", E: "[[g3,b3,d4,gb4] [g3,bb3,eb4,f4]]/3",
  F: "[[g3,bb3,c4,e4]@24 [g3,bb3,c4,e4]@19 ~@5]/3", // C7
  G: "[[f3,a3,c4,e4]@12 [bb3,d4,f4]@7 [e3,g3,bb3,c4]@9 [c3,f3,a3,c4,e4]@32 ~@4]/4", // Fmaj7 Bb C7 Fmaj7
})).s("gm_string_ensemble_2").gain(0.08).pan(0.1)

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

// drums · rim
const rim = s("rim").struct(`<
  ~ A B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C ~@4
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~@3 x ~@4", D: "~ x ~@5 x",
})).gain(0.47).pan(0.4)

// drums · snare
const snare = s("sd").struct("<~ [~@3 x ~@4] ~@57>").gain(0.31).pan(0.4)

// drums · hihat
const hihat = s("hh").struct("<~ [~@4 x!4] [x!8]!53 [x ~@2 x ~@2 x ~@2 x ~@6] ~@3>").gain(0.23).pan(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@55 [~@3 x] ~@3>").gain(0.39).pan(0.4)

stack(bass, piano, string_ensemble_2, kick, rim, snare, hihat, open_hat)

More by Chicago