Strudelify

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 32-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: 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 ~@3 b3 ~@3 c4 ~@3 b3 ~@3 c4 ~@3 b3 ~@3 c4@2 d4 ~@4 c4",
  B: "~@4 b3 ~@3 c4 ~@3 b3 ~@3 c4 ~@3 b3 ~@3 [g3,ab3] ~ f3 ~ g3 ~ a3 ~", // Abmaj7
  C: "[f3 ~ d3 ~@3 [c4,f4] ~@3 [a3,d4] ~@3 ab3 [g3,d4]@3 f3 ~@2 [g3,ab3,c4] ~ [f3,g3,c4] ~ [g3,c4] [f3,c4] ~ d3 ~@2 c4@3 [g3,a3] f3 [g3,b3]@2 ~@2 [f3,a3] ~@2 d3 ~@20, ~@15 e4 ~@15 ab3 ~@32]/2", // F5 D5 G5 Abmaj7 Fsus2 C5 F5 Gsus2 …
  D: "d3 ~@2 [c4,f4] a3 ~@2 d3 c4 f4 a3 ~ d3 ~ [c4,f4] ~ a3 ~ d3 ~ c4 f4 ~ a3 ~ d3 [c4,f4] ~ a3 ~ [c4,f4] ~", // F5
  E: "g2@2 [b3,f4]@2 g3 ~ g2@2 [b3,f4] ~@3 g2 ~ [b3,f4] ~@5 [c4,e4,f4] d4 ~@3 e4 g2 ~ g3 ~@3, ~@19 g2@2 ~@2 g2@2 ~@7, ~@12 [b3,f4] ~@3", // Bdim Fmaj7 Bdim
  F: "d3 ~@3 [c4,f4] ~ a3 ~ d3 ~ [f4,a4]@2 c4 ~ d3 ~ [c4,f4] ~ a3 ~ d3 ~ [f4,a4] ~ c4 ~ d3 ~ [c4,f4] ~ a3 ~", // F5 F F5 F F5
  G: "g2@2 ~@2 [b3,f4] ~@3 g2@2 [b3,f4] ~@3 g2@2 [g3,bb3,db4,f4] ~@2 b3 g3 ~@2 [g3,db4] b3@2 g2@2 [g3,bb3,d4,f4]@2 b3 ~, ~@18 [d4,f4]@2 ~ g2@2 [d4,f4]@3 ~@6, ~@11 bb3 ~@4", // Bdim Gm7b5 Gdim Gm7 Dm
  H: "d3 ~@3 [f4,a4]@2 c4 ~ d3 ~@2 [c4,f4] a3 ~ d3 ~ [f4,a4] ~ c4 ~ d3 ~ [d4,f4]@2 a3 ~ d3 ~ [c4,f4]@2 a3 ~", // F F5 F Dm F5
  I: "g2@2 ~@2 [g3,bb3,d4,f4]@2 b3 ~@2 g2 ~@2 d4@2 g2 ~ [g3,bb3,db4,d4,f4]@2 b3 ~ g2 ~ [g3,bb3,d4,f4]@2 b3 ~ g2@2 [bb3,d4,f4]@2 b3 ~, ~@10 bb3@2 ~@10 db4 ~@9, ~@11 [g3,db4,d4,f4]@2 ~@15 g3 ~@3", // Gm7 Bb G7
  J: "d3 ~@3 [c4,f4]@2 a3 ~ d3 ~ [f4,a4] ~@3 d3 ~ [a4,c5]@2 f4 ~ d3 ~@3 c4 ~@2 d3 [c4,f4]@2 a3@2, ~@23 [f4,a4]@2 ~@7", // F5 F Am F5 F
  K: "g2@2 ~@2 [g3,bb3,db4,f4]@2 ~ g3 g2@2 [g3,bb3,db4,d4,f4]@2 ~ b3 [g2,g3]@2 [g3,db4,d4] ~@2 [g3,b3] g2@2 [g3,bb3]@2 [b3,d4]@2 g2@2 [g3,bb3,db4,d4,f4]@2 ~@2, ~@3 [b3,d4,f4] ~@2 [d4,f4] ~ [bb3,f4] d4 ~ f4@2 ~@3, ~@22 [db4,d4] ~@9", // Gm7b5 Gm7 G Gm Bm Gm7 Bdim Dm …
  L: "d3 ~@3 [f3,a3,c4,d4] ~@3 d3 ~ [f3,a3,c4,d4] ~@2 d3 ~@2 [f3,a3,c4,d4] ~@3 d3 ~ [f3,a3,b3,c4,d4] ~@3 d3 ~ [a3,c4,d4,e4,f4] ~ a3 ~", // Dm7
  M: "g2@2 ~@2 [f3,b3,d4] ~@3 g2 ~ [g3,b3,d4,f4] ~@3 g2 ~ [f3,b3,d4] ~@3 g2@2 [g3,b3] [d4,f4] ~@2 g2@2 [b3,d4] f3!2 ~", // Bdim G7 Bdim G Dm Bm
  N: "d3@2 ~@2 [a3,d4] ~@2 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@2 ~@2 [f3,bb3,d4]@2 b3 ~ g2 ~@3 b3 ~ g2@2 ~@2 b3 [f3,a3] g2@2 ~ [f3,bb3,d4]@2 [b3,d4] [f3,a3] ~@2 f3 ~ [a3,c4], ~@11 [f3,bb3,d4]@2 ~@4 [f3,bb3,d4]@2 ~@8 g2@2 ~ b3@2, ~@28 [bb3,d4]@3 ~", // Bb F Bb Bm F Am Bb
  P: "~ d3@2 ~ f3 [a3,d4] ~@3 d3 [c4,f4] a3 ~@2 d3 ~ [f3,a3,d4] ~@3 d3 ~ c4 f4 a3 ~@2 d3 [a3,d4] ~ f3 ~, f3 ~@15", // D5 F5 Dm D5
  Q: "g2@2 ~@2 [f3,b3,d4] ~@3 g2@2 [g3,b3,d4,f4] ~@3 g2@2 [f3,b3,d4] ~@3 g2@2 [g3,b3,d4,f4] ~@3 g2@2 [f3,b3,d4] ~@3", // Bdim G7 Bdim G7 Bdim
  R: "d3 ~@3 [f3,a3,c4,d4] ~@3 d3 ~ [a3,c4,d4,f4] ~@3 d3 ~ [f3,a3,c4,d4] ~ [f3,a3,c4,d4] ~ d3 ~@2 [a3,c4,d4,f4] ~@2 d3 ~ [f3,a3,c4,d4] ~ f3 ~", // Dm7
  S: "g2@2 ~@2 [f3,b3,d4] ~@4 g2 [g3,b3,d4] f4 ~@2 g2@2 b3 [f3,d4] ~@2 g2@2 [f3,g3,b3,d4,f4] ~@5 [bb3,d4]@2 b3 ~, ~@13 g2@2 ~, ~@28 [f3,e4] ~@3", // Bdim G Dm G7 Bb Fmaj7
  T: "d3@2 ~@2 [f3,a3,d4] ~ d3 ~@3 d3 ~@2 [f3,a3,d4] ~ d3 ~@3 d3 ~ [a3,c4,f4] ~ d3 ~@2 d3 ~ [f3,a3,d4] ~ g2@2", // Dm F Dm
  U: "g2@2 ~@2 [f3,bb3,d4]@3 b3 g2@2 [f3,bb3,d4]@2 ~ b3 g2@2 ~ [b3,d4]@2 ~ g2@2 [g3,bb3,f4]@2 [b3,d4]@2 g2@2 [d4,f4]@2 ~ g3, ~@16 [g3,bb3,db4,f4]@3 ~@3 [db4,d4] ~@5 [g3,bb3] ~ b3@2", // Bb Bm Gm7 Bm Dm Gm7b5 Dmaj7 Gm
  V: "d3@2 ~@2 [f3,a3,c4,d4] ~@3 d3 ~ [a3,c4,d4,f4] ~@3 d3 ~ [f3,a3,c4,d4] ~@3 d3 ~ [a3,c4,d4,f4] ~@3 d3 ~ [f3,a3,c4] d4 [f3,a3,c4,d4] ~", // Dm7 F Dm7
  W: "~ [f2,g2] ~@2 [b3,d4] [f3,a3] ~@2 g2@2 [f3,a3,b3] d4 ~@2 g2 ~@13 g2@4, ~@16 [f3,g3,b3,d4]@15 ~", // Fsus2 Bm F Bm7b5 G7
  X: "[d3,f3,a3,b3,c4,d4] ~@5 [d3,a3] [c4,d4,f4] ~@4 [d3,c4,d4,f4,a4] ~@7 [f3,a3,c4,d4] d3 ~@4 [d3,a3,c4,d4,f4] ~@5", // Dm7 D5 Dm7
  Y: "[g2,f3,bb3,d4] ~@5 [g2,f3,bb3,b3,d4] ~@5 bb3 b3@3 ~@2 [a3,b3] f3 g2@2 ~@2 [b3,d4]@2 f3@2 g2@2 [f3,a3,c4,d4] ~, ~@12 [g2,f3,d4]@5 ~@15", // Gm7 G7 Asus2 Bm Dm7 G7
  Z: "d3 ~@3 [c4,f4] ~ a3 ~ d3 ~ [a3,c4] ~ f3 ~ d3 ~ [c4,f4] ~ a3 ~ d3 ~ [f4,a4]@2 ~ c4 d3@2 [c4,f4] ~ a3 ~", // F5 Am F5 F F5
  AA: "[f2,g2]@2 ~@2 [b3,d4]@2 f3 ~ g2@2 ~ [b3,d4,f4] ~ g3 ~ g2 ~ [b3,d4]@2 f3 g2@2 [d4,f4] b3 g3 ~ g2@2 [b3,d4]@2 f3 ~", // Fsus2 Bm Bdim Bm Dm Bm
  AB: "~@4 [ab3,a3,ab4] a4 ~@2 [g3,g4]@5 ~@3 [g3,g4] ~@3 [f3,f4]@5 ~@3 [f3,f4] ~ [g3,g4] ~", // Amaj7 G F G
  AC: "[f3,f4]@2 [d3,d4] ~ [c3,c4] ~ [f3,f4]@2 ~@2 [c3,c4] ~@2 [d3,d4] ~@18", // 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@3 C D E@2 A B@3 C D E@2 F G>".pickRestart({
  A: "d4 ~ d4 ~@6 c4 ~ c4 ~@4 d4 ~ d4 ~@4 d4 [eb4,e4] f4@7", // Emaj7
  B: "[d4@2 ~@22 d4@2 c4@2 a3 ~ c4@5 ~ db4 d4@2 ~@21 e4 f4@6 ~ g4 ~@27]/3",
  C: "~@4 [ab4,a4] ~@3 g4@6 ~@2 g4 ~@3 f4@6 ~@2 f4@2 g4 ~, ~@20 g4 ~@11", // Amaj7
  D: "f4@2 d4@2 c4 ~ d4@10 ~@3 [c4,d4] a3 ~@3 c4@2 a3 ~ f4@2 d4@2", E: "[~@28 f4@7 ~ [gb4,g4] ~@27]/2",
  F: "~@4 a3@2 ~@2 g3@6 ~@2 g3@2 ~@2 f3@6 ~@2 f3 ~ g3 ~, ~@4 ab3 ~@27", G: "f3@2 d3 ~ c3 ~@2 f3 ~@3 c3 ~ d3 ~@18",
})).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 ~@4 c2@2 ~@4 d2@2 ~@4 d2 ~ e1@3 ~ f1@2 ~@2 gb1@2 ~@2",
  B: "g1@2 ~@4 f2@5 ~ g2@2 ~@4 g2@2 b0@4 c1@3 ~ db1@2 ~@2", C: "d1@2 ~@4 c2@2 ~@4 d2@2 ~@6 e1@3 ~ f1@3 ~ gb1@2 ~@2",
  D: "g1@2 ~@4 f2 ~@5 g2 ~@5 g2@2 b0@4 c1@3 ~ db1@2 ~@2", E: "~@4 a2 ~@3 g2@6 ~@2 g2 ~@3 f2@7 ~ f2 ~ g2 ~",
  F: "~ f2@2 d2@2 c2 ~ f2 ~@2 c2 ~@2 d2@2 ~@17",
})).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 ~@4 c3@2 ~@4 d3@2 ~@4 d3 ~ e2@3 ~ f2@2 ~@2 gb2@2 ~@2",
  B: "g2@2 ~@4 f3@5 ~ g3@2 ~@4 g3@2 b1@4 c2@3 ~ db2@2 ~@2", C: "d2@2 ~@4 c3@2 ~@4 d3@2 ~@6 e2@3 ~ f2@3 ~ gb2@2 ~@2",
  D: "g2@2 ~@4 f3 ~@5 g3 ~@5 g3@2 b1@4 c2@3 ~ db2@2 ~@2", E: "~@4 a3 ~@3 g3@6 ~@2 g3 ~@3 f3@7 ~ f3 ~ g3 ~",
  F: "~ f3@2 d3@2 c3 ~ f3 ~@2 c3 ~@2 d3@2 ~@17",
})).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@2 D B@4 C B@2 D B@4 C B@2 D B@4 C B@2 D B@2 E F G>".pickRestart({
  A: "~@30 x!2", B: "~@3 x ~@8 x ~@3", C: "~@6 x ~@17 x ~@5 x!2", D: "x ~@2 x ~@8 x ~@3", E: "~@6 x ~@17 x ~@6 x",
  F: "~@3 x ~@2 x ~", G: "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