Strudelify

Chameleon

Bradley Herrin

KeyF majorTempo208 bpm
0:00/0:00
// Chameleon — Bradley Herrin
// 208 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/3887096; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 166 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(208/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 · clarinet · "Bass Clarinet"
const bass = note(`<
  A B@3 C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D G F C D E F C D G F C D E F C D G F
  C D E F C D G F C D E F C D E F C D E F C D E F H I J@4 ~ F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C
  D E F C D E F C D E F K L M@5 N O@2 P C D E F C D E F C D E F C D E F H I Q@4 R
>`.pickRestart({
  A: "bb2@2 bb2 ~@5 ab2@2 ab2 ~@5", B: "[bb2@2 bb2 ~@5 db3@28 g2@4 ab2@4 a2@4]/3", C: "bb2@2 ~ ab3 ~@2 bb3@2",
  D: "~ c3 db3 d3", E: "eb3@2 ~ bb3 ~@2 db4@2", F: "~ g2 ab2 a2", G: "eb3@2 ~ [bb2,bb3] ~@2 [db3,db4]@2",
  H: "~@2 f3 ~ eb3@4", I: "eb3 ~ db3@6", J: "[~@3 bb2@13]/4", K: "~@2 f2 ~ eb2@4", L: "eb2 ~ db2@6",
  M: "[~@12 bb2@32 ab2@28 ab2@2 ab2 ~@5]/5", N: "bb2", O: "[bb2@2 ~ bb2 ~@2 ab2@10]/2", P: "f2@2 ab2 a2",
  Q: "[bb2@3 ab2@3 gb2@20 g2@2 ab2@2 a2@2]/4", R: "bb2@2 ~ ab2 ~@2 bb2@2",
})).s("gm_electric_bass_finger").gain(0.4)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  A B@3 ~@32 A C D E@2 F@2 ~ A C D E@2 F@2 ~ G H I J@2 K@2 ~ G H I J@2 K@2 ~ L M N@3 F@2 ~ L M N@3 F@2 ~ L M O@4 ~@10 P
  ~@3 P ~@3 Q R S@3 T@2 U@2 V W X@2 Y Z@2 L M N@3 F@2 ~ L M AA@5 AB@3 AC ~@2 AD AE ~@2 AD AE AF ~ AD AE AF ~ AD AE L AG
  AH@4 AI
>`.pickRestart({
  A: "bb4@2 bb4 ~@5 ab4@2 ab4 ~@5", B: "[bb4@2 bb4 ~@5 db5@28 ~@12]/3", C: "bb4@2 bb4 ~@5 db5@8", D: "bb4 ~@7",
  E: "[~@4 bb4 ab4 f4 ab4@3 bb4 ~@5]/2", F: "[~@6 db5@4 eb5 ~@5]/2", G: "bb5@2 bb5 ~@5 ab5@2 ab5 ~@5",
  H: "bb5@2 bb5 ~@5 db6@8", I: "bb5 ~@7", J: "[~@4 bb5 ab5 f5 ab5@3 bb5 ~@5]/2", K: "[~@6 db6@4 eb6 ~@5]/2",
  L: "~@2 f5 ~ eb5@4", M: "eb5 ~ db5@4 db5 eb5", N: "[db5 ~ db5 bb4 ab4 ~ bb4@6 bb4 ab4 f4 ab4@3 bb4 ~@5]/3",
  O: "[db5 ~ db5 bb4 ab4 ~ bb4@26]/4", P: "bb4@2 ~@2 bb4@2 c5 ~@3 c5@2 bb4@2 ~@2", Q: "bb4@2 bb4 ~@9 ab4@2 ~@2",
  R: "bb4 ab4 bb4 db5@3 bb4 ab4",
  S: "[bb4@2 bb4 ~@5 bb4@2 db5@2 eb5@2 f5@6 bb4@4 db5@2 eb5@2 ~@2 db5@14 bb4@2 ab4@2]/3",
  T: "[bb4@2 ~@2 ab4 bb4 ab4 g4@5 g4 g4@3]/2", U: "[ab4 ~ g4 ~ f4 g4 ~ f4@9]/2", V: "f4 ab4 bb4 db5@3 bb4 ab4",
  W: "bb4 db5@5 bb4 ~", X: "[e5 eb5 db5 bb4 eb5 db5 ~ bb4@9]/2", Y: "ab4@2 ab4 ~@3 ab4@6 bb4@2 ab4@2",
  Z: "[g4@8 bb4@2 c5 ~@3 db5@4 bb4@2 c5@2 ~@2 bb4@8]/2",
  AA: "[db5@2 ~@2 db5@2 bb4@2 ab4@2 ~@2 bb4@32 bb4@28 bb4@2 bb4 ~@5]/5", AB: "bb4/3", AC: "~ f5@3",
  AD: "~@4 bb4 ~ c5 ~", AE: "db5@2 c5 ~@3 bb4@2 bb4@8", AF: "~@2 f5 ~", AG: "eb5 ~ db5@4 bb4 ab4",
  AH: "[bb4@3 db5@3 eb5@20 ~@6]/4", AI: "~@3 eb5 ~@2 f5@2",
})).s("gm_trumpet").gain(0.4)

// other · trombone · "Tenor Trombone"
const trombone = note(`<
  A B@3 ~@31 C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C G H I@4
  ~@18 J@3 K J@3 K J@3 K J@3 K D E F C D E F C G H L@5 M N@2 O P Q@3 P Q@3 P Q@3 P Q@3 G H R@4 S
>`.pickRestart({
  A: "bb3@2 bb3 ~@5 ab3@2 ab3 ~@5", B: "[bb3@2 bb3 ~@5 db4@28 ~@12]/3", C: "~ g2 ab2 a2", D: "bb2@2 ~ ab3 ~@2 bb3@2",
  E: "~ c3 db3 d3", F: "eb3@2 ~ bb3 ~@2 db4@2", G: "~@2 eb4 ~ db4@4", H: "db4 ~ b3@6", I: "[~@3 db4@13]/4",
  J: "[~@8 db4@2 db4 ~@3 db4@34]/3", K: "db4@6 db4 ~@9", L: "[~@12 c4@32 bb3@28 bb3@2 bb3 ~@5]/5", M: "c4",
  N: "[c4@2 ~ b3 ~@2 bb3@10]/2", O: "~ eb4@3", P: "f4!2 eb4 ~ f4 ~@3", Q: "[f4@2 ~ db4 ~@2 eb4@18]/3",
  R: "[bb3@3 db4@3 eb4@20 ~@6]/4", S: "~@3 c4 ~@2 db4@2",
})).s("gm_trombone").gain(0.4)

// other · piano
const piano = note(`<
  A B@3 C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F
  C D E F C D E F C D E F C D E F C D E F C D E F G H I@4 ~@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2 J@2 K@2
  J@2 K@2 C D E F C D E F G H L@5 M N@2 O P Q@2 R P Q@2 R P Q@2 R P Q@2 R G S T@4 U
>`.pickRestart({
  A: "[bb2,bb3,bb4,bb5]@2 [bb2,bb3,bb4,bb5] ~@5 [ab2,ab3,ab4,ab5]@2 [ab2,ab3,ab4,ab5] ~@5", // Bb Ab
  B: "[[bb2,bb3,bb4,bb5]@2 [bb2,bb3,bb4,bb5] ~@5 [db3,db4,db5,db6]@27 ~ [g2,g3]@4 [ab2,ab3]@4 [a2,a3]@4]/3", // Bb Db G Ab A
  C: "[bb1,bb2]@2 ~ [ab2,ab3] ~@2 [bb2,bb3]@2", D: "~ [c2,c3] [db2,db3] [d2,d3]",
  E: "[eb2,eb3]@2 ~ [bb2,bb3] ~@2 [db3,db4]@2", F: "~ [g2,g3] [ab2,ab3] [a2,a3]",
  G: "~@2 [f3,bb3,eb4,g4,c5,f5] ~ [eb3,ab3,db4,f4,bb4,eb5]@4", // Cm7 Bbm7
  H: "[eb3,ab3,db4,f4,bb4,eb5] ~ [db3,gb3,bb3,eb4,ab4,db5]@6", I: "[~@12 [bb2,ab3,db4,f4,bb4]@49 ~@3]/4",
  J: "[[bb2,ab3,db4,f4,bb4]@15 ~]/2", K: "[[eb3,g3,db4,f4,bb4]@15 ~]/2",
  L: "[~@12 [bb2,ab3,db4,f4,bb4]@31 ~ [ab2,eb3,gb3,bb3,db4,f4,bb4]@27 ~ [ab2,eb3,gb3,bb3,db4,f4,bb4]@2 [ab2,eb3,gb3,bb3,db4,f4,bb4] ~@5]/5", // Bbm7 Ebm7
  M: "[bb2,f3,ab3,c4,eb4,g4,bb4]@15 ~", // Cm7
  N: "[[bb2,f3,ab3,c4,eb4,g4,bb4]@4 ~@2 [a2,e3,g3,b3,d4,gb4,a4]@2 ~@4 [bb3,db4,ab4]@4 [bb3,db4,ab4]@15 ~, ~@12 [ab2,eb3,gb3,f4]@19 ~]/2", // Cm7 Em7 Bbm7 Ab7
  O: "~ [f3,a3,eb4,ab4,b4,f5]@3, f2", P: "[ab3,db4,f4]@6 ~@2 [bb4,bb5]@2 [bb4,bb5] ~@5, ~@3 [ab3,db4,f4]@5",
  Q: "[[ab3,db4,f4,bb4,bb5]@2 ~ [ab3,db4,f4,bb4,bb5] ~@2 [g3,db4,f4,bb4,bb5]@6 [g3,db4,f4,bb4,bb5] ~ [g3,db4,f4,c5,c6] ~]/2", // Bbm7 Gm7b5 Csus4
  R: "[db5,db6]@2 [c5,c6] ~@3 [g3,db4,f4,bb4,bb5]@10, [g3,db4,f4]@3 ~@5", // Db C Gm7b5
  S: "[eb3,ab3,db4,f4,bb4,eb5] ~ [db3,gb3,b3,eb4,ab4,db5]@6", // Bbm7 Abm7
  T: "[[bb2,bb3,db4,f4,bb4]@3 [ab2,ab3,db4,f4,bb4]@3 [gb2,e3,bb3,eb4,ab4]@19 ~ g2@2 ab2@2 a2@2]/4", // Bbm Bbm7 Ebm
  U: "bb2@2 ~ [ab2,ab3,ab4,ab5] ~@2 [bb2,bb3,bb4,bb5]@2", // Ab Bb
})).s("gm_piano").gain(0.4)

// bass · electric bass pick · "Bass Guitar"
const bass_2 = note(`<
  A B@3 C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F
  C D E F C D E F C D E F C D E F C D E F C D E F G H I@4 ~ F C D E F C D E F C D E F C D E F C D E F C D E F C D E F C
  D E F C D E F C D E F G H J@4 K L M@2 N C D E F C D E F C D E F C D E F G H O@4 C
>`.pickRestart({
  A: "bb2@2 bb2 ~@5 ab2@2 ab2 ~@5", B: "[bb2@2 bb2 ~@5 db3@28 g1@4 ab1@4 a1@4]/3", C: "bb1@2 ~ ab2 ~@2 bb2@2",
  D: "~ c2 db2 d2", E: "eb2@2 ~ bb2 ~@2 db3@2", F: "~ g1 ab1 a1", G: "~@2 f2 ~ eb2@4", H: "eb2 ~ db2@6",
  I: "[~@3 bb1@13]/4", J: "[~@6 bb1@16 ab1@5 eb2 ab2!2 ~@2]/4", K: "ab1@3 eb2 ab2!2 ~@2", L: "bb1@3 f2 bb2!2 ~@2",
  M: "[bb1@2 ~ a1 ~@2 ab1@5 eb2 ab2@2 ab1@2]/2", N: "f1@2 ab1 a1", O: "[bb1@3 ab1@3 gb1@20 g1@2 ab1@2 a1@2]/4",
})).s("gm_electric_bass_pick").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A B ~@9 C D E D E D E D E D E D E D E D E D E D E D E D C D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E
  D E D E D E D E D F D E D E D E D F G H I ~ J@2 K L D M D M D M D M D M D M D M D C D M D M D M D M D M D M D M D C D
  E D E D E D F G H I ~ N ~ N O P ~ C D Q D R D Q D R D Q D S D Q D S G H P ~@2 C P
>`.pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "x!2 ~@2 x ~@3", C: "~ x!3", D: "x ~@2 x ~@4", E: "~ x!2 ~@5", F: "~ x!2 ~ x ~ x ~",
  G: "x!3 ~", H: "x!2 ~@2", I: "x ~ x!2", J: "~@5 x ~@2", K: "~ x ~ x", L: "~@2 x!2", M: "~ x ~@2", N: "~ x ~@4 x ~",
  O: "x", P: "x ~@2 x ~@2 x ~", Q: "x!2 ~@4 x ~", R: "x!2 ~ x ~@4", S: "x!2 ~@2 x ~ x ~",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  A B C D ~@8 E@23 F E@7 G E@7 G E@7 G E@7 G E@7 H E@7 H G I E ~ J@2 K B E@15 L E M E M E M E M E M E M E M E N E@7 H G
  I E@4 ~ E@3 O E@3 P E@3 P E@3 Q E@3 Q G I R S T ~ U
>`.pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "x!2 ~@6", C: "~@2 x ~ x!2 ~ x", D: "x", E: "~ x", F: "x!2 ~ x ~@4", G: "~@3 x",
  H: "~ x!3 ~@2 x!2", I: "~@4 x ~ x!2", J: "x!5 ~@3", K: "x!3 ~ x!3 ~", L: "~@4 x!2 ~@2", M: "~ x ~@2 x ~@3",
  N: "~ x ~@2 x!2 ~@2", O: "~@4 x!4", P: "~@6 x!2", Q: "~@12 x!2 ~ x", R: "~@2 x ~@2 x ~@2", S: "x!16",
  T: "~@4 x!2 ~ x", U: "~@3 x ~@2 x ~",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@84 A ~ B ~@4 C ~@15 D ~@15 C ~@8 A ~ B ~@4 A ~@2 A ~@16 A ~@4 A ~>".pickRestart({
  A: "x", B: "~@2 x!2 ~@4", C: "~@6 x!2", D: "~@3 x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@12 A@23 ~ B C@6 D B C@6 D B C@6 D B C@6 D C@7 E C@7 E ~@8 C@15 E ~@16 C@7 E ~@34
>`.pickRestart({
  A: "x!2", B: "~ x!3", C: "x!4", D: "x!2 ~@2", E: "x",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@35 A ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@2 C ~@4 D ~@15 E ~@15 E ~@7 B ~@2 C ~@3 A ~@2 F ~@4 B ~@3 B ~@3 G ~@3 G
  ~@4 H ~@2
>`.pickRestart({
  A: "~@4 x!4", B: "~@4 x!2 ~@2", C: "x!2 ~@6", D: "~@2 x!4 ~@2", E: "~@2 x!2 ~@4", F: "~@12 x!2 ~ x",
  G: "~@8 x!2 ~ x ~@4", H: "x!2 ~ x ~@4",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@34 B ~@7 B ~@7 B ~@7 B ~@23 C D E ~@45 C D E ~@7 F ~@8 A ~@3 A ~@3 C D G ~@4
>`.pickRestart({
  A: "~ x", B: "x", C: "~ x!2 ~", D: "x!2 ~@2", E: "~@3 x", F: "~ x ~@2", G: "x ~@2 x ~@2 x ~",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@108 A@15 B ~@11 C A@2 D C A E ~ A@3 D A@3 D F A@2 D F A@2 D ~@7>".pickRestart({
  A: "x!4", B: "x", C: "~ x!3", D: "x!2 ~@2", E: "x!3 ~", F: "x!2 ~ x",
})).gain(0.4)

stack(bass, trumpet, trombone, piano, bass_2, kick, snare, low_tom, hihat, mid_tom, crash, ride)

More by Bradley Herrin