Strudelify
Chameleon cover art

1973 · Head Hunters

Chameleon

Herbie Hancock

KeyD minorTempo97 bpm
0:00/0:00
// Chameleon — Herbie Hancock
// 97 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 38 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(97/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, A@4 for four bars: edit a riff to change every repeat.

// chords · acoustic guitar nylon · "MIDI"
const acoustic_guitar_nylon = note("<~@8 A B C@2 D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC>".pickRestart({
  A: "c4 ~ b3 ~ c4 ~ b3 ~ c4 ~ b3 ~ c4 d4 ~ c4", B: "~@2 b3 ~ c4 ~ b3 ~ c4 ~ b3 ~ [g3,ab3] f3 g3 a3",
  C: "[f3 d3 ~ [c4,f4] ~ [a3,d4] ~ [g3,ab3,d4,e4]@2 f3 [g3,c4] [f3,g3,ab3,c4] [g3,c4] [f3,c4] d3 [ab3,c4]@2 [f3,g3,a3] [g3,b3] ~ [f3,a3] d3 ~@10]/2", // F5 D5 E7 C5 Fm C5 F5 Ab …
  D: "d3 [c4,f4] a3 d3 [c4,f4] a3 d3 [c4,f4] a3 d3 [c4,f4] a3 d3 [c4,f4] a3 [c4,f4]", // F5
  E: "g2 [b3,f4] g3 g2 [b3,f4] ~ g2 [b3,f4] ~ g2 [c4,d4,e4,f4] g2 [b3,e4,f4] g2 g3 ~", // Bdim Dm7 E
  F: "d3 ~ [c4,f4] a3 d3 [f4,a4] c4 d3 [c4,f4] a3 d3 [f4,a4] c4 d3 [c4,f4] a3", // F5 F F5 F F5
  G: "g2 ~ [b3,f4] ~ g2 [b3,f4] ~ g2 [g3,bb3,db4,f4] [d4,f4] [g2,g3,b3] [g3,bb3,db4,d4,f4] b3 g2 ~ b3, ~@7 [g3,bb3,d4,f4]", // Bdim Gm7b5 Dm G Gm7
  H: "d3 ~ [f4,a4] c4 d3 [c4,f4] a3 d3 [f4,a4] c4 d3 [d4,f4] a3 d3 [c4,f4] a3", // F F5 F Dm F5
  I: "g2 ~@2 b3 g2 [g3,bb3,db4,d4,f4] d4 g2 [g3,bb3,db4,d4,f4] b3 g2 [g3,bb3,db4,d4,f4] b3 g2 [g3,bb3,d4,f4] b3, ~ [g3,bb3,d4,f4] ~@6", // Gm7
  J: "d3 ~ [c4,f4] a3 d3 [f4,a4] ~ d3 [a4,c5] f4 d3 [f4,a4] c4 d3 [c4,f4] a3", // F5 F Am F F5
  K: "g2 ~ [g3,bb3,db4,f4] [g3,b3,d4,f4] g2 [g3,bb3,db4,d4,f4] [b3,d4,f4] [g2,g3] [g3,bb3,db4,d4,f4] [g3,b3,d4] g2 [g3,bb3,db4,d4,f4] [b3,d4] g2 [g3,bb3,db4,d4,f4] ~", // Gm7b5 G7 Gm7 Bdim G Gm7 G Gm7 …
  L: "d3 ~ [f3,a3,c4,d4] ~ d3 [f3,a3,c4,d4] d3 ~ [f3,a3,c4,d4] ~ d3 [f3,a3,b3,c4,d4] ~ d3 [a3,c4,d4,e4,f4] a3", // Dm7
  M: "g2 ~ [f3,b3,d4] ~ g2 [g3,b3,d4,f4] ~ g2 [f3,b3,d4] ~ g2 [g3,b3,d4,f4] ~ g2 [f3,b3,d4] f3", // Bdim G7 Bdim G7 Bdim
  N: "d3 ~ [a3,d4] f3 d3 [c4,f4] a3 d3 [a3,d4] f3 d3 [c4,f4,g4] a3 d3 [a3,d4] f3", // D5 F5 D5 Csus4 D5
  O: "g2 ~ [f3,bb3,d4] b3 g2 [f3,bb3,d4] b3 g2 [f3,bb3,d4] [a3,b3] [g2,f3] [f3,bb3,d4] d4 [g2,f3,a3,b3] [f3,bb3,d4] [b3,c4]", // Bb Asus2 G7 Bb G7 Bb Cmaj7
  P: "[d3,f3,a3] ~ [f3,a3,d4] ~ d3 [a3,c4,f4] ~ d3 [f3,a3,d4] ~ d3 [c4,f4] a3 d3 [a3,d4] f3", // Dm F Dm F5 D5
  Q: "g2 ~ [f3,b3,d4] ~ g2 [g3,b3,d4,f4] ~ g2 [f3,b3,d4] ~ g2 [g3,b3,d4,f4] ~ g2 [f3,b3,d4] ~", // Bdim G7 Bdim G7 Bdim
  R: "d3 ~ [f3,a3,c4,d4] ~ d3 [a3,c4,d4,f4] ~ d3 [f3,a3,c4,d4]!2 d3 [a3,c4,d4,f4] ~ d3 [f3,a3,c4,d4] f3", // Dm7
  S: "g2 ~ [f3,b3,d4] ~ g2 [g3,b3,d4,f4] ~ g2 [f3,b3,d4] ~ g2 [f3,g3,b3,d4,f4] ~@2 [f3,bb3,d4,e4] b3, ~@13 g2@2 ~", // Bdim G7 Bdim G7 Bb
  T: "d3 ~ [f3,a3,d4] d3 ~ d3 [f3,a3,d4] d3 ~ d3 [a3,c4,f4] d3 ~ d3 [f3,a3,d4] g2", // Dm F Dm
  U: "g2 ~ [f3,bb3,d4] b3 g2 [f3,bb3,d4] b3 g2 [g3,bb3,db4,d4,f4] b3 g2 [g3,bb3,db4,d4,f4] [b3,d4] g2 [g3,bb3,d4,f4] [g3,b3]", // Bb Gm7 Bm Gm7 G
  V: "d3 ~ [f3,a3,c4,d4] ~ d3 [a3,c4,d4,f4] ~ d3 [f3,a3,c4,d4] ~ d3 [a3,c4,d4,f4] ~ d3 [f3,a3,c4,d4]!2", // Dm7
  W: "[f2,g2] ~ [f3,a3,b3,d4] ~ g2 [f3,a3,b3,d4] ~ g2 [f3,g3,b3,d4]@6 g2@2", // Fsus2 Bm7b5 G7
  X: "[d3,f3,a3,b3,c4,d4] ~@2 [d3,a3,c4,d4,f4] ~@2 [d3,c4,d4,f4,a4] ~@3 [d3,f3,a3,c4,d4] ~@2 [d3,a3,c4,d4,f4] ~@2", // Dm7
  Y: "[g2,f3,bb3,d4] ~@2 [g2,f3,bb3,b3,d4] ~@2 [g2,f3,d4]@3 [f3,a3,b3] g2 ~ [b3,d4] f3 g2 [f3,a3,c4,d4], ~@6 [bb3,b3] ~@9", // Gm7 G7 Bm7b5 Bm Dm7 Bmaj7
  Z: "d3 ~ [c4,f4] a3 d3 [a3,c4] f3 d3 [c4,f4] a3 d3 [f4,a4] c4 d3 [c4,f4] a3", // F5 Am F5 F F5
  AA: "[f2,g2] ~ [b3,d4] f3 g2 [b3,d4,f4] g3 g2 [b3,d4] f3 g2 [b3,d4,f4] g3 g2 [b3,d4] f3", // Fsus2 Bm Bdim Bm Bdim Bm
  AB: "~@2 [ab3,a3,ab4,a4] ~ [g3,g4]@2 ~@2 [g3,g4] ~ [f3,f4]@2 ~@2 [f3,f4] [g3,g4]", // Amaj7 G F G
  AC: "[f3,f4] [d3,d4] [c3,c4] [f3,f4] ~ [c3,c4] [d3,d4] ~@9", // F D C F C D
})).s("gm_acoustic_guitar_nylon").gain(0.48)

// other · lead 8 bass lead · "MIDI"
const lead_8_bass_lead = note("<~@20 A B@2 C D E F G A B@2 C D E F G H I>".pickRestart({
  A: "d4!2 ~@2 c4!2 ~@2 d4!2 ~@2 [d4,eb4,e4] ~@3, ~@3 f4", B: "[d4 ~@11 d4 c4 a3 c4@3 [db4,d4] ~@11 f4@2, ~@30 e4 ~]/2",
  C: "~@2 g4 ~@13", D: "~@2 [ab4,a4] ~ g4@3 ~ g4 ~ f4@3 ~ f4 g4, ~@10 g4 ~@5",
  E: "f4 d4 c4 d4@5 ~@2 [a3,c4,d4] ~ c4 a3 f4 d4", F: "~@7 f4", G: "~@2 [gb4,g4] ~@13",
  H: "~@2 [ab3,a3] ~ g3@3 ~ g3 ~ f3@3 ~ f3 g3", I: "f3 d3 c3 f3 ~ c3 d3 ~@9",
})).s("gm_lead_8_bass_lead").gain(0.31)

// bass · acoustic bass · "MIDI"
const bass = note("<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 A B C D E F>".pickRestart({
  A: "d1 ~@2 c2 ~@2 d2 ~@2 d2 e1@2 f1 ~ gb1 ~", B: "g1 ~@2 f2@2 ~ g2 ~@2 g2 b0@2 c1 ~ db1 ~",
  C: "d1 ~@2 c2 ~@2 d2 ~@3 e1@2 f1 ~ gb1 ~", D: "g1 ~@2 f2 ~@2 g2 ~@2 g2 b0@2 c1 ~ db1 ~",
  E: "~@2 a2 ~ g2@3 ~ g2 ~ f2@3 ~ f2 g2", F: "f2 d2 c2 f2 ~ c2 d2 ~@9",
})).s("gm_acoustic_bass").gain(0.55)

// bass · slap bass 2 · "MIDI"
const bass_2 = note("<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 A B C D E F>".pickRestart({
  A: "d2 ~@2 c3 ~@2 d3 ~@2 d3 e2@2 f2 ~ gb2 ~", B: "g2 ~@2 f3@2 ~ g3 ~@2 g3 b1@2 c2 ~ db2 ~",
  C: "d2 ~@2 c3 ~@2 d3 ~@3 e2@2 f2 ~ gb2 ~", D: "g2 ~@2 f3 ~@2 g3 ~@2 g3 b1@2 c2 ~ db2 ~",
  E: "~@2 a3 ~ g3@3 ~ g3 ~ f3@3 ~ f3 g3", F: "f3 d3 c3 f3 ~ c3 d3 ~@9",
})).s("gm_slap_bass_2").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@4 A@3 B@2 A@2 B A@3 B@2 A@2 B A@3 B@2 A@2 B A@3 B@2 A@2 B C D>".pickRestart({
  A: "x ~@8 x!2 ~@5", B: "x ~@8 x!2 ~@3 x ~", C: "x ~@6 x ~@5 x ~@2", D: "~ x!2 ~@3 x ~@9",
})).gain(0.75)

// drums · snare
const snare = s("sd").struct("<~@3 A B C B D B D@4 C B D B D@4 C B D B D@4 C B D B D@2 C E F>".pickRestart({
  A: "~@15 x", B: "x ~@2 x ~@8 x ~@3", C: "~@3 x ~@8 x ~@2 x", D: "~@3 x ~@8 x ~@3", E: "~@3 x ~@2 x ~",
  F: "x ~@2 x ~@12",
})).gain(0.75)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 [~@15 x] [~@2 x ~ x ~@3 x ~ x ~@3 x!2] ~>").gain(0.75)

// drums · open hat
const open_hat = s("oh").struct("<~@36 [x ~@2 x ~@2 x ~] [~@3 x ~@12]>").gain(0.75)

// drums · crash
const crash = s("cr").struct("<~@36 x [~@3 x ~@4]>").gain(0.75)

stack(acoustic_guitar_nylon, lead_8_bass_lead, bass, bass_2, kick, snare, hihat, mid_tom, open_hat, crash)

More by Herbie Hancock