Strudelify
Fast Love cover art

1996 · Fastlove

Fast Love

Michael George

KeyB♭ minorTempo112 bpm
0:00/0:00
// Fast Love — Michael George
// 112 bpm, 4/4, key A# minor. Source: 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 140 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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 · synth bass 2 · "SYNTHBASS2"
const bass = note(`<
  ~@3 A B C D E F G@2 H F G@2 H F G@2 I F G@2 H F G@2 H F G@2 H J@2 K L J@2 M N F G@2 H F G@2 H F G@2 I F G@2 H F G@2 H
  F G@2 H J@2 K L J@2 M N F G@2 H F G@2 H F G@2 H F G@2 H O ~ P Q ~@42 R@5 ~
>`.pickRestart({
  A: "~@6 ab1@7 ~@3, ~@5 ab2@2 ~@9", B: "eb1 ~@2 eb1@5", C: "bb1@12 ~@2 db2 eb2", D: "eb1 ~@2 eb1@4 ~",
  E: "bb1 ~ bb1@2 c2 ~ c2@2 db2 ~ db2@2 eb2 ~ eb2 ~", F: "bb1@2 ~@2 eb2@3 ~ db2 ~ eb2@2 bb1@2 ab1@2",
  G: "[bb1@2 ~@2 bb1@3 ~ bb1@2 f1@2 ab1@2 bb1@4 ~@2 eb2@3 ~ db2 ~ eb2@2 bb1@2 ab1 ~]/2",
  H: "bb1 ~ bb1@2 c2 ~ c2@2 db2 ~ db2@2 eb2 ~ eb2@2", I: "bb1@2 ~@2 bb1@2 ~@2 bb1 ~ bb1@2 db2 ~ db2@2",
  J: "[bb1@3 ~ bb1@2 ~ ab1 bb1@2 ab1@2 f1@2 gb1@6 gb2@2 gb1@3 ~ gb1@2 gb2@2 gb1 ~]/2",
  K: "bb1@2 ~@2 bb1@2 ~ ab1 bb1@2 ab1@2 f1@2 eb1@2", L: "~@2 eb1@2 eb2@2 eb1@3 ~ eb2@2 f1@2 ab1 ~",
  M: "f1@2 ~@2 f2@2 ~ c2 f2@2 c2@2 f1@2 eb1@2", N: "~@2 eb1@2 eb2@2 ~ eb1 eb2@2 bb1@2 ab1@2 bb1 ~", O: "bb1 ~@15",
  P: "~@7 bb1 ab1@2 bb1 ~@5", Q: "~ bb1!2 ab1@3 bb1 ~ ab1@2 ~@2 bb1@2 f2 ~", R: "[bb1@19 ~]/5",
})).s("gm_synth_bass_2").gain(0.58)

// bass · slap bass 1 · "SLAPBASS"
const bass_2 = note("<~@92 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C ~@16>".pickRestart({
  A: "bb1@2 bb2 ~@3 gb2@3 ~ gb3 ~ gb2@2 ~ gb2", B: "ab2@3 ~ ab2@3 ab2 f2 ~ f2@4 ab2 bb2",
  C: "ab2@3 ~ ab2@3 ab2 f2 ~ f2 ~ f2@2 ab2 bb2",
})).s("gm_slap_bass_1").gain(0.58)

// chords · synth strings 1 · "SYNSTRING1"
const synth_strings_1 = note(`<
  A B A C A B A C D@24 E F E G E F H I D@24 E F E G E F H I D@16 ~@4 D@32 J@8 K@8
>`.pickRestart({
  A: "[gb3,bb3,db4,f4]", B: "[ab3,c4,eb4,f4]", C: "[ab3,c4,eb4,f4]@7 ~",
  D: "[[gb3,bb3,db4,f4]@15 [ab3,c4,eb4]@16 [gb3,bb3,db4,f4]@16 [ab3,c4,eb4,f4]@14 ~@2 [gb3,bb3,db4,f4]@16 [ab3,c4,eb4,f4]@16 [gb3,bb3,db4,f4]@16 [ab3,c4,eb4]@14 ~@3]/8", // Gbmaj7 Ab Gbmaj7 Fm7 Gbmaj7 Fm7 Gbmaj7 Ab
  E: "[db4,f4,ab4]", F: "[bb3,db4,f4]", G: "[bb3,f4], db4@3 ~", H: "[ab3,c4,eb4]", I: "[gb3,bb3,db4]@15 ~",
  J: "[bb2,bb3,f4,bb4]/8", K: "bb1/8",
})).s("gm_synth_strings_1").gain(0.18)

// chords · synth strings 1 · "SYNSTRING1" · soft notes
const synth_strings_1_soft = note(`<
  ~@8 A@2 ~@4 B@2 A@2 ~@4 B@2 A@2 ~@4 B@2 ~@8 A@2 ~@4 B@2 A@2 ~@4 B@2 A@2 ~@4 B@2 ~@8 A@2 ~@4 B@2 A@2 ~@4 B@2 ~@4 A@2
  ~@4 B@2 A@2 ~@4 B@2 A@2 ~@4 B@2 A@2 ~@4 B@2 ~@16
>`.pickRestart({
  A: "[~@15 f4@16 ~]/2", B: "[~@15 f4@14 ~@3]/2",
})).s("gm_synth_strings_1").gain(0.09)

// other · orchestra hit · "FASTLOVE"
const orchestra_hit = note("<~@4 A ~@11 B ~@7 B ~@23 B ~@39 B ~@3 B ~@39 C@3 ~@5>".pickRestart({
  A: "[bb4,db5]@3 ~@13", B: "bb4 ~@7", C: "[~@11 bb1@28 ~@9]/3",
})).s("gm_orchestra_hit").gain(0.27)

// other · alto sax · "ALTSAX"
const alto_sax = note(`<
  ~@8 A B@2 C A B@2 C ~@8 D E F G H I J ~@7 K L A B@2 C A B@2 C ~@8 M N O P Q R S ~@7 K L A B@2 C A B@2 C ~@60
>`.pickRestart({
  A: "~@2 eb3@2 f3@2 gb3@2 ab3@2 bb3@2 c4@2 db4 ~", B: "[~ c4 db4 eb4 ~ f4 gb4 ab4@2 gb4 f4 gb4@2 f4 eb4 ~]/2",
  C: "c4@2 db4@2 c4@2 db4@2 c4@2 bb3@5 ~", D: "~@2 eb3@2 gb3@2 bb3@2 db4@2 f4@2 db4@2 eb4 ~",
  E: "~@2 eb4 ~@3 db4 ~@3 eb4@3 ~@3", F: "~@2 eb3@2 gb3@2 bb3@2 db4@2 f4@2 db4 ~ eb4 ~",
  G: "~@2 db4 ~@3 eb4 ~@3 db4@4 ~@2",
  H: "~@2 [eb3,gb3]@2 [gb3,bb3]@2 [bb3,db4]@2 f4@2 [f4,ab4]@2 [db4,f4] ~ [eb4,ab4] ~, ~@8 db4 ~@7", // Ebm Gb Bbm Fm Db Ab5
  I: "~@2 [db4,ab4] ~@3 [c4,eb4] ~@3 [ab3,c4] ~@3 [c4,eb4]@2", J: "[bb3,db4]@7 ~", K: "~@8 c4@3 db4@3 eb4@2",
  L: "bb3@7 ~", M: "f4@2 ~ f4 ~@2 f4 ~@3 f4 ~@5", N: "f4@2 ~ f4 ~@2 f4 ~@3 f4 ~ ab4 ~ bb4 ~",
  O: "f4@2 ~ f4 ~@2 f4 ~@3 f4 ~ ab4@3 [gb4,g4]", P: "f4@3 ~",
  Q: "~@2 [db3,gb3]@2 [gb3,bb3]@2 db4@2 [db4,f4]@2 [f4,ab4] ~@3 [eb4,ab4] ~, ~@6 bb3 ~@9", // Gb5 Gb Db Fm Ab5
  R: "~@2 [eb4,ab4] ~@3 [c4,eb4] ~@3 [ab3,c4] ~@3 [c4,eb4]@2", S: "[bb3,db4]@3 ~",
})).s("gm_alto_sax").gain(0.48).pan(0.3)

// chords · tuba
const tuba = note(`<
  ~@32 A B C B A B C B D ~ E ~ E ~ E ~@17 A B C B A B C B D ~ E ~ E ~ E ~ D ~ E ~ E ~ E ~@5 D C D ~ D C D ~ D C D ~ D C
  D ~ D C D ~ D C D ~ D C D ~ D C D ~@17
>`.pickRestart({
  A: "~@2 [c4,f4] ~ [c4,f4]@2 ~ [c4,f4] ~@8", B: "~@2 [db4,f4] ~ [db4,f4]@2 ~ [db4,f4] ~@8",
  C: "~@2 [c4,f4] ~ [c4,f4]@3 [c4,f4] ~@8", D: "[db4,f4]@3 [db4,f4] ~@4 [db4,f4]@3 [db4,f4] ~@4",
  E: "[db4,f4]@3 [db4,f4] ~@4 [db4,f4]@2 ~ [db4,f4] ~@4", // Db
})).s("gm_tuba").gain(0.3).pan(0.6)

// other · recorder · "BLOKFLUIT"
const recorder = note("<A B C D E F G H ~@11 I@2 ~ J K@2 ~@26 I@2 ~ J K@2 ~@23 A B C D E F G H ~@52>".pickRestart({
  A: "bb5 ~ bb5 ab5 bb5 ~ f6@2", B: "eb6@11 ~@3 db6@2", C: "c6 db6 c6 db6 c6@2 bb5@2", D: "ab5@2 c6 ab5 ~ ab5 ~@2",
  E: "bb5 ~@3 bb5@2 ab5@2 bb5@4 f6@4", F: "c6@13 ~@3", G: "~ db6 c6 db6 c6@2 bb5@2", H: "ab5@4 c6 ~ ab5@3 ~ ab5@3 ~@3",
  I: "[f4@2 ~@2 f4@2 ~@2 f4@2 ab4@2 f4 ~ f4@4 eb4@11 ~@3]/2", J: "~@14 eb4 ~",
  K: "[~@2 f4 ~ f4 ~@3 f4@2 ab4@2 f4@2 bb4@16 ~@2]/2",
})).s("gm_recorder").gain(0.4).pan(0.4)

// other · vibraphone · "VIBRAFOON"
const vibraphone = note("<~@100 A B C D A B C D A B C D A B C D A B C D A B C D ~@16>".pickRestart({
  A: "~@8 bb3 ~ bb3 ~ db4@3 bb3", B: "f4 ~ f4 ~ f4 ~@11", C: "~@7 bb3 f4 ~ gb4 ~ f4 ~ db4 ~", D: "eb4@2 f4 ~@5",
})).s("gm_vibraphone").gain(0.26).pan(0.2)

// chords · rock organ · "ORGAN3"
const rock_organ = note("<~@134 A@2 B@2 C@2>".pickRestart({
  A: "[~@3 [bb4,db5,eb5,f5]@13]/2", B: "[~@3 [bb4,db5,eb5,f5]@12 ~]/2", C: "[~@6 [bb4,db5,eb5,f5]@17 ~@9]/2",
})).s("gm_rock_organ").gain(0.23)

// drums · kick
const kick = s("bd").struct("<~@2 A ~ A ~ A B C@80 D@4 C@32 ~@16>".pickRestart({
  A: "x", B: "~@8 x ~ x ~@2 x!2 ~", C: "x!2", D: "x!4",
})).gain(0.5)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@8 [~@7 x ~@7 x]!80 ~@4 [~@7 x ~@7 x]!32 ~@16>").gain(0.31)

// drums · clap
const clap = s("cp").struct("<~@4 [~ x ~@2] ~ [~ x ~ x]!82 ~@4 [~ x ~ x]!32 ~@16>").gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@3 A B ~ C D E@80 ~@2 E@34 ~@16>".pickRestart({
  A: "~@7 x", B: "~ x ~@2", C: "~@4 x ~@7 x ~@2 x", D: "~@4 x ~@2 x ~@4 x ~@2 x", E: "~ x ~ x",
})).gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@88 [~@15 x]!4 ~@48>").gain(0.5)

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

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

// drums · shaker
const shaker = s("sh").struct("<~@4 [~ x ~ x ~ x ~ x]!4 ~@132>").gain(0.37)

stack(
  bass, bass_2, synth_strings_1, synth_strings_1_soft, orchestra_hit, alto_sax, tuba, recorder, vibraphone, rock_organ,
  kick, kick_soft, clap, snare, low_tom, hihat, crash, shaker
)

More by Michael George