Strudelify

Blue Monday

Fats Domino

KeyB♭ majorTempo102 bpm
0:00/0:00
// Blue Monday — Domino Fats
// 102 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 60 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(102/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 · piano · "A.PIANO 1"
const piano = note(`<
  A B C D E F@3 G@2 F D E F@2 G F@2 E H F D E H G I F D J F@2 G F G F D E F@2 G F@2 E H F K E H G@2 F L E F@2 G M N@2 ~
>`.pickRestart({
  A: "~@6 [bb3,d4] ~ bb4@2 [d4,f4] ~ [bb3,db4,e4]@2 bb4@2 [db4,e4] ~ [bb3,c4] ~ bb4@2 [bb3,eb4]@2, ~@6 f4@2 ~@2 bb3@2 ~@4 bb3@2 eb4@2 ~@2 c4 ~", // Bb Dm Bbdim Dbm Bbsus2 Eb5
  B: "[bb3,d4] ~@3 [f2,f3,f4] ~ [f2,f3,f4]@2 ~@2 [f2,f3,f4] ~ [f2,f3] ~@3 [f2,f3,f4] ~ [f2,f3,f4]@2 ~@2 [f2,f3]@2, ~@12 f4@2 ~@8 f4 ~", // Bb F
  C: "[d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4] ~", // Bb Dm
  D: "[d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~", // Ddim
  E: "[eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~ [eb4,g4,bb4] ~", // Eb
  F: "[d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~", // Bb
  G: "[f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~", // F
  H: "[e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~ [e4,g4,bb4] ~", // Edim
  I: "[f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [eb4,c5] ~ [eb4,c5] ~ [eb4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4] ~ [f4,a4] ~", // F Cm F
  J: "[db4,g4,bb4] ~ [db4,g4,bb4] ~ [db4,g4,bb4] ~ [db4,g4,bb4] ~ [db4,g4,bb4] ~ [db4,g4,bb4] ~ [db4,g4,bb4] ~ [db4,g4,bb4] ~ [db4,g4,bb4] ~ [db4,g4,bb4] ~ [db4,g4,bb4] ~ [db4,g4,bb4] ~", // Gdim
  K: "[d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~", // Bb Ddim
  L: "[d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~ [d4,f4,ab4] ~", // Bb Ddim
  M: "[d4,f4,bb4] ~@3 bb2@2 [d3,d4]@2 ~@2 [d3,d4]@2 [eb3,eb4]@2 ~@2 [eb3,eb4]@2 [e3,e4]@2 ~@2 e3@2, bb2@2 ~@20 e4 ~", // Bb D Eb E
  N: "[[f3,f4]@2 [g3,g4] [a3,a4]@2 bb3 ~@3 [d4,f4,bb4]@12 ~@3, ~@10 bb4 ~@7 bb2@19 ~@11]/2", // F G A Bb
})).s("gm_piano").gain(0.38).pan(0.4)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@2 A B C A D E F G D@2 C B E G E H I J K L M N O P D A Q B@2 R B R D A Q B D G A S I J T U V W O X D B Q A B Y Z AA@2
  ~
>`.pickRestart({
  A: "bb1@3 ~@7 db2@2 d2@6 f2@3 ~@3", B: "bb1@2 ~@8 db2@2 d2@6 f2@3 ~@3", C: "eb2@3 ~@7 gb2@2 g2@6 bb2@3 ~@3",
  D: "bb1 ~@4 db2 d2@3 f2@2 ~", E: "bb1@3 ~@7 db2@2 d2@6 f2@4 ~@2", F: "f1@3 ~@7 ab1@2 a1@6 c2@4 ~@2",
  G: "f1@3 ~@7 ab1@2 a1@6 c2@3 ~@3", H: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1@2 c2@2 d2 ~",
  I: "eb2 ~ eb2 g2 ~ g2 bb2 ~ bb2 c3 ~ c3", J: "db3 ~ db3 bb2 ~ bb2 g2 ~ g2 e2 ~ e2",
  K: "bb1 ~@3 bb1@2 d2@2 ~@2 d2@2 f2@2 ~@2 f2@2 g2 ~@3 g2@2",
  L: "bb2@2 ~@2 bb2@2 g2@2 ~@2 g2@2 f2@2 ~@2 f2@2 d2 ~@3 d2 ~", M: "eb2 ~ eb2 bb2 ~ bb2 g2 ~ g2 eb2 ~ eb2",
  N: "e2@2 ~@2 e2@2 bb2@2 ~@2 bb2@2 g2@2 ~@2 g2@2 e2 ~@3 e2@2", O: "f2 ~ f2 a2 ~ a2 c3 ~ c3 a2 ~ a2",
  P: "f2@2 ~@2 f2@2 eb2@2 ~@2 eb2@2 d2@2 ~@2 d2@2 c2@2 ~@2 c2 ~", Q: "eb2@2 ~@8 gb2@2 g2@6 bb2@3 ~@3",
  R: "f2@3 ~@7 ab2@2 a2@6 c3@3 ~@3", S: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1@2 c2@2 d2@2",
  T: "bb1 ~ bb1 d2 ~ d2 f2 ~ f2 g2 ~ g2", U: "bb2 ~ bb2 g2 ~ g2 f2 ~ f2 d2 ~ d2",
  V: "eb2 ~@3 eb2@2 bb2@2 ~@2 bb2@2 g2@2 ~@2 g2@2 eb2@2 ~@2 eb2@2",
  W: "e2 ~@3 e2@2 bb2@2 ~@2 bb2@2 g2@2 ~@2 g2@2 e2@2 ~@2 e2@2", X: "f2 ~ f2 eb2 ~ eb2 d2 ~ d2 c2 ~ c2",
  Y: "f2@2 ~@8 ab2@2 a2@6 c3@3 ~@3", Z: "bb1 ~ bb1 d2@3 eb2@3 e2@3", AA: "[f2@2 g2 a2@2 bb2 ~@3 bb1@15]/2",
})).s("gm_acoustic_bass").gain(0.38)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@2 A B C D@2 E F@2 D E C D A F A G H I J K L M N O A B P B@2 F D F A@2 Q D@2 F A R S T U K H T V W A B Q A@2 F X Y@2
  ~
>`.pickRestart({
  A: "bb2 ~@4 db3 d3@3 f3@2 ~", B: "bb2@2 ~@8 db3@2 d3@6 f3@3 ~@3", C: "eb3@2 ~@8 gb3@2 g3@6 bb3@3 ~@3",
  D: "bb2@3 ~@7 db3@2 d3@6 f3@4 ~@2", E: "bb2@3 ~@7 db3@2 d3@6 f3@3 ~@3", F: "f3@3 ~@7 ab3@2 a3@6 c4@3 ~@3",
  G: "bb2 ~ [bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ bb2@2 c3@2 d3@2", // Bb
  H: "eb3 ~@3 eb3@2 g3@2 ~@2 g3@2 bb3@2 ~@2 bb3@2 g3@2 ~@2 g3@2",
  I: "e3 ~@3 e3@2 g3@2 ~@2 g3@2 bb3@2 ~@2 bb3@2 g3@2 ~@2 g3 ~",
  J: "bb2 ~@3 bb2@2 d3 ~@3 d3@2 f3@2 ~@2 f3@2 d3 ~@3 d3@2",
  K: "bb2@2 ~@2 bb2@2 d3@2 ~@2 d3@2 f3@2 ~@2 f3@2 d3 ~@3 d3@2",
  L: "eb3 ~@3 eb3@2 g3 ~@3 g3@2 bb3@2 ~@2 bb3@2 g3 ~@3 g3@2",
  M: "e3@2 ~@2 e3@2 g3@2 ~@2 g3@2 bb3 ~@3 bb3@2 g3 ~@3 g3@2",
  N: "[e3,f3]@2 ~@2 f3@2 a3@2 ~@2 a3@2 c4@2 ~@2 c4@2 a3 ~@3 a3@2", // Fmaj7
  O: "f3@2 ~@2 f3@2 eb3@2 ~@2 eb3@2 d3 ~@3 d3@2 c3 ~@3 c3@2", P: "eb3@2 ~@8 gb3@2 g3@6 bb3@3 ~@3, ~@12 ab3 ~@11",
  Q: "eb3@3 ~@7 gb3@2 g3@6 bb3@3 ~@3",
  R: "[bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ [bb2,d3] ~ bb2@2 c3@2 d3 ~", // Bb
  S: "eb3 ~ eb3 g3 ~ g3 bb3 ~ bb3 g3 ~ g3", T: "e3 ~ e3 g3 ~ g3 bb3 ~ bb3 g3 ~ g3",
  U: "bb2 ~ bb2 d3 ~ d3 f3 ~ f3 d3 ~ d3", V: "f3 ~ f3 a3 ~ a3 c4 ~ c4 a3 ~ a3",
  W: "f3@2 ~@2 f3@2 eb3 ~@3 eb3@2 d3 ~@3 d3@2 c3 ~@3 c3@2", X: "bb2 d3 eb3 e3",
  Y: "[f3@4 g3@2 a3@4 bb3@3 ~@5 [d3,f3,ab3,c4]@30]/2", // Dm7b5
})).s("gm_electric_guitar_jazz").gain(0.44).pan(0.8)

// other · tenor sax
const tenor_sax = note("<~@33 A B C D E B F G H ~@18>".pickRestart({
  A: "~@11 f3", B: "bb3@11 ~ g3@9 ~ f3@2", C: "d3@9 ~ c3@2 bb2@2 ~@8 bb2@2", D: "eb3@11 ~ eb3@3 ~@7 eb3@2",
  E: "c3@2 bb2@15 ~@7", F: "d3@10 ~@2 c3@3 ~@9", G: "bb2@9 ~ c3 d3 f3@8 ~ d3 c3 ~", H: "bb2@11 ~@13",
})).s("gm_tenor_sax").gain(0.49)

// other · trumpet
const trumpet = note("<~@18 A@6 B C D E F E G H G I ~@8 A@6 B C D E F E G H J K@2 ~>".pickRestart({
  A: "~@2 bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~",
  B: "~@2 c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5@2 ~@4",
  C: "f5@2 ~@2 f5@2 eb5@2 ~@2 eb5@2 d5 ~@3 d5@2 c5@2 ~@2 c5@2", D: "bb3 ~@9 db4@2 d4@5 ~ f4@2 ~@4",
  E: "bb3@2 ~@8 db4@2 d4@5 ~ f4@2 ~@4", F: "eb4 ~@4 gb4 g4@3 bb4 ~@2", G: "bb3 ~@4 db4 d4@3 f4 ~@2",
  H: "f4@2 ~@8 ab4@2 a4@5 ~ c5@2 ~@4", I: "f4 ~@4 ab4 a4@3 c5 ~@2", J: "bb3 ~ d4 ~ eb4 ~ e4 ~",
  K: "[f4@3 ~ g4@2 a4@3 ~ bb4@2 ~@6 f5@30]/2",
})).s("gm_trumpet").gain(0.49)

// other · tenor sax
const tenor_sax_2 = note(`<
  ~ A B C D C E F G@2 H I J K I G L M N@2 O P Q R S T C F U V F W F X ~@8 N@2 O P Q R S T C F U V F W Y Z@2 ~
>`.pickRestart({
  A: "~@4 f3 ~ f3@2 ~@2 f3 ~ f3@2 ~@2 f3 ~ f3 ~@3 f3 ~", B: "bb2@2 ~@8 db3@2 db3@6 f3@3 ~@3",
  C: "bb2@2 ~@8 db3@2 d3@5 ~ f3@2 ~@4", D: "eb3 ~@4 gb3 g3@3 bb3 ~@2", E: "bb2@2 ~@8 db3@2 db3@5 ~ f3@3 ~@3",
  F: "bb2 ~@4 db3 d3@3 f3 ~@2", G: "f3 ~@4 ab3@4 c4 ~@2", H: "bb2@3 ~@7 db3@8 f3@2 ~@4", I: "bb2 ~@4 db3@4 f3 ~@2",
  J: "eb3@2 ~@8 gb3@8 bb3@3 ~@3", K: "bb2@2 ~@8 db3@8 f3@3 ~@3", L: "bb2@2 ~@8 db3@7 ~ f3@3 ~@3", M: "bb2 ~@11",
  N: "~@2 g3 ~ g3 ~ gb3 ~ g3 ~ g3 ~ g3 ~ g3 ~ gb3 ~ gb3 ~ g3 ~ g3 ~",
  O: "~@2 d3 ~ d3@2 d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~",
  P: "~@2 d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~",
  Q: "~@2 g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3@2 g3 ~ g3 ~ g3 ~ g3 ~",
  R: "~@2 g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~",
  S: "~@2 a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~@5", T: "f3@2 ~@2 f3@2 eb3@2 ~@2 eb3@2 d3 ~@3 d3@2 ~ c3@2 ~ c3@2",
  U: "eb3@2 ~@8 f3@2 g3@6 bb3@3 ~@3", V: "bb2@2 ~@8 db3@2 d3@6 f3@3 ~@3", W: "f3 ~@4 ab3 a3@3 c4 ~@2",
  X: "f3@2 ~@8 ab3@2 a3@5 ~ c4@2 ~@4", Y: "bb3@4 ~@2 d4@4 ~@2 eb4@3 ~@3 e4@3 ~@3, bb2 ~@11",
  Z: "[f4@4 g4@2 a4@3 ~ bb4@2 ~@6 bb4@29 ~]/2",
})).s("gm_tenor_sax").gain(0.49).pan(0.3)

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

// drums · snare
const snare = s("sd").struct("<~ A B@15 C D@7 E B@5 F D@2 B@7 C D@7 E B@6 G H ~@2>".pickRestart({
  A: "~@2 x!2 ~ x!7", B: "~ x ~ x", C: "~ x!11", D: "x!12", E: "x ~ x!2 ~ x!5 ~@2", F: "~@6 x ~@11 x ~@2 x!3",
  G: "x ~ x!2 ~ x!7", H: "x!4 ~ x ~@3 x ~@2",
})).gain(0.38)

// drums · low tom
const low_tom = s("lt").struct("<~@58 [~@3 x] ~>").gain(0.38)

// drums · mid tom
const mid_tom = s("mt").struct("<~@58 [~@17 x ~@6] ~>").gain(0.55)

// drums · crash
const crash = s("cr").struct("<~@26 A ~@7 A ~@15 A ~@6 B ~@2>".pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.38)

// drums · ride
const ride = s("rd").struct("<~@2 A@15 B ~@8 C A@4 D ~@2 C A@6 B ~@8 C A@5 ~@4>".pickRestart({
  A: "x!12", B: "x", C: "~ x!11", D: "x!11 ~",
})).gain(0.33)

stack(piano, bass, electric_guitar_jazz, tenor_sax, trumpet, tenor_sax_2, kick, snare, low_tom, mid_tom, crash, ride)

More by Fats Domino