Strudelify
Karma Chameleon cover art

1984 · Colour By Numbers

Karma Chameleon

Culture Club

KeyB♭ majorTempo183 bpm
0:00/0:00
// Karma Chameleon — Culture Club
// 183 bpm, 4/4, key Bb major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 186 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): muted gt., e-guitar.
setcpm(183/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 · "bass"
const bass = note(`<
  A B C ~ A B D@4 E@2 D@2 E@2 D F@6 G@4 H@8 I J@2 K L M N O I J@2 K L M N E@2 D@2 E@2 D F@6 G@4 H@8 I J@2 K L M N O I
  J@2 K L M N P Q R@2 Q@2 S T Q U V R W Q X Y E@2 D@2 E@2 D F@6 Z@5 AA AB AC AD AE AF O I J@2 K L M N O I J@2 K L M N
  ~@16 O I J@2 K L M N O I J@2 K L M N O I J@2 K L M N
>`.pickRestart({
  A: "f2@5 ~ f2@4 ~@2 f2@4", B: "~ eb2 ~ d2 eb2 d2 bb1 g1", C: "bb1@3 ~@13", D: "bb1@3 bb1@5",
  E: "[bb1@3 ~@5 f1@2 ~ f1@3 ~@2, ~@3 bb1@13]/2",
  F: "[bb1@6 ~@10 eb2@3 ~@3 eb2@2 ~@2 eb2 ~@5 eb2@3 ~@3 eb2@3 ~ eb2 ~@5 f2@4 ~@2 f2@2 ~@2 f2 ~ c2@2 ~@2 f2@3 ~@3 f2@2 ~@2 f2@2 c2@2 ~@2 eb2@3 ~@3 eb2@2 ~@2 eb2 ~ bb1@4, ~@3 bb1@11 bb1@8 bb1@24 ~@2]/6",
  G: "[eb2@3 ~@3 eb2@3 ~ eb2 ~@5 f2@4 ~@2 f2@2 ~@2 f2 ~ c2@2 ~@2 f2@3 ~@3 f2@2 ~@2 f2@2 c2@2 ~@2 eb2@3 ~@3 eb2@2 ~@2 eb2 ~ bb1@4, ~@3 bb1@12 ~]/4",
  H: "[eb2@3 ~@3 eb2@3 ~ eb2 ~@5 f2@4 ~@2 f2@2 ~@2 f2 ~ c2@2 ~@2 f2@3 ~@3 f2@2 ~@2 f2@2 c2@2 ~@2 c2@6 c3@9 ~ c2@5 ~ c3@2 ~@2 c3 ~ f2@2 ~@2 g2@16 f2@3 ~@13 bb2@5 ~ bb2@4 ~@2 bb2@3 ~, ~@3 bb1@29]/8",
  I: "f2@5 ~@2 f2@5 gb2@3 ~", J: "g2@5 ~ g2@6 d2@3 ~", K: "eb2@5 ~ eb2@6 bb2@4", L: "eb2@5 ~ eb2@6 bb2@3 ~",
  M: "f2@5 ~ f2@5 bb2@2 ~@3", N: "f2@5 ~ f2@4 g2@2 a2@3 ~", O: "bb2@5 ~ bb2@4 ~@2 bb2@3 ~",
  P: "eb2@4 ~@2 eb2@6 eb2 ~@3", Q: "eb2@2 ~ eb2@4 ~", R: "d2@4 ~@2 d2@7 ~@3", S: "g2@2 ~ g2@2 a2 g2 ~",
  T: "f2@4 ~@2 f2@9 ~", U: "eb2@3 ~@3 eb2@8 ~@2", V: "d2@2 ~ d2@4 ~", W: "eb2@4 ~@2 eb2@7 ~@3", X: "bb2@15 ~",
  Y: "f2@7 ~",
  Z: "[eb2@3 ~@3 eb2@3 ~ eb2 ~@5 f2@4 ~@2 f2@2 ~@2 f2 ~ c2@2 ~@2 f2@3 ~@3 f2@2 ~@2 f2@2 c2@2 ~@2 eb2@3 ~@3 eb2@2 ~@2 eb2 ~@5 eb2@3 ~@3 eb2@3 ~ eb2 ~ bb1@2 ~@2, ~@3 bb1@12 bb1@4 ~]/5",
  AA: "f2@4 ~@2 f2@2 ~@2 f2 ~ c2@2 ~@2", AB: "f2@3 ~@3 f2@2 ~@2 f2@2 c2@2 ~@2", AC: "c2@6 c3@9 ~",
  AD: "c2@5 ~ c3@2 ~@2 c3 ~ f2@2 ~@2", AE: "g2", AF: "f2@3 ~@13",
})).s("gm_acoustic_bass").gain(0.8).pan(0.3)

// chords · string ensemble 1 · "strings"
const string_ensemble_1 = note(`<
  ~@10 A B C@3 B D@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 G H A B I@4 J@2 A B I@4 J@2 A B C@3 B D@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 G
  H A B I@4 J@2 A B I@4 J@2 K@2 L@2 K@2 G B K@2 L@2 K@2 A B A B C@3 B D@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 G H A B I@4 J@2 A
  B I@4 J@2 A B I@4 J@2 A B I@4 J@2 A B I@4 J@2 A B I@4 J@2 A B I@4 J@2
>`.pickRestart({
  A: "[f3,bb3,d4]", B: "[f3,a3,c4]", C: "[f3,bb3,d4]/3", D: "[f3,bb3,d4]/2", E: "[eb3,g3,bb3]/2", F: "[f3,a3,c4]/2",
  G: "[g3,bb3,d4]", H: "[f3,a3,c4] ~@7", I: "[[g3,bb3,d4]@31 [eb3,g3,bb3]@33]/4", J: "[[f3,bb3,d4]@15 [f3,a3,c4]@17]/2",
  K: "[g3,bb3,eb4]/2", L: "[f3,a3,d4]/2",
})).s("gm_string_ensemble_1").gain(0.32).pan(0.2)

// other · harmonica
const harmonica = note(`<
  ~@5 A B C D E ~@26 F G ~@6 H I ~@30 F G ~@6 H I ~@20 J@4 K L M ~@19 N@2 ~@6 O@2 ~@22 F G ~@6 H I ~@6 F G ~@4
>`.pickRestart({
  A: "~@10 [f4,f5]@2 [g4,g5]@2 [f4,f5] ~", B: "[db5,c6] [d5,d6]@5 [c5,c6]@6 [bb4,bb5]@3 ~",
  C: "[f5,f6]@6 [eb5,eb6]@6 [d5,d6] ~@3", D: "[d5,d6] [bb4,bb5] ~ [bb4,bb5]@3 [g4,g5]@2", E: "[bb4,bb5]@3 ~",
  F: "~@5 f4 g4 bb4", G: "d5@3 ~ d5@3 ~ d5@2 c5@2 bb4@4, c5 ~@15", H: "~@5 f4 g4 bb4, bb4@7 ~",
  I: "d5@3 ~ d5@3 ~ d5@2 c5@2 bb4@2 ~@2, c5 ~@15", J: "[f4@15 ~]/4", K: "~@2 bb4 ~ d5@2 f5 ~",
  L: "f5@6 d5@5 ~ c5@2 ~@2", M: "d5@2 c5@2 bb4@11 ~", N: "[c5@7 ~ bb4@4 c5@10 ~@10]/2",
  O: "[~@8 f4@8 g4@8 bb4@3 ~@5, bb4@3 ~]/2",
})).s("gm_harmonica").gain(0.8)

// other · harmonica · soft notes
const harmonica_soft = note("<~@32 A B ~@38 A B ~@54 A B ~@56>".pickRestart({
  A: "[g5,bb5,d6]", B: "[f5,a5,c6] ~@7",
})).s("gm_harmonica").gain(0.48)

// other · electric guitar muted · "muted gt."
const electric_guitar_muted = note("<~@6 [~@3 g3 ~ g3 f3 ~] [bb2@3 ~@3 g3@2 ~@2 g3@2 f3@2 ~@2]!3 ~@176>")
  .s("gm_electric_guitar_muted").gain(0.56).pan(0.6)

// other · electric guitar clean · "clean gt."
const electric_guitar_clean = note(`<
  A B C ~ A B C ~@3 D E F G D E F G ~@6 H@2 ~@6 I J ~@3 K ~@3 L ~@3 K ~@3 L D E F G D E F G ~@6 H@2 ~@6 I J ~@3 K ~@3 L
  ~@3 K ~@3 L ~@16 D E F G D E F G ~@6 H@2 ~@6 I J ~@3 K ~@3 L ~@3 K ~@3 L ~@19 K ~@3 L ~@3 K ~@3 L ~@3 K ~@3 L
>`.pickRestart({
  A: "f3@5 ~ f3@4 ~@2 f3@4", B: "~ eb3 ~ d3 eb3 d3 bb2 g2", C: "bb2 ~@7", D: "bb2@3 ~@3 g3@2 ~@2 g3@2 f3@2 ~@2",
  E: "c3@2 ~ g3 ~ g3 f3 ~", F: "bb2@3 ~@3 g3@3 ~ g3@2 f3@2 ~@2", G: "bb3@3 ~@3 g3@3 ~ g3@2 f3@2 ~@2",
  H: "[~@12 a4@2 f4@5 ~@13]/2", I: "[g4,bb4,d5]@7 ~", J: "[f4,a4,c5]@3 ~@13", K: "f4@2 f5@2 c5@2 g4@3 ~@7",
  L: "f4@2 c5@2 f4@2 f5@4 c5@2 a4@2 f4 ~",
})).s("gm_electric_guitar_clean").gain(0.56).pan(0.4)

// chords · rock organ · "organ"
const rock_organ = note(`<
  ~@10 A B C@3 B D@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 G H A B I@4 J@2 A B I@4 J@2 A B C@3 B D@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 G
  H A B I@4 J@2 A B I@4 J@2 K@2 L@2 K@2 G B K@2 L@2 K@2 A B A B C@3 B D@2 E@2 F@2 E@2 F@2 E@2 F@2 E@2 G H A B I@4 J@2 A
  B I@4 J@2 M N O@4 P@2 M N O@4 P@2 A B I@4 J@2 A B I@4 J@2 A B I@4 J@2
>`.pickRestart({
  A: "[f5,bb5,d6]", B: "[f5,a5,c6]", C: "[f5,bb5,d6]/3", D: "[f5,bb5,d6]/2", E: "[eb5,g5,bb5]/2", F: "[f5,a5,c6]/2",
  G: "[g5,bb5,d6]", H: "[f5,a5,c6] ~@7", I: "[[g5,bb5,d6]@31 [eb5,g5,bb5]@33]/4", J: "[[f5,bb5,d6]@15 [f5,a5,c6]@17]/2",
  K: "[g5,bb5,eb6]/2", L: "[f5,a5,d6]/2", M: "[f4,bb4,d5]", N: "[f4,a4,c5]", O: "[[g4,bb4,d5]@31 [eb4,g4,bb4]@33]/4",
  P: "[[f4,bb4,d5]@15 [f4,a4,c5]@17]/2", // Bb F
})).s("gm_rock_organ").gain(0.32).pan(0.9)

// chords · harmonica
const harmonica_2 = note(`<
  ~@5 A B C D E ~@8 F@2 G@2 F@2 G@2 F@2 G@2 F@2 H I ~@2 J K ~@6 J K ~@12 F@2 G@2 F@2 G@2 F@2 G@2 F@2 H I ~@2 J K ~@6 J K
  ~@20 L@4 M N O ~ F@2 G@2 F@2 G@2 F@2 G@2 F@2 H I ~@2 P@2 ~@6 Q@2 ~@22 J K ~@6 J K ~@12
>`.pickRestart({
  A: "~@10 [f4,f5]@2 [g4,g5]@2 [f4,f5] ~", B: "[db5,c6] [d5,d6]@5 [c5,c6]@6 [bb4,bb5]@3 ~",
  C: "[f5,f6]@6 [eb5,eb6]@6 [d5,d6] ~@3", D: "[d5,d6] [bb4,bb5] ~ [bb4,bb5]@3 [g4,g5]@2", E: "[bb4,bb5]@3 ~",
  F: "~@4 [eb4,g4,bb4] ~ [eb4,g4,bb4] ~@5 [eb4,g4,bb4] ~@3", G: "~@4 [f4,a4,c5] ~ [f4,a4,c5] ~@5 [f4,a4,c5] ~@3",
  H: "[g4,bb4,d5]@7 ~", I: "[f4,a4,c5]@3 ~@13", J: "~@5 f4 g4 bb4", K: "d5@3 ~ d5@3 ~ d5@2 c5@2 bb4@4, c5 ~@15",
  L: "[f4@15 ~]/4", M: "~@2 bb4 ~ d5@2 f5 ~", N: "f5@6 d5@5 ~ c5@2 ~@2", O: "d5@2 c5@2 bb4@11 ~",
  P: "[c5@7 ~ bb4@4 c5@10 ~@10]/2", Q: "[~@8 f4@8 g4@8 bb4@3 ~@5, bb4@3 ~]/2",
})).s("gm_harmonica").gain(0.64).pan(0.3)

// other · synth drum · "syndrum"
const synth_drum = note("<~@2 A@2 ~@2 A@26 B C A@38 B C A@54 B C A@16 D@16 A@24>".pickRestart({
  A: "~@4 d2 ~@7 d2 ~@3", B: "d2!9 ~ d2 ~ d2 ~ d2 ~", C: "d2 ~@15", D: "~@8 d2 ~@7",
})).s("gm_synth_drum").gain(0.48).pan(0.6)

// chords · electric guitar clean · "acc. gt."
const electric_guitar_clean_2 = note(`<
  ~@10 A B A@3 B A@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 D E F G H@2 I@2 F G F G H@2 I@2 F G F G F@3 G F@2 I@2 G@2 I@2 G@2 I@2
  G@2 I@2 J K F G H@2 I@2 F G F G H@2 I@2 F G I@2 L@2 I@2 H G I@2 L@2 I M N@2 O@2 F@2 O@2 F@2 I P@3 I P@3 I P@3 I Q@3
  O@2 H@2 I@2 O@4 H@2 I@2 R@8 ~@10 O@2 H@2 I@2 O@4 H@2 I@2 O@4 H@2 I@2 F G
>`.pickRestart({
  A: "~@4 [f4,bb4,d5] ~ [f4,bb4,d5] ~@5 [f4,bb4,d5] ~@3", B: "~@4 [f4,a4,c5] ~ [f4,a4,c5] ~@5 [f4,a4,c5] ~@3",
  C: "~@4 [eb4,g4,bb4] ~ [eb4,g4,bb4] ~@5 [eb4,g4,bb4] ~@3", D: "[g3,bb3,d4]@7 ~", E: "[f3,a3,c4]@3 ~@13",
  F: "[bb3,d4,f4,bb4]@2 [bb3,d4,f4,bb4] [bb3,d4,f4,bb4]@2 [bb3,d4,f4,bb4]!3", // Bb
  G: "[f3,a3,c4,f4]@2 [f3,a3,c4,f4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4]!3", // F
  H: "[g3,bb3,d4,g4]@2 [g3,bb3,d4,g4] [g3,bb3,d4,g4]@2 [g3,bb3,d4,g4]!3", // Gm
  I: "[eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4] [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]!3", J: "[g4,bb4,d5]@7 ~",
  K: "[f4,a4,c5]@3 ~@13", L: "[d3,f3,a3,d4]@2 [d3,f3,a3,d4] [d3,f3,a3,d4]@2 [d3,f3,a3,d4]!3",
  M: "[eb3,g3,bb3,d4,eb4,f4,bb4]@2 [eb3,g3,bb3,d4,eb4,f4,bb4] [eb3,g3,bb3,d4,eb4,f4,bb4]@2 [eb3,g3,bb3,d4,eb4,f4,bb4]!3", // Ebmaj7
  N: "[[bb3,d4,f4,bb4]@2 [bb3,d4,f4,bb4] [bb3,d4,f4,bb4]@2 [bb3,d4,f4,bb4]!2 [d4,f4,bb4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4] [f3,a3,c4,f4,bb4,d5] [f3,a3,c4,f4], ~@7 bb3@9]/2", // Bb F Dm7 F
  O: "[[bb3,d4,f4,bb4]@2 [bb3,d4,f4,bb4] [bb3,d4,f4,bb4]@2 [bb3,d4,f4,bb4]!2 [d4,f4,bb4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4]!3, ~@7 bb3@9]/2", // Bb F
  P: "[[eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4] [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]!2 [eb3,g3,eb4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4]!3 [f3,a3,c4,f4]@2 [f3,a3,c4,f4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4]!3, ~@7 bb3@17]/3", // Eb F
  Q: "[[eb3,g3,bb3,eb4]@4 [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@4 [eb3,g3,bb3,eb4]@2 [eb3,g3,bb3,eb4]@2 [eb3,g3,eb4]@2 [g4,bb4,d5]@14 ~@2 [f4,a4,c5]@3 ~@13, ~@7 bb3@17]/3", // Eb Gm F
  R: "[[bb3,d4,f4,bb4]@2 [bb3,d4,f4,bb4] [bb3,d4,f4,bb4]@2 [bb3,d4,f4,bb4]!2 [d4,f4,bb4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4]!3 ~@48, ~@7 bb3@57]/8", // Bb F
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.9)

// other · rock organ · "organ 2"
const rock_organ_2 = note(`<
  ~@34 A B@3 C@2 D@2 A B@3 C@2 D@2 ~@24 A B@3 C@2 D@2 A B@3 C@2 D@2 ~@40 A B@3 C@2 D@2 A B@3 C@2 D@2 ~@16 A B@3 C@2 D@2
  A B@3 C@2 D@2 A B@3 C@2 D@2
>`.pickRestart({
  A: "bb4@7 ~", B: "[f4@15 g4@31 ~@2]/3", C: "[eb4@15 ~]/2", D: "[bb4@14 ~ f4@16 ~]/2",
})).s("gm_rock_organ").gain(0.64).pan(0.2)

// drums · kick
const kick = s("bd").struct("<A@2 B@2 A@2 B@27 C B@39 C B@55 C B@16 C@16 B@24>".pickRestart({
  A: "x!2", B: "x ~@2 x ~@4", C: "x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A@2 ~@2 A@26 B C A@38 B C A@54 B C A@16 D E D F D G D H D E D F D G D H A@24
>`.pickRestart({
  A: "~ x ~ x", B: "x!9 ~ x ~ x ~ x ~", C: "x", D: "x ~ x!3 ~ x!2", E: "x ~@3 x!12", F: "x ~ x!6", G: "x ~@3 x ~ x!10",
  H: "x!8",
})).gain(0.8)

// drums · clap
const clap = s("cp").struct("<~@146 [~ x]!16 ~@24>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@2 A@31 ~ A@39 ~ A@55 ~ A@16 ~@16 A@24>".pickRestart({
  A: "~ x ~ x",
})).gain(0.8)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@146 A B A C A D A E A B A C A D A E ~@24>".pickRestart({
  A: "x ~ x!3 ~ x!2", B: "x ~@3 x!12", C: "x ~ x!6", D: "x ~@3 x ~ x!10", E: "x!8",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@18 A@14 B C A@16 ~@8 A@14 B C A@32 ~@8 A@14 B C A@16 ~@16 A@24>".pickRestart({
  A: "x!2", B: "x!11 ~ x ~ x ~", C: "x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@2 A ~ A ~ A ~@26 A ~@16 A ~@22 A ~@16 A ~@38 A ~@16 A ~@15 A ~@15 A ~@7>".pickRestart({
  A: "x",
})).gain(0.72)

// drums · shaker
const shaker = s("sh").struct("<A@33 B A@39 B A@55 B A@16 ~@16 A@24>".pickRestart({
  A: "x!8", B: "x",
})).gain(0.4)

stack(
  bass, string_ensemble_1, harmonica, harmonica_soft, electric_guitar_muted, electric_guitar_clean, rock_organ,
  harmonica_2, synth_drum, electric_guitar_clean_2, rock_organ_2, kick, snare, clap, hihat, hihat_soft, open_hat, crash,
  shaker
)

More by Culture Club