Strudelify
Too Funky cover art

Twenty Five

Too Funky

Michael George

KeyE♭ minorTempo100 bpm
0:00/0:00
// Too Funky — Michael George
// 100 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 5 "Ch  5" Doctor Solo -> lead 8 bass lead
// note: Full arrangement: all 98 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass pick · "Ch  1"
const bass = note(`<
  ~@4 A B A B A B A B C D E D C D E D C D E D C D E D C D E D C D E D C D E D C D E D C D E D A B A B A B A B C D E D C
  D E D C D E D C D E D ~@2 C D C D C D C D A@8 F ~@7
>`.pickRestart({
  A: "eb1@3 ~@5 eb1@3 ~@5 eb1@3 ~@5 eb1@3 ~@5", B: "eb1@3 ~@5 eb1@3 ~@5 eb1@3 ~@5 eb1@3 ~ db1@3 ~",
  C: "db1 eb1 ~ eb1 gb1 ab1 ~@2", D: "~ gb1 ab1 ~ gb1 ab1 bb0 db1", E: "db1 eb1 ~ eb1 gb1 ab1 db1 eb1", F: "eb1@3 ~@13",
})).s("gm_electric_bass_pick").gain(0.62)

// chords · piano · "Ch  2"
const piano = note(`<
  ~@3 A ~@7 A B C B D B C B E B C B D B C B E B C B D B C B D B C B E B C B D B C B E ~@7 A B C B D B C B E B C B D B C
  B D ~@10 F G F G F G F G H I H J H I H C
>`.pickRestart({
  A: "~@24 [a6,bb6] [eb6,f6,g6] [bb5,c6,d6] [f5,g5,a5] [c5,d5,eb5] [g4,a4,bb4] [d4,eb4,f4] [ab3,bb3,c4]", // Bbmaj7 Eb Bb F Cm Gm Dm Ab
  B: "~@2 [bb3,db4,eb4,gb4] ~@2 [bb3,db4,eb4,gb4] ~@2 [c4,eb4,f4,ab4] ~@2 [c4,eb4,f4,ab4] ~@2 [c4,eb4,f4,ab4] ~", // Ebm7 Fm7
  C: "~@2 [db4,eb4,gb4,bb4] ~@2 [db4,eb4,gb4,bb4] ~@2 [c4,eb4,f4,ab4] ~@2 [c4,eb4,f4,ab4] ~@2 [c4,eb4,f4,ab4] ~", // Ebm7 Fm7
  D: "~@2 [gb3,bb3,db4,eb4] ~@2 [gb3,bb3,db4,eb4] ~@2 [ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~@2 [ab3,c4,eb4,f4] ~", // Ebm7 Fm7
  E: "~@4 [gb3,bb3,db4,eb4]@2 ~@4 [gb3,bb3,db4,eb4]@2 ~@4 [ab3,c4,eb4,f4]@2 ~@4 [ab3,c4,eb4,f4]@2 [a6,bb6] [eb6,f6,g6] [bb5,c6,d6] [f5,g5,a5] [c5,d5,eb5] [g4,a4,bb4] [d4,eb4,f4] [ab3,bb3,c4], ~@14 [ab3,c4,eb4,f4] ~", // Ebm7 Fm7 Bbmaj7 Eb Bb F Cm Gm …
  F: "~@4 [bb3,db4,eb4,gb4] ~@5 [bb3,db4,eb4,gb4] ~@5 [c4,eb4,f4,ab4] ~@5 [c4,eb4,f4,ab4] ~@5 [c4,eb4,f4,ab4] ~@3", // Ebm7 Fm7
  G: "~@4 [db4,eb4,gb4,bb4] ~@5 [db4,eb4,gb4,bb4] ~@5 [c4,eb4,f4,ab4] ~@5 [c4,eb4,f4,ab4] ~@5 [c4,eb4,f4,ab4] ~@3", // Ebm7 Fm7
  H: "~@2 [bb3,db4,eb4,gb4] ~@2 [bb3,db4,eb4,gb4] ~@2 [c4,eb4,f4,ab4] ~@2 [c4,eb4,f4,ab4] ~@2 [c4,eb4,f4,ab4] ~, eb3 ~", // Ebm7 Fm7
  I: "~@2 [db4,eb4,gb4,bb4] ~@2 [db4,eb4,gb4,bb4] ~@2 [c4,eb4,f4,ab4] ~@2 [c4,eb4,f4,ab4] ~@2 [c4,eb4,f4,ab4] ~, eb3 ~", // Ebm7 Fm7
  J: "~@4 [db4,eb4,gb4,bb4]@2 ~@4 [db4,eb4,gb4,bb4]@2 ~@4 [c4,eb4,f4,ab4]@2 ~@4 [c4,eb4,f4,ab4]@2 [a6,bb6] [eb6,f6,g6] [bb5,c6,d6] [f5,g5,a5] [c5,d5,eb5] [g4,a4,bb4] [d4,eb4,f4] [ab3,bb3,c4], eb3@8 ~@6 [c4,eb4,f4,ab4] ~", // Ebm7 Fm7 Bbmaj7 Eb Bb F Cm Gm …
})).s("gm_piano").gain(0.36)

// chords · lead 4 chiff · "Ch  3"
const lead_4_chiff = note("<~@4 A B A B A B A B ~@36 A B A B A B A B ~@26 A B A B A B A B ~@8>".pickRestart({
  A: "[bb3,db4,eb4,gb4] [c4,eb4,f4,ab4]", B: "[db4,eb4,gb4,bb4] [c4,eb4,f4,ab4]",
})).s("gm_lead_4_chiff").gain(0.12)

// other · lead 8 bass lead · "Ch  5"
const lead_8_bass_lead = note("<~@28 A B C D ~@36 A B C D ~@26>".pickRestart({
  A: "~@4 db5@2 eb5 ~ db5@2 ~@6 db5@2 eb5 ~ db5 ~@3 gb5@2 ab5 ~ bb5@2 eb5 ~",
  B: "~@4 db5@2 eb5 ~ db5@2 ~@6 db5@2 eb5 ~ bb4 ~@3 eb5@8",
  C: "~@4 db5@2 eb5 ~ db5@2 ~@6 db5@2 eb5 ~ db5@2 ~@2 gb5@2 ab5 ~ bb5@2 eb5 ~",
  D: "~@4 db5@2 eb5 ~ db5@2 ~@6 db5@2 eb5 ~ bb4 ~ gb5 ~@3 eb5@6",
})).s("gm_lead_8_bass_lead").gain(0.37)

// chords · string ensemble 1 · "Ch  6"
const string_ensemble_1 = note("<~@28 A B A B ~@35 C A B A B ~@26>".pickRestart({
  A: "[bb3,db4,eb4,gb4] [c4,eb4,f4,ab4]", B: "[db4,eb4,gb4,bb4] [c4,eb4,f4,ab4]", C: "~ [db4,db5]",
})).s("gm_string_ensemble_1").gain(0.18)

// chords · kalimba · "Ch  7"
const kalimba = note(`<
  ~@12 A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B ~@8 A B A B A B A B C D C D ~@6 A E A E A E A
  E A E A E A E A E ~@8
>`.pickRestart({
  A: "[bb3,eb4] ~@3 [bb3,eb4] ~@7 [bb3,eb4] ~@3 [c4,f4] ~@3 [c4,f4] ~@7 [c4,f4] ~@3", // Eb5 F5
  B: "[db4,gb4] ~@3 [db4,gb4] ~@7 [db4,gb4] ~@3 [c4,f4] ~@3 [c4,f4] ~@7 [c4,f4] ~@3", // Gb5 F5
  C: "~@4 [bb3,eb4] ~@5 [bb3,eb4] ~@3 [bb3,eb4] ~@5 [c4,f4] ~@5 [c4,f4] ~@3 [c4,f4] ~", // Eb5 F5
  D: "~@4 [db4,gb4] ~@5 [db4,gb4] ~@3 [db4,gb4] ~@5 [c4,f4] ~@5 [c4,f4] ~@3 [c4,f4] ~", // Gb5 F5
  E: "[db4,gb4] ~@5 [db4,gb4] ~@5 [db4,gb4] ~@3 [c4,f4] ~@3 [c4,f4] ~@7 [c4,f4] ~@3", // Gb5 F5
})).s("gm_kalimba").gain(0.22)

// drums · kick
const kick = s("bd").struct("<A@12 B@16 A@4 B@16 A@8 B@8 A@8 B@10 A@15 C>".pickRestart({
  A: "x!4", B: "x ~ x ~ x!3 ~", C: "x",
})).gain(0.8)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<A@12 ~@16 A@4 ~@16 A@8 ~@8 A@8 ~@10 A@12 ~@4>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B
  C B C B C B C B C B@8 ~ A ~ A ~@4
>`.pickRestart({
  A: "~@15 x ~@16", B: "~ x ~ x", C: "~@8 x ~@6 x ~@8 x ~@7",
})).gain(0.48)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@73 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@8>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.24)

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

// drums · clap · soft notes
const clap_soft = s("cp").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<[~ x ~ x]!72 ~@18 [~ x ~ x]!4 ~@4>").gain(0.64)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~@19 A ~ A ~@4
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(0.32)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~ A ~@7 A@9 ~@3 A ~@3
>`.pickRestart({
  A: "x",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct("<[x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!94 ~@4>")
  .gain(0.64)

// drums · bongos
const bongos = s("bongo:18").struct("<[~ x]!8 ~@4 [~ x]!40 ~@4 [~ x]!38 ~@4>").gain(1.05)

// drums · congas
const congas = s("conga:13").struct("<[~ x ~@3 x ~@2]!94 ~@4>").gain(2.3)

// drums · congas
const congas_2 = s("conga:18").struct("<[~ x ~@2]!94 ~@4>").gain(2.3)

// drums · congas
const congas_3 = s("conga:33").struct("<[~@3 x ~@2 x!2]!94 ~@4>").gain(2.3)

stack(
  bass, piano, lead_4_chiff, lead_8_bass_lead, string_ensemble_1, kalimba, kick, kick_soft, snare, snare_soft, clap,
  clap_soft, mid_tom, mid_tom_soft, crash, tambourine, bongos, congas, congas_2, congas_3
)

More by Michael George