Strudelify

Magnolia forever

Claude Francois

KeyE♭ minorTempo138 bpm
0:00/0:00
// Magnolia forever — Claude Francois
// 138 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 153 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(138/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 · "Track-1"
const piano = note(`<
  A B C B D B E B F ~ G H G H I J F ~ G H G H I J ~@16 F ~ G H G H I J F ~ G H G H I K ~@16 L M N O P Q P R ~@73
>`.pickRestart({
  A: "[db4,eb4,gb4,bb4] ~@4 [db4,eb4,gb4,bb4] ~@3 [db4,eb4,gb4,bb4] ~@5 [ab4,db5]@2 [ab4,db5]!2 ~ [ab4,db5] ab4@2 ~, ~@21 db5 ~@2", // Ebm7 Db5
  B: "[b3,eb4,gb4,bb4] ~@4 [b3,eb4,gb4,bb4] ~@3 [b3,eb4,gb4,bb4]@10 ~@5", // Bmaj7
  C: "[db4,eb4,gb4,bb4] ~@4 [db4,eb4,gb4,bb4] ~@3 [db4,eb4,gb4,bb4] ~@5 db5@2 [ab4,db5]!2 ~ [ab4,db5] [ab4,db5]@2 ~, ~@15 ab4 ~@8", // Ebm7 Db5
  D: "[db4,eb4,gb4,bb4] ~@4 [db4,eb4,gb4,bb4] ~@3 [db4,eb4,gb4,bb4] ~@5 [ab4,db5]@2 [ab4,db5]!2 ~ [ab4,db5] [ab4,db5]@2 ~", // Ebm7 Db5
  E: "[db4,eb4,gb4,bb4] ~@4 [db4,eb4,gb4,bb4] ~@3 [db4,eb4,gb4,bb4] ~@5 db5@2 [ab4,db5]!2 ~ [ab4,db5] ab4@2 ~, ~@15 ab4 ~@5 db5 ~@2", // Ebm7 Db5
  F: "~@3 eb3@2 ~ db3@2 ~ eb3 ~@5 db3 ~@5 eb3 ~@2", G: "~@3 eb2 ~@2 eb3 ~@2 db3 ~@2 eb3 ~@2 db3 ~@5 eb3 ~@2",
  H: "~@3 eb3 ~@20", I: "~@3 f2 ~@2 f3@3 eb3 ~@2 f3@3 eb3 ~@5 d3@2 ~", J: "~@3 bb1 ~@5 c2@2 ~@4 db2@2 ~@4 d2@2 ~",
  K: "~@3 bb2 ~@5 eb2@3 f2@7 ~@5", L: "~@3 bb2 ~@2 bb2 ~@2 bb2 ~@5 ab2@3 bb2 ~@5", M: "~@3 f2 ~@5 ab2 ~@2 db2@6 d2@5 ~",
  N: "~@3 bb2 ~@2 bb2 ~@8 ab2@3 bb2 ~@5", O: "~@3 f2 ~@5 ab2 ~@2 db2@6 d2@6",
  P: "~@3 bb2 ~@2 bb2 ~@2 bb2 ~@5 ab2@3 bb2@2 ~@4", Q: "~@3 f2 ~@5 ab2 ~@2 db2@6 d2@4 ~@2",
  R: "~@3 bb1 ~@5 c2 ~@5 db2@2 ~@4 d2 ~@2",
})).s("gm_piano").gain(0.2)

// bass · piano
const bass = note(`<
  ~@4 A B@2 C D E F G H I J K D E F G H I L K M N O P Q R S T U V W X Y Z AA@2 AB E AC G H I AD K D E F G H I AE AF AG
  AH AI AJ AK AL AE AF AM AN AO AP AQ AR AS AT AU AV AU AW AU AW AX AY AZ N BA BB Q R S T BC BD O P Q R S T BE BF BG BH
  BI BJ BK BL BM BN BO BP BQ BR BS BT BE BF BG BH BI BJ BU BV BW BX BY BZ CA CB CC CD CE CF CG CH CA CB CC CD BW CI BY
  BZ CA CB CC CD CE CF CG CJ CA CB CC CD CK
>`.pickRestart({
  A: "eb2@3 bb2", B: "[b1@19 ~@2 b1@2 ~ eb2@17 ~ bb2@6, ~@23 db2@2 ~@23]/2", C: "b1@21 db2@2 ~",
  D: "eb2@2 ~ eb2@2 ~ db2@2 ~ eb2@3 ~@3 bb1@4 ~@2 db2@3", E: "eb2@2 ~ ab2@4 ~@2 gb2@4 ~@2 eb2@5 ~ db2@2 ~",
  F: "b1@2 ~ b1@2 ~ bb1@2 ~ b1@2 ~@4 gb1@3 ~@3 ab1@2 ~", G: "b1@2 ~ db2@3 ~@3 b1@4 ~@2 b1@3 ab1@3 gb1@3",
  H: "ab1@2 ~ ab1@2 ~ gb1@2 ~ ab1@3 ~@3 eb1@3 ~@3 gb1@3", I: "ab1@2 ~ db2@3 ~@3 b1@3 ~@3 ab1@3 ~@3 ab1@2 ~",
  J: "bb1 ~@2 bb1@2 ~ ab1 ~@2 bb1@3 ~@3 bb1@3 ~@3 bb1@3",
  K: "bb0@2 ~ bb1 ~@2 c1@2 ~ c2 ~@2 db1@2 ~ db2 ~@2 d1@2 ~ d2 ~@2",
  L: "bb1@2 ~ bb2 ~@2 bb1@3 bb2 ~@2 bb1@2 ~ bb2 ~@2 bb1@2 ~ bb2 ~@2", M: "eb1@6 bb1@6 eb2@4 ~@2 bb1@3 eb2@3",
  N: "d2@5 ~ bb1@6 d2@4 ~ bb1 bb1@3 d2@2 ~", O: "eb2@6 bb1@3 ~@3 eb1@2 ~ eb2@3 g2@3 eb2@3, ~@11 bb1@2 ~@11",
  P: "ab2@6 eb2@4 ~@2 b1@6 ~@3 eb1@3, ~@11 eb2@2 ~@5 ab1@5 ~", Q: "db1@3 ~@3 ab1@3 ~@3 db2@3 ~@2 ab1 ab1@2 ~ ab1@2 ~",
  R: "bb1@2 ~ bb1@3 gb1@3 db1@4 ~@2 db1@3 gb1@3 ab1@3", S: "a1@6 a2@6 a1@3 a2@2 ~ a1@3 a2@3",
  T: "bb1@2 ~ bb2 ~@2 ab1@3 ab2 ~@2 gb1@2 ~ gb2 ~@2 f1@2 ~ f2 ~@2", U: "eb1@6 bb1@6 eb2@4 ~@2 bb1@3 db2@3",
  V: "d2@5 ~ d2@5 ~ d2@4 ~@2 d2@3 d2@2 ~", W: "eb2@6 bb1@5 ~ eb1@4 ~@2 bb1@3 a1@3",
  X: "ab1@6 eb1@5 ~ ab1 ~@2 ab0@2 ~ bb0@2 ~ b0@2 ~", Y: "db1@6 ab1@5 db2!2 ~@5 db1@3 c1@3",
  Z: "bb0@4 ~@5 bb1@5 ~ ab1@3 gb1@3 ab1@3", AA: "[a1@4 ~@2 a1@3 ~@2 a1 a1@4 ~@2 a1@5 bb1@2 ~@17 bb1@4 ~@2]/2",
  AB: "eb1@5 ~@4 eb2@3 ~@3 bb1@4 ~@2 db2@3", AC: "b1@2 ~ b1@2 ~ bb1@2 ~ b1@2 ~@7 gb1@2 ~ ab1@2 ~",
  AD: "bb1 ~@2 bb2@2 ~ bb2@2 ~ bb2 ~@2 bb2 ~@2 bb2 ~@2 bb2@2 ~ bb1 ~ f1",
  AE: "bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ bb1@2 ~ f1@2 ~",
  AF: "bb0@2 ~ bb1 ~@2 c1@2 ~ c2 ~@2 db1@2 ~ db2 ~@2 d1@2 ~ eb1@2 ~", AG: "ab1@3 ~@3 eb1@5 ~ ab1@5 ~ eb1@3 ab1@3",
  AH: "db1@4 ~@2 ab1@5 ~ db2@3 b1@3 bb1@3 ab1@2 ~", AI: "gb1@4 ~@2 db2@3 ~@3 gb2@5 ~ db2@3 bb1@3, ~@11 db2@2 ~@11",
  AJ: "b1@5 ~ gb1@5 ~ b0@2 ~ eb1@3 f1@3 gb1@2 ~", AK: "ab1@5 ~ eb1@5 ~ ab1@2 ~@3 ab1 ab1@2 ~@4",
  AL: "a1@4 ~@2 a1@2 ~@3 a1 a1@4 ~@2 a1@3 ~@3", AM: "ab1@6 eb1@3 gb1@3 ab1@3 ~@2 ab1 eb1@3 ab1@3",
  AN: "db1@5 ~ ab1@3 b1@3 db2@5 ~ ab1@2 ~ g1@3", AO: "gb1@2 ~@7 gb1@2 ~@4 gb1@3 db1@2 ~ c1@3",
  AP: "b0@6 gb1@5 ~ b1@3 ~@3 ab1 ~@2 gb1@2 ~", AQ: "ab1@5 ~ eb1@2 ~ gb1@2 ~ ab1@5 ~ eb1@2 ~ gb1 ~@2",
  AR: "a1@4 ~@2 a1@3 ~@2 a1 a1@4 ~@2 a1@3 ~@3", AS: "bb1@2 ~ bb1 ~@2 bb1 ~@2 bb1 ~@2 bb1@2 ~ bb1 ~@2 bb1 ~@2 bb1@2 ~",
  AT: "bb0@2 ~ bb0@2 ~ bb0 ~@2 bb0@6 ~@9", AU: "bb1 ~@2 bb1 ~@2 ab1 ~@2 bb1 ~@5 ab1 ~@2 bb1 ~@5",
  AV: "~@3 f1 ~@5 ab1 ~@2 db1@6 d1@5 ~", AW: "~@3 f1 ~@5 ab1 ~@2 db1@5 ~ d1@5 ~",
  AX: "bb1 ~@2 bb1 ~@2 ab1 ~@2 bb1 ~@5 bb1@2 ~ ab1@2 ~ f1 ~@2",
  AY: "bb0@2 ~ bb1 ~@2 c1@2 ~ c2 ~@2 db1@3 db2 ~@2 d1@3 d2 ~@2", AZ: "eb1@2 gb1 ~ bb1@2 bb1 eb2",
  BA: "eb2@6 bb1@5 ~ eb1@2 ~ eb1@2 ~ eb1@2 ~ g1@2 ~", BB: "ab1@6 eb1@5 ~ ab1@2 ~ eb1@2 ~ eb1@2 ~ d1@2 ~",
  BC: "eb1@4 ~ f1 f1@4 ~ gb1 gb1@4 ~@2 bb1 ~@4 eb2", BD: "d2@4 ~@2 d2@5 ~ d2@3 c2@3 bb1@3 c2@3",
  BE: "eb1@5 ~ bb1@4 ~@2 gb1@3 eb1@3 ~@6", BF: "ab1@2 ~ ab1@2 ~ gb1@2 ~ ab1@2 ~@4 db2@3 ~@3 b1@3",
  BG: "db2@2 ~ db2@2 ~ b1@3 db2@2 ~@4 db1@2 ~ f1@2 ~@4", BH: "gb1@13 ~@2 b0@3 db1@3 ~@3",
  BI: "eb1 ~@2 eb1@2 ~ db1@2 ~ eb1@2 ~@4 eb1@2 ~ gb1@2 ~@4",
  BJ: "ab1@2 ~ ab1@2 ~ gb1@2 ~ ab1@2 ~@4 eb1@2 ~ gb1@2 ~ ab1@2 ~", BK: "a1 ~@2 a1@2 ~ ab1@2 ~ a1@2 ~@4 a1@2 ~@4 a1 ~@2",
  BL: "bb1@2 ~ bb1@2 ~ ab1@2 ~ ab1 ~@2 gb1 ~@2 gb1 ~@2 f1 ~@2 f1@2 ~",
  BM: "eb1 ~@2 eb1@2 ~ db1@2 ~ eb1@2 ~@4 eb1@2 ~@4 gb1@2 ~",
  BN: "ab1@2 ~ ab1@2 ~ gb1@2 ~ ab1@2 ~@4 ab1@2 ~ eb1 ~@2 eb1@2 ~",
  BO: "db1 ~@2 db1@2 ~ b0@2 ~ db1@2 ~@4 db1@3 f1@2 ~ ab1@3", BP: "gb1 ~@2 gb1@2 ~ bb0@6 db1@6 gb1@5 ~",
  BQ: "eb1 ~@2 eb1@2 ~ db1@2 ~ eb1@2 ~@4 eb1@2 ~@4 bb1@3", BR: "ab1@2 ~ ab1@2 ~ gb1@2 ~ ab1@2 ~@4 eb1@3 gb1@3 ab1@3",
  BS: "a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~@4 a1@3 ~@3 a1@2 ~",
  BT: "bb1 ~@2 bb1@2 ~ f2@2 ~ bb2@2 ~ bb1@2 ~ bb1@3 bb0@6, ~@11 f2@2 ~@11", BU: "a1@7 ~@2 a1 ~ a1 a1@8 ~ a1 ~@2",
  BV: "bb1@2 ~ bb2@2 ~ bb1@2 ~ bb2@2 ~ bb1@3 ab1@3 gb1@3 f1@3",
  BW: "eb1@3 eb2 ~@2 f1@2 ~ f2 ~@2 gb1@2 ~ gb2 ~@2 bb1@3 bb2 ~@2",
  BX: "ab1@2 ~ ab2 ~@2 gb1@3 gb2 ~@2 ab1@2 ~ ab2 ~@5 eb1@3",
  BY: "db1@3 db2 ~@2 eb1@3 eb2 ~@2 f1@3 f2 ~@2 ab1@2 ~ ab2 ~@2",
  BZ: "gb1@3 gb2 ~@2 db1@3 db2@2 ~ gb2@3 bb1@3 b1@3 db2@3",
  CA: "eb1@3 eb2 ~@2 f1@2 ~ f2 ~@2 gb1@3 gb2 ~@2 bb1@3 bb2 ~@2",
  CB: "ab1@3 ab2 ~@2 gb1@3 gb2 ~@2 ab1@3 ab2 ~@2 ab1@2 ~ ab2 ~@2", CC: "a1@3 a2@3 a1@3 a2@2 ~ a1@3 a2@2 ~@7",
  CD: "bb1@3 bb2 ~@2 bb0@3 bb1@2 ~ c1@2 ~ c2@2 ~ db1@3 db2@2 ~",
  CE: "eb1@2 ~ eb2 ~@2 f1@3 f2 ~@2 gb1@3 gb2 ~@2 bb1@3 bb2 ~@2",
  CF: "ab1@3 ab2 ~@2 bb1@3 bb2 ~@2 b1@3 b2 ~@2 ab1@3 ab2 ~@2",
  CG: "bb1@3 bb2 ~@2 bb1@3 bb2 ~@2 bb1@3 bb2 ~@2 bb1@2 ~ bb2 ~@2",
  CH: "eb1@3 eb2 ~@2 f1@3 f2 ~@2 gb1@3 gb2 ~@2 f1@3 f2 ~@2", CI: "ab1@2 ~ ab2 ~@2 gb1@3 gb2 ~@2 ab1@3 ab2 ~@5 eb1@3",
  CJ: "eb1@3 eb2 ~@2 f1@3 f2 ~@2 gb1@3 gb2 ~@2 f1@2 ~ f2 ~@2", CK: "eb1 ~",
})).s("gm_piano").gain(0.26)

// chords · piano
const piano_2 = note("<~@6 A ~@41 B ~ B ~ B ~@10 C@2 ~@15 D@2 ~@13 C@2 ~@56>".pickRestart({
  A: "~@9 eb5@5 ~@10, ~@5 [eb3,gb3]@3 [gb4,bb4]@4 ~@12, ~@3 bb3@2 ~@7, ~@7 eb4@3 ~@14", // Ebm Gb
  B: "~@12 eb5@5 ~@7, ~@8 [eb3,gb3]@3 [gb4,bb4]@4 ~@9, ~@9 bb3@4 ~@11, ~@10 eb4@3 ~@11", // Ebm Gb
  C: "[~@8 gb5 ~@7, ~@19 eb3@2 eb4@2 [bb4,eb5]@3 ~@22, ~@20 [gb3,bb3]@2 gb4@3 ~@23]/2", // Eb5 Gb
  D: "[~@8 eb5 ~@7, ~@20 [eb3,gb3]@2 eb4@3 ~@23, ~@21 bb3@2 [gb4,bb4]@3 ~@22]/2", // Ebm Gb
})).s("gm_piano").gain(0.26)

// chords · piano
const piano_3 = note(`<
  ~@7 A B@2 C@2 D@2 E F G@2 H@2 D@2 E F I J K L M N O P Q J K L M N O P G@2 C@2 D@2 E F G@2 C@2 D@2 E F R S T U V W E J
  X S T U V W E J Y Z Y AA AB@2 Y AC I J K L M N O P Q J K L M N O P AD AE AF AG AH AI AJ AK AD AL AF AG AH AM AJ AK AD
  AE AF AG AH AM AJ AK AD AE AF AG AH AI AJ AK AN AO AP AQ AR AS AT AU AD AE AF AG AH AM AJ AK AN AO AP AQ AR AS AT AU Q
>`.pickRestart({
  A: "~@3 eb3@2 f3 [gb3,ab3] bb3 b3 [db4,eb4] f4 gb4 [ab4,bb4] b4 db5 eb5 [f5,gb5] ab5 [bb5,b5] db6 [eb6,f6] gb6 [ab6,bb6] [b6,db7]", // Gbsus2 Dbsus2 Absus2 Gbmaj7 Bmaj7 Ebsus2 Absus2 Bsus2
  B: "[[gb4,bb4,eb5]@28 ~@8 [f4,ab4,db5]@11 ~, eb7 ~@3]/2", C: "[[gb4,b4,eb5]@33 ~@3 [f4,bb4,db5]@11 ~]/2",
  D: "[[gb4,ab4,b4,eb5]@11 ~ [gb4,ab4,b4,eb5]@3 ~]/2", E: "[bb4,eb5,f5]@11 ~", F: "[ab4,bb4,d5,f5]",
  G: "[[gb4,bb4,eb5]@28 ~@8 [f4,ab4,db5]@11 ~]/2", H: "[[gb4,b4]@33 ~@3 [f4,bb4,db5]@11 ~, eb5@31 ~@17]/2",
  I: "[gb4,bb4,eb5]@23 ~", J: "[bb4,d5,f5]@11 ~", K: "[bb4,db5,g5]@11 ~", L: "[eb5,g5,bb5]@9 [b4,eb5,ab5]@14 ~",
  M: "[ab4,db5,f5]@11 ~", N: "[db5,f5,ab5]@9 [bb4,db5,gb5]@13 ~@2", O: "[a4,c5,gb5]@11 ~",
  P: "[bb4,d5,f5]@5 [f4,bb4] ab4 [a4,d5], ~@18 db5@5 ~", Q: "[gb4,bb4,eb5]@7 ~", R: "[ab4,b4,eb5,gb5]@11 ~",
  S: "[ab4,b4,db5,f5]@11 ~", T: "[gb4,bb4,db5,f5]@7 ~", U: "[gb4,bb4,b4,eb5]@11 ~", V: "[gb4,ab4,b4,eb5]@11 ~",
  W: "[gb4,a4,c5,eb5]@7 ~", X: "[ab4,b4,eb5,gb5]@23 ~",
  Y: "~@3 [f6,bb6] ~@2 [f6,bb6] ~@2 [f6,bb6] ~@2 [f6,bb6] ~@2 [f6,bb6] ~@2 [f6,bb6] ~@2 [f6,bb6] ~@2", // Bb5
  Z: "[f6,bb6] ~@2 [bb5,f6]@3 eb6@3 bb5@3 db6@6 d6@4 ~@2, ~@3 ab5@7 ~@2 [ab5,bb5]@10 ~@2", // Bb5 Absus2
  AA: "[eb6,ab6]@3 [f6,bb6] ~@2 [f6,bb6] ~@2 [eb6,ab6]@3 [f6,bb6] ~@2 [f6,bb6] ~@2 [eb6,ab6]@3 [f6,bb6] ~@2, f6 ~@8 f6 ~@8 f6 ~@5", // Ab5 Bb5 Ab5 Bb5 Ab5 Bb5
  AB: "[[f5,bb5] ~@2 [f5,bb5] ~@2 [f5,bb5] ~@2 [f5,bb5] ~@2 [f5,bb5] ~@2 [f5,bb5] ~@2 [f5,bb5] ~@5 d6@6 ~@3 bb5@3 f5@6 ab5@4 ~@2, ~@21 [bb5,f6]@7 ~@20, ~@21 ab5@5 ~@22]/2", // Bb5
  AC: "bb4@3 bb5@2 ~ c5@2 ~ c6@2 ~ db5@3 db6@2 ~ d5@2 ~ d6@2 ~", AD: "[gb5,bb5,eb6]@7 ~", AE: "[gb5,ab5,b5,eb6]@23 ~",
  AF: "[f5,db6]@7 ~, ab5@23 ~", AG: "[db5,gb5,bb5]@7 ~", AH: "[b4,eb5,gb5,bb5]@23 ~", AI: "[b4,eb5,gb5,ab5]@7 ~",
  AJ: "[c5,eb5,gb5,a5]@7 ~", AK: "[eb5,f5,bb5] [d5,f5,bb5]", AL: "[gb5,ab5,b5]@23 ~, eb6@7 ~",
  AM: "[eb5,gb5]@11 ~, [b4,ab5]@5 ~", AN: "[gb5,bb5,eb6] ~@2 [gb5,bb5,eb6]@9 ~@3 gb6 ~@4 bb6 ~@3",
  AO: "[b5,eb6,gb6,ab6]@3 ~", AP: "[ab5,bb5,db6] ~@2 [ab5,bb5,db6,f6]@18 ~@3", AQ: "[gb5,bb5,eb6]@3 ~",
  AR: "[bb5,db6,eb6,gb6]@11 ~", AS: "[b5,eb6,gb6,ab6] ~@23", AT: "[c5,eb5,gb5,a5]@11 ~",
  AU: "[eb5,f5,bb5] f5, bb4@11 ~, ~@6 d5@5 ~, ~@12 bb5 ~@11", // Ebsus2
})).s("gm_piano").gain(0.2)

// other · trumpet
const trumpet = note("<~@8 A B@2 C@2 ~@3 D E@2 F@2 ~@19 G H@2 I@3 ~@2 J K@2 L@2 ~@100>".pickRestart({
  A: "[eb4,eb5]@8 ~@4 [f4,f5] ~@2 [gb4,gb5] ~@5 f5@2 ~, ~@21 f4 ~@2", // Eb F Gb
  B: "[~@3 [eb4,eb5]@2 ~@4 [f4,f5]@4 ~@2 gb5@2 ~@4 [eb4,eb5]@12 ~@3 f4@2 ~ gb5@2 ~@4 [f4,f5] ~@2, ~@15 gb4 ~@20 f5 ~@2 gb4 ~@8]/2", // Eb F Eb F
  C: "[~@3 [eb4,eb5] ~@5 [f4,f5]@2 ~@4 gb5@2 ~@4 [eb4,eb5]@20 ~@7, ~@15 gb4 ~@32]/2", // Eb F Eb
  D: "[eb4,eb5]@10 ~@2 [f4,f5] ~@2 [gb4,gb5] ~@5 f5@2 ~, ~@21 f4 ~@2", // Eb F Gb
  E: "[~@3 eb5@2 ~@4 [f4,f5]@3 ~@3 [gb4,gb5] ~@5 [eb4,eb5]@13 ~@2 [f4,f5] ~@2 [gb4,gb5] ~@5 f5@2 ~, ~@3 eb4 ~@41 f4 ~@2]/2", // F Gb Eb F Gb
  F: "[~@3 [eb4,eb5] ~@5 [f4,f5] ~@5 [gb4,gb5] ~@5 [eb4,eb5]@20 ~@7]/2", // Eb F Gb Eb
  G: "[eb4,eb5]@9 ~@3 [f4,f5] ~@2 [gb4,gb5] ~@5 f5@2 ~, ~@21 f4 ~@2", // Eb F Gb
  H: "[~@3 [eb4,eb5] ~@5 [f4,f5]@2 ~@4 [gb4,gb5] ~@5 [eb4,eb5]@13 ~@2 [f4,f5] ~@2 [gb4,gb5]@2 ~@4 [f4,f5] ~@2]/2", // Eb F Gb Eb F Gb F
  I: "[~@3 [eb4,eb5] ~@5 [f4,f5]@2 ~@4 [gb4,gb5] ~@5 [eb4,eb5]@32 ~@19]/3", // Eb F Gb Eb
  J: "[eb4,eb5]@10 ~@2 [f4,f5] ~@2 [gb4,gb5] ~@5 [f4,f5] ~@2", // Eb F Gb F
  K: "[~@3 [eb4,eb5] ~@5 [f4,f5]@2 ~@4 [gb4,gb5] ~@5 [eb4,eb5]@14 ~ [f4,f5] ~@2 gb4@2 ~@4 [f4,f5]@2 ~, ~@39 gb5 ~@8]/2", // Eb F Gb Eb F
  L: "[~@3 [eb4,eb5] ~@5 [f4,f5]@2 ~@4 [gb4,gb5] ~@5 [eb4,eb5]@23 ~@4]/2", // Eb F Gb Eb
})).s("gm_trumpet").gain(0.46)

// chords · piano
const piano_4 = note(`<
  ~@40 A@8 B@8 C D@2 E F@2 G@2 C D@2 E F@2 H@2 ~ I J I J K L ~@17 M@2 N@2 O@4 M@2 N@2 O@4 M@2 N@2 O@4 M@2 N@2 O@4 P Q R
  S P T U V M@2 N@2 O@4 P Q R S P T U V W
>`.pickRestart({
  A: "[[eb3,gb4,bb4,eb5]@35 ~ [eb3,eb5,eb6]@3 [f3,f4,db5,db6]@2 ~@4 [gb3,bb4,bb5]@37 ~@2 [eb3,eb5,eb6]@3 [f3,f4,db5,db6]@2 ~@5 gb3@36 ~@2 [b3,eb4,gb5]@2 ~ [db4,f4,ab4] ~@5 [d4,f4,bb4]@37 ~@14, eb6@30 ~@6 [gb4,bb4]@2 ~ ab4 ~@5 [eb4,gb4]@35 ~@4 [gb4,bb4]@2 ~ ab4 ~@5 [eb4,gb4,bb4,bb5]@37 ~@2 [gb3,gb4]@3 [ab3,ab5]@2 ~@4 bb5@42 ~@9, ~@141 bb3@29 ~@22]/8", // Ebm Eb Db Gb Eb Db B Db …
  B: "[[eb3,gb4,bb4,eb5]@35 ~ [eb3,eb5,eb6]@3 [f3,f4,db5,db6]@2 ~@4 [gb3,bb4,bb5]@37 ~@2 [eb3,eb5,eb6]@3 [f3,f4,db5,db6]@2 ~@5 gb3@36 ~@2 [b3,eb4,gb5]@2 ~ [db4,f4,ab4] ~@5 [d4,f4,bb4]@37 ~@2 [eb4,eb5]@4 [f4,f5]@4 [gb4,gb5]@4, eb6@30 ~@6 [gb4,bb4]@2 ~ ab4 ~@5 [eb4,gb4]@35 ~@4 [gb4,bb4]@2 ~ ab4 ~@5 [eb4,gb4,bb4,bb5]@37 ~@2 [gb3,gb4]@3 [ab3,ab5]@2 ~@4 bb5@39 ~@12, ~@47 bb3@10 ~@7]/8", // Ebm Eb Db Gb Eb Db B Db …
  C: "[gb4,gb5]@11 ~ [gb4,gb5]@3 [eb4,eb5]@2 ~@7, eb4@5 ~@3", D: "[~@36 db5@3 bb4@2 ~@4 gb4@3, f4]/2", E: "gb4 ~",
  F: "eb4/2",
  G: "[~@2 [bb4,bb5]!2 ~@2 [bb4,bb5]@3 [bb4,bb5] ~@2 [bb4,bb5]@5 ~@3 [bb4,bb5] ~@3 [bb4,bb5]@10 ~@2 [eb4,eb5]@4 [f4,f5]@4 [gb4,gb5]@4, f4@5 ~]/2", // Bb Eb F Gb
  H: "[~@2 [bb4,bb5]!2 ~@2 [bb4,bb5]@3 [bb4,bb5] ~@2 [bb4,bb5]@7 ~ [bb4,bb5] ~@2 bb5@9 ~ [bb4,bb5] ~@2 [bb4,bb5]@7 ~@2 [bb4,bb5]@2 ~, f4@15 ~, ~@22 bb4@9 ~@17]/2", // Bb
  I: "~@2 [db4,db5] [d4,d5], ~ [ab4,bb4]", // Db D Absus2
  J: "[bb3,f4]@3 ~@12 [ab3,eb4,f4,bb4]@3 [bb3,eb4,f4]@2 ~@4, [d4,bb4] ~@17 bb4 ~@5", // Bb5 Absus2 Bbsus4 Gm
  K: "~@3 [ab4,bb4,d5,f5] ~@5 [ab4,bb4,d5,ab5]@3 [db4,db5]@6 [d4,d5]@6, ~ [ab4,bb4]", // Bb7 Db D Absus2
  L: "[bb3,f4]@3 [f5,bb5]@3 [f5,bb5] ~@8 [ab3,f4,bb4,ab5]@3 [bb3,eb4,f4]@2 ~@4, [d4,bb4] ~@14 [eb4,eb5]@2 ~ [bb4,f5,bb5] ~@5", // Bb5 Bb7 Bbsus4 Gm Eb Bb5
  M: "[[bb4,bb5]@12 [gb4,gb5]@3 [eb4,eb5] ~@5 [b4,eb5,ab5,b5]@27]/2", // Bb Gb Eb Abm
  N: "[~@6 [b4,b5]@9 [eb5,eb6] ~@5 [db5,gb5,bb5,db6]@25 ~@2]/2", // B Eb Gb
  O: "[[bb4,bb5]@12 [gb4,gb5]@3 [eb4,eb5] ~@5 [ab4,b4,eb5,ab5]@29 ~@4 [gb4,gb5]@8 ~ [gb4,gb5] ~@5 [f4,bb4,d5,f5]@26 ~]/4", // Bb Gb Eb Abm Gb Bb
  P: "~@3 [bb4,eb5,gb5]@4 ~@17", Q: "~@15 [b4,eb5,gb5,ab5]@7 ~@2", R: "~@9 [bb4,db5,f5,ab5]@4 ~@11",
  S: "~@15 [bb4,eb5,gb5]@7 ~@2", T: "~@5 [ab4,b4,eb5,gb5]@3", U: "[a4,c5,eb5,gb5] [a4,c5,eb5]",
  V: "[bb4,d5,f5,ab5,bb5]", W: "[eb4,eb5,gb5,bb5,eb6]@11 ~",
})).s("gm_piano").gain(0.2)

// drums · kick
const kick = s("bd").struct("<A@7 B A@15 B A@7 B A@23 B A@15 B A@15 B A@47 C A@15 C D>".pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x ~ x!6", D: "x",
})).gain(0.36)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@15 A ~@23 B ~@7 A ~@47 C ~@23 D ~@7 D ~@7 E ~@7 D ~@7 E ~>".pickRestart({
  A: "~@5 x!2 ~", B: "~@15 x ~@2 x ~@2 x ~ x", C: "~@15 x ~@2 x ~ x!2 ~@2", D: "~@18 x ~ x!2 ~ x", E: "~@6 x!2",
})).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A@5 B C D E@5 ~ E@7 ~ A@7 F A@7 F C D E@5 ~ E@6 ~ G H A@5 ~@2 A@6 ~@2 H ~@3 A@3 ~ I A@6 F I A@6 F E ~@5 G@2 ~@7 G
  J K L M L M L ~ J N@7 J N@7 J K L M L M L ~ J N@7 ~
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x!2 ~ x", C: "x", D: "x ~@3 x ~@2 x", E: "~@7 x", F: "x!2 ~ x ~ x ~ x", G: "~ x ~ x ~ x ~ x",
// … 68 more lines

More by Claude Francois