Strudelify
Melodie d'Amour cover art

1989 · Lambada - Les originaux No. 1 de l'été (Original 1989)

Melodie d'Amour

Kaoma

KeyB♭ minorTempo122 bpm
0:00/0:00
// Melodie d'Amour — Kaoma
// 122 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 130 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(122/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, A@4 for four bars: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@3 A B C D A B E F G H A B C A@2 B C I J K A B C L M N O P A Q O R S N T A@2 U C I J K A U C M Q O P A V C H A B C D
  A B E F G H W N T A@2 U C I J K A U C M Q O P A V C H W N O P A X Y M Q O P A V C H M Q O P A V C H M Q O P A V C H M
  Q O P A V C H W Q Z ~
>`.pickRestart({
  A: "bb2@2 f2@2 bb2@2 f2 bb2", B: "eb2@2 bb2@2 eb2@2 bb2 eb2", C: "f2@2 c2@2 f2@2 c2 f2", D: "bb2@4 f2@4 bb2@3 bb2@5",
  E: "f2@2 c2@2 f2@2 f2!2", F: "db3@4 ab3@4 db3@3 ~ db3@2 db3@2", G: "eb3 gb3 f3 a3", H: "bb2 f2 bb2!2",
  I: "bb2@2 f2@2 bb2@2 f2!2", J: "ab2 eb2 ab2 eb2", K: "db2!2 c2!2", L: "bb2@4 bb2@2 bb2@2 db3@3 ~ bb2@4",
  M: "bb2@4 f2@4 bb2@4 bb2@3 bb2", N: "eb3@2 bb2@2 eb3@2 bb2 eb3", O: "f3 c3 f3 c3", P: "bb2@2 f2@2 bb2 db3 c3 bb2",
  Q: "eb3@4 bb2@4 eb3@4 bb2@2 bb2 eb3", R: "bb2 f3 bb2!2", S: "bb2@3 ~ f3@4 bb2@4 f3@2 bb2 ~",
  T: "f3@2 c2@2 f3@2 c2 f3", U: "eb3@2 bb2@2 eb2@2 bb2 eb2", V: "eb2@4 bb2@4 eb2@3 bb2 bb2@2 eb2 bb2", W: "bb2 ~@7",
  X: "eb2@4 bb2@4 eb2@4 bb2@2 bb2 eb2", Y: "f2 c2 f2 c2", Z: "f3 ~@6 bb2",
})).s("gm_acoustic_bass").gain(0.56)

// other · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B A C A ~ D A ~ A E A F A ~ A F A ~ G A ~ A F ~@2 A ~ A F A ~ D A F A ~ A F A ~ G A ~ A F A@2 ~ A F A ~ G A@2 F A
  ~ D ~@2 A F A ~ A ~ A F A ~ G A ~ A F ~@4 F ~@2 H A ~ A ~ A F A ~@4 F ~@2 H A ~@3 F ~@2 H A ~@11 F ~@2 H A ~ A ~@2
>`.pickRestart({
  A: "~@3 bb5@2 ~@11", B: "~@7 bb5@2 ~@7", C: "~@6 b5 ~ b5!2 ~@6", D: "~@3 bb5@2 ~@4 b5 ~ b5!2 bb5@2 ~",
  E: "~@9 b5 ~@2 b5 ~@3", F: "~@9 b5 ~@6", G: "~@3 bb5@2 ~@4 b5 ~@3 bb5@2 ~", H: "~@9 b5 ~@3 bb5@2 ~",
})).s("gm_piano").gain(0.16)

// other · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  ~@16 A ~@8 B ~@52 B@2 ~ B ~ B ~ B ~@8 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@9 B ~ B ~ B ~ B ~@5
>`.pickRestart({
  A: "~@13 bb5@2 ~", B: "~@3 bb5@2 ~@11",
})).s("gm_piano").gain(0.08)

// other · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note("<~@36 A B@2 C@3 ~ D@2 E F G ~@9 H ~ I@2 J@2 ~@67>".pickRestart({
  A: "~@10 f4@3 gb4@3", B: "[ab4@3 f4@2 f4!3 ~@14 db5 c5@2 bb4@2 ab4@2 bb4 gb4@2, ~@4 f4@11 ~]/2",
  C: "[f4@21 ~@2 eb5 eb5@3 ~ eb5 c5@2 ~ c5@4 ab4@4 f4@8, ~@31 db5@2 ~@15]/3",
  D: "[~@2 f4@6 eb4@2 f4@11 eb4@3 eb4@3 db4@3 eb4@2]/2", E: "~ f4@11 f4@4", F: "eb4@13 ~ bb3 c4",
  G: "db4 f4 gb4 ~ gb4@4 f4@8", H: "~@2 gb4 bb4 db5@2 gb4 bb4 eb5@7 ~", I: "[~@6 db5 c5 bb4 ab4 ab4@2 ~@2 f4@14 ~@4]/2",
  J: "[~@3 db5!2 db5@2 db5!2 db5@2 db5!2 c5 ~ c5@16 ~]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.44)

// other · acoustic guitar nylon · "NYLON GTR" · soft notes
const acoustic_guitar_nylon_2 = note("<~@42 A ~@16 B ~ C ~@48 D ~ D E D ~ F D ~@12>".pickRestart({
  A: "c5", B: "~@6 gb4 ~", C: "~@3 bb4!2 ~@11", D: "~@3 bb5@2 ~@11", E: "~@9 b5 ~@6", F: "~@3 bb5@2 ~@4 b5 ~@3 bb5@2 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.15)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@3 A B C D A B C E F G ~@22 G B H I G B J I K L A M N O B N I O B N I A B C D A B C E F G ~@64
>`.pickRestart({
  A: "[bb4,db5,f5]", B: "[eb5,gb5,bb5]", C: "[c5,f5,a5]", D: "[c5,db5,f5,ab5]", E: "[db5,f5,ab5]",
  F: "[eb5,gb5,bb5] [c5,f5,a5]", G: "[db5,f5,bb5]", H: "[a4,eb5,a5]", I: "[db5,f5,c6]", J: "[eb5,f5,a5,c6]",
  K: "[ab4,bb4,c5,eb5,f5]", L: "~ c5, [ab4,db5,eb5,f5]", M: "[bb4,eb5,gb5,bb5]", N: "[c5,eb5,f5,a5]",
  O: "[db5,f5,c6] [d5,f5,ab5,c6]", // Dbmaj7 Dm7b5
})).s("gm_epiano2").gain(0.52)

// chords · accordion
const accordion = note(`<
  ~@2 A B C D E F G D H I J ~ K@2 L@2 M@2 N O P Q R S T U V W X Y Z AA AB ~@13 AC AD AE AF AC AG AH AI B C D AJ AK@2
  AL@4 ~@7 AM AN@2 AO@2 AP AC AD AE AF AC AG AH AQ AR AS AT X AR AU AV AW AD AE AF AC AG AH AQ AC AD AE AF AC AG AH AQ
  AC AD AE AF AC AG AX AQ AC AD AE AF AC AG AH AQ AR AS AY ~
>`.pickRestart({
  A: "~@10 f4@2 ~ a4 bb4 c5, ~@6 ab4 ~", B: "db5@2 c5 ~ c5@2 bb4 ~ bb4@2 ab4@2 ab4@2 gb4 ~", C: "gb4@6 db4 eb4",
  D: "c5@2 bb4 ~ bb4@2 a4@2 a4@2 f4 ~ f4@2 eb4 ~", E: "eb4@2 f4@11 ~ f4@2",
  F: "db5@2 c5 ~ c5 bb4 ~ bb4@2 ~ [c5,db5] ~ ab4@2 gb4@2, ~@5 ab4 ~@2", G: "gb4@6 d4 eb4",
  H: "eb4@2 db4@8 gb3 ab3 bb3 c4 db4 eb4", I: "ab4@2 gb4 ~ gb4@2 f4@2 f4@2 eb4 ~ eb4@2 f4@2", J: "bb3@11 ~@5",
  K: "[~@4 c5 db5 eb5 f5@6 ~@3, ~@3 eb5 ~@12, ~@7 db5@2 ~@23]/2",
  L: "[~@4 db5 c5 ~ a4 f4 gb4 eb4@2 e4@2 f4@6 ~@4 f4@4 f5@4, ~@3 bb4 ~@12]/2",
  M: "[eb5@6 db5 db5@2 c5@2 eb5 eb5@12 ~@8]/2", N: "~@10 ab4 a4 bb4 b4 c5 db5", O: "ab5 ~@5 bb5 ~@5 b5 ~@3",
  P: "c6 ~@5 db6 ~@5 ab4@2 gb4@2", Q: "f4@3 c5 ~@2 db5 ~", R: "d5@2 ~@4 eb5@2 ~@4 bb4 b4 c5 db5", S: "gb5 ~ f5@7 ~@7",
  T: "~@6 bb3 b3 c4 db4 eb4 e4 f4!2 bb4!2", U: "bb4 f5 db5 bb4 gb5 f5 db5 bb4 f4 f5 ~ f5 gb5 ~ gb5 f5",
  V: "eb5!2 f5@7 ~ a4 ~@2 db5 c5 bb4, ~@11 bb4@2 ~@3, ~@6 eb5 ~",
  W: "a4 c5 ~ eb5@2 db5 [bb4,c5] ~ a4 c5 gb4 f4 eb4@2 f4 ~", // Bbsus2
  X: "[g4,ab4,db5] [g4,ab4,db5]@2 f4 [g4,ab4,db5]@2 f4 [g4,ab4,db5]@2 f4 [g4,ab4,db5]@6", // Db
  Y: "bb4 ~@2 bb4 gb5 f5 db5 bb4 f4 f5 ~ f5 gb5@3 f5, ~ f5@2 ~@13, ~ db5 ~@6",
  Z: "eb5 ~ eb5@6 ~ f5 eb5 db5 c5 bb4 [a4,c5] ~", AA: "a4@3 gb4@3 f4@4 c5@4 bb4@2, ~@5 eb6 ~@2", AB: "c5@3 bb4 c5@11 ~",
  AC: "~@2 [bb4,db5,f5]!3 ~ [bb4,db5,f5] ~ [bb4,d5,f5,ab5]@2 ~ [bb4,d5,f5,ab5]@2 ~ [bb4,d5,ab5] ~, ~@7 f5", // Bbm Bb7
  AD: "[bb4,eb5,gb5] ~@3", AE: "~@2 [f4,a4,c5,eb5]!3 ~ [f4,a4,c5,eb5] ~ [f4,a4,c5,eb5]@2 ~ [f4,a4,c5,eb5]@2 ~ f5 ~",
  AF: "[bb4,eb5,gb5]@2 ~ f5@2 ~ eb5@2 [bb4,db5,f5]@4 ~@4", AG: "[bb4,eb5,gb5]@3 ~@13",
  AH: "~@2 [f4,a4,c5,eb5]!3 ~ [a4,c5]@2 [f4,a4,c5,eb5]@2 ~ [f4,a4,c5,eb5]@2 ~ [a4,c5,eb5] ~, ~@6 [f4,eb5] ~@6 f4@2 ~", // F7 Am F7 Adim F7
  AI: "[f4,bb4,db5,f5]@8 ~@2 f4@2 ~ a4 bb4 c5, ~@6 ab4 ~", AJ: "eb4@4 f4@10 f4 ~",
  AK: "[db5@3 ~ db5 ~ c5@2 bb4 bb4@2 ab4 ~ ab4@2 gb4@2 gb4@11 d4@2 eb4@2, ~@3 c5@3 ~@26]/2",
  AL: "[c5@2 bb4@2 ~ bb4 a4 ~ a4@2 f4@3 f4@2 eb4@2 eb4@2 ~ db4@6 gb4 [ab4,a4] bb4 c5 ~@2 ab5@2 gb5@2 ~ gb5 f5 ~@2 gb5 ~ eb5 ~ eb5@2 f5@2 bb4@10 ~@5, ~@31 db5@2 ~@7 f5@3 ~@21]/4", // Amaj7
  AM: "~@10 gb4 g4 ab4 bb4 b4 c5", AN: "[ab5 ~@2 bb5 ~@2 b5 c6@2 db6 ~ db6 ~ ab4 ~ gb4]/2",
  AO: "[f4@4 ~@2 c5 ~ c5@4 db5@2 d5@8 eb5 ~@3 eb5@2 bb4 b4 c5 db5]/2", AP: "gb5 ~ gb5@4 f5@8 ~@2",
  AQ: "[f4,bb4,db5,f5] ~", AR: "bb4 f5 db5 bb4 gb5 f5 bb4 db5 f4 f5 ~ f5 gb5@3 f5", AS: "eb5 [eb5,eb6]@8 ~@7",
  AT: "a4 bb4@2 eb5@2 db5 c5 bb4 a4 c5 gb4 eb4@2 ~ f4@2, ~@11 f4 ~@4", AU: "[eb5,eb6]@5 ~ [db5,db6]@5 ~ [c5,c6]@3 ~",
  AV: "[g4,ab4] gb4 f4@2 b4 bb4 a4 ~ eb5 db5 c5 ~ [ab4,ab5] ~ [gb4,gb5] ~, ~@2 c5 ~ d5 ~@3", // Abmaj7 Ab Gb
  AW: "f5@2 [bb4,db5,f5]!3 ~ [bb4,db5,f5] ~ [bb4,d5,ab5]@2 ~ [bb4,d5,f5,ab5]@2 ~ [bb4,d5,ab5] ~, f4@8 f5 ~@5 f5@2", // Bbm Bb7
  AX: "~@2 [f4,a4,c5,eb5]!3 ~ [a4,c5,eb5]@2 [f4,a4,c5,eb5]@2 ~ [f4,a4,c5,eb5]@2 ~ [a4,c5,eb5] ~, ~@6 f4 ~@6 f4@2 ~", // F7 Adim F7 Adim
  AY: "a4 bb4@2 eb5@2 db5 c5 bb4 a4 c5 gb4 a4@2 ~ [bb4,db5,f5,g5,bb5]@2, ~@11 f4 ~@4", // Gm7b5
})).s("gm_accordion").gain(0.52)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  ~@3 A B C A@2 B C D E A@2 B C A@2 B C F G H I J C K L J M N O J P Q R B C A@2 B C F G H I J C L J M N O J P S A B C
  A@2 B C D E A ~ B C A@2 B C F G H I B T L J M U V J P W ~ J P U V J P L J M X V J P W L J M X V J P W L J M X V J P W
  L J M X V J P W Y J Z ~
>`.pickRestart({
  A: "~@2 [f4,bb4,db5]@3 ~ [f4,bb4,db5]@3 ~ [f4,bb4,db5]@3 ~ [f4,bb4,db5]@2", // Bbm
  B: "~@2 [eb4,gb4,bb4]@3 ~ [eb4,gb4,bb4]@3 ~ [eb4,gb4,bb4]@2 f4@2 [eb4,gb4,bb4]@2", // Ebm
  C: "~@2 [c4,f4,a4]@3 ~ [c4,f4,a4]@3 ~ [c4,f4,a4]@3 ~ [c4,f4,a4]@2", // F
  D: "~@2 [db4,f4,ab4]@3 ~ [db4,f4,ab4]@3 ~ [db4,f4,ab4]@3 ~ [db4,f4,ab4]@2", // Db
  E: "~@2 [eb4,gb4,bb4]@3 ~ [eb4,gb4,bb4]@3 ~ [c4,f4,a4]@3 ~ [c4,f4,a4]@2", // Ebm F
  F: "~@2 [f4,bb4,db5]@3 ~ [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~ [db4,f4,bb4]@2", // Bbm
  G: "~@2 [eb4,ab4,c5]@3 ~ [eb4,ab4,c5]@3 ~ [eb4,ab4,c5]@3 ~ [eb4,ab4,c5]@2", // Ab
  H: "~@2 [f4,ab4,db5]@3 ~ [db4,f4,ab4]@3 ~ [db4,f4,ab4]@3 ~ [db4,f4,ab4]@2", // Db
  I: "~@2 [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~ [db4,f4,bb4]@2", // Bbm
  J: "~@2 [eb4,gb4,bb4]@3 ~ [eb4,gb4,bb4]@3 ~ [eb4,gb4,bb4]@3 ~ [eb4,gb4,bb4]@2", // Ebm
  K: "~@2 [f4,bb4,db5]@3 ~ [db4,f4,bb4]@3 ~ [f4,bb4,db5]@3 ~ [f4,bb4,db5]@2", // Bbm
  L: "~@2 [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~ [d4,f4,bb4]@3 ~ [d4,f4,bb4]@2", // Bbm Bb
  M: "~@2 [c4,f4,a4]@3 ~ [c4,f4,a4]@3 ~ [f4,a4,db5]@3 ~ [f4,a4,db5]@2", // F Faug
  N: "~@2 [db4,f4,bb4]@3 ~ [f4,bb4,db5]@3 ~ db4 ~ c4 ~ bb3 ~", // Bbm
  O: "bb3 ~ [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~ [d4,f4,bb4]@3 ~ [d4,f4,bb4]@2", // Bbm Bb
  P: "~@2 [f4,a4,c5]@3 ~ [f4,a4,c5]@3 ~ [f4,a4,db5]@3 ~ [f4,a4,db5]@2", // F Faug
  Q: "~@2 [db4,f4,bb4]@3 ~ [f4,bb4,db5]@3 ~ [f4,bb4,db5]@2 db4 ~ c4 ~", // Bbm
  R: "bb3@2 [f4,bb4,db5]@3 ~ [f4,bb4,db5]@3 ~ [f4,bb4,db5]@3 ~ [f4,bb4,db5]@2", // Bbm
  S: "~@2 [db4,f4,bb4]@3 ~ [f4,bb4,db5]@3 ~ [f4,bb4,db5]@3 ~@3", T: "~@2 [c4,f4,a4]@3 ~ [c4,f4,a4]@5 ~ [c4,f4,bb4]@3 ~",
  U: "~@2 [db4,f4,bb4]@3 ~ [f4,bb4,db5]@3 ~ db4@2 c4@2 bb3@2", // Bbm
  V: "bb3@2 [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~ [d4,f4,bb4]@3 ~ [d4,f4,bb4]@2", // Bbm Bb
  W: "~@2 [db4,f4,bb4]@3 ~ [f4,bb4,db5]@3 ~ [f4,bb4,db5]@3 ~ [f4,bb4,db5]@2", // Bbm
  X: "~@2 [db4,f4,bb4]@3 ~ [f4,bb4,db5]@2 ~@2 [db4,f4,bb4,db5]@2 c4@2 [bb3,f4,bb4,db5]@2", Y: "[f4,bb4,db5] ~@15",
  Z: "[c4,f4,a4]@3 ~@11 [g4,bb4,db5,f5]@2", // F Gm7b5
})).s("gm_pad_warm").gain(0.23)

// other · accordion
const accordion_2 = note(`<
  ~@49 A@2 B C D ~@32 E ~@8 F C ~@2 F C ~ G H I ~ G J K@2 G H I ~ G J K@2 ~ F C ~@2 F C ~@5
>`.pickRestart({
  A: "[~@3 bb4 c5 bb4 c5 ~ c5@3 bb4 c5 ~ c5@4 ~@14]/2", B: "~@10 a4 bb4 c5 gb4 f4@2", C: "f5 ~",
  D: "~@2 d5 eb5 e5 f5 a4 bb4 b4 c5 gb4 g4 ~ a4 ~@2, ~@6 ab4 ~", E: "~@10 db4 eb4 e4 f4 ab4 bb4",
  F: "~@9 f4 a4 bb4 c5 gb4 f4@2", G: "c5@3 bb4@3 c5 bb4 c5@3 bb4@3 c5 bb4",
  H: "db5@3 c5@3 ~ c5 db5@3 c5@3 db5 c5, ~@3 db5 ~@4", I: "db5@3 c5@3 [c5,db5] ~ [bb4,db5]@3 c5@2 [bb4,db5]@2 c5",
  J: "db5@3 c5@3 db5 c5 db5@2 c5 ~@2 d5@2 db5, ~@6 eb5 ~", K: "[~@2 c5@2 eb5@2 c5 bb4 c5@3 bb4@3 ~ c5@11 ~@6]/2",
})).s("gm_accordion").gain(0.52)

// chords · piano · "A.PIANO 1"
const piano_2 = note(`<
  ~@67 A B C D E F G H I J K L M N O P Q R O S ~ T O U V W O X N O P Q R O S X N O P Q R O S X N O P Q R O S X N O P Q R
  O S Y Z AA ~
>`.pickRestart({
  A: "[bb4,eb5,gb5,bb5]@3 [bb4,eb5,gb5,bb5] [bb4,eb5,gb5,bb5]@2 [bb4,eb5,gb5,bb5]@2, [eb3,eb4]", // Ebm Eb
  B: "[f3,a4,db5,eb5,ab5]", // Db
  C: "[f5,bb5,db6,f6]@3 [f5,bb5,db6,f6] [f5,db6,f6]@2 [f5,g5,c6,db6,f6]@2, [bb3,bb4], ~ [ab5,bb5]", // Bbm Db Fsus2 Bb Absus2
  D: "[db5,f5,bb5], [bb3,bb4] ~@15", E: "[bb4,eb5,gb5,bb5]@3 [bb4,eb5,gb5,bb5]!3 [bb4,eb5,gb5,bb5]@2, [eb3,eb4]",
  F: "[c5,eb5,f5,a5]@3 [c5,eb5,f5,a5], [f3,f4]", // F7 F
  G: "[c5,db5,f5,ab5]@3 [c5,db5,f5,ab5] [db5,f5]@2 [ab4,db5,f5]@2, [bb3,f4], ~ [c5,ab5]", H: "[ab3,ab4,c5,eb5]",
  I: "[db4,ab4,db5,f5]@3 [db4,ab4,db5,f5] [c4,ab4,c5,eb5]@4", J: "[bb3,bb4,db5,f5]",
  K: "[eb4,bb4,eb5,gb5,bb5]@3 [eb4,bb4,eb5,gb5,bb5] [eb4,bb4,eb5,gb5,bb5]@2 [eb4,bb4,eb5,gb5,bb5]@2, eb3", // Ebm
  L: "[f4,c5,eb5,f5,a5]@3 [f4,c5,eb5,f5,a5] [c5,eb5,f5,a5]@2 [c5,eb5,f5,bb5]@2, f3, ~ f4", // F7 Cm7
  M: "f4 ~ [bb4,db5,f5,bb5]!2 [bb4,db5,f5,bb5]@2 [bb4,db5,f5,bb5]@2 [bb4,d5,f5,ab5]@3 [bb4,d5,f5,ab5]@3 [bb4,d5,f5,ab5]@2, bb3 [d3,d4]", // Bbm Bb7 D
  N: "[bb4,eb5,gb5,bb5]@6 [bb4,eb5,gb5,bb5]@2 [bb4,eb5,f5,bb5]@3 [bb4,eb5,bb5]@3 [bb4,eb5,gb5,bb5]@2, [eb3,eb4], ~@11 f5@5", // Ebm Bbsus4 Eb5 Ebm Eb
  O: "[f3,f4,c5,eb5,f5,a5]", // F7
  P: "~@14 bb3 ~, [bb3,gb5,eb6]@11 c4@5, ~@3 [f5,db6]@8 ~@5, ~@6 [eb5,c6]@5 ~@5, ~ [db5,bb5]", // Ebm Db Cm Gb
  Q: "[bb3,f4,bb4,db5,f5,bb5] [d3,d4,bb4,d5,f5,ab5,bb5]", // Bbm Bb7
  R: "[bb4,eb5,gb5,bb5]@6 [bb4,eb5,gb5,bb5]@2 [bb4,eb5,f5,bb5]@3 [bb4,eb5,gb5,bb5]@3 [bb4,eb5,gb5,bb5]@2, [eb3,eb4]", // Ebm Bbsus4 Ebm Eb
  S: "~@2 [c4,c5]!2 [c4,c5]@2 [c4,c5]@2 [c4,c5]@3 [c4,c5]@3 [c4,c5]@2, [bb4,db5,f5]", // C Bbm
  T: "~@2 eb5 f5@3 eb5 ~ [bb4,f5,bb5]@3 [bb4,eb5,gb5,bb5]@3 [bb4,eb5,gb5,bb5]@2, ~ [eb3,eb4]@7, ~@2 [bb4,bb5]@5 ~@9", // Bb5 Ebm Eb Bb
  U: "bb4@3 c5@3 bb4 ~ [db4,eb4,f4,ab4,c5]@3 [db4,eb4,f4,ab4,c5]@3 [db4,eb4,f4,ab4,c5]@2, [bb3,db4,f4,ab4] ~", // Dbmaj7 Bbm7
  V: "[bb3,f4,bb4] [bb3,d4,f4,ab4,bb4], db4 ~@15", // Bb5 Bb7
  W: "~@2 [bb4,f5,bb5]@4 eb5 ~ [bb4,eb5,f5,bb5]@3 [bb4,eb5,gb5,bb5]@2 ~ [bb4,f5,bb5] ~, eb4, eb3@7 ~, ~@2 eb5 ~@11 eb5@2", // Bb5 Bbsus4 Ebm Bb5
  X: "~@2 [bb4,db5,f5,bb5]!2 [bb4,db5,f5,bb5]@2 [bb4,db5,f5,bb5]@2 [bb4,d5,f5,ab5]@3 [bb4,d5,f5,ab5]@3 [bb4,d5,f5,ab5]@2, [bb3,f4] [d3,d4]", // Bbm Bb7 Bb5 D
  Y: "[bb3,bb4,db5,f5,bb5] ~@7", // Bbm
  Z: "[eb4,bb4,eb5,gb5,bb5]@6 [bb4,eb5,bb5]@2 [bb4,eb5,f5,bb5]@3 [bb4,eb5,bb5]@3 [bb4,eb5,gb5,bb5]@2, eb3, ~@3 eb4@5, ~@3 gb5@4 ~, ~@11 f5@5", // Ebm Eb5 Bbsus4 Eb5 Ebm
  AA: "[f3,f4,c5,eb5,f5,a5] ~@6 [bb3,bb4,db5,f5,g5,bb5]", // F7 Gm7b5
})).s("gm_piano").gain(0.54)

// drums · kick
const kick = s("bd").struct("<A B@11 C B@35 D E@17 F B@12 E@8 F G E@37 F G H ~>".pickRestart({
  A: "~@3 x", B: "x ~@2 x!2 ~@2 x", C: "x ~@2 x!2 ~ x ~", D: "~@3 x ~@2 x ~@3 x ~@3 x ~",
  E: "~@3 x ~@2 x ~@4 x ~@2 x ~", F: "x", G: "x ~@2 x ~@2 x ~@4 x ~@2 x ~", H: "x ~@6 x",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<A ~@11 B ~@42 C ~@9 D E ~@19 D E ~@22 F ~@6 G ~@7 D E ~@3>".pickRestart({
  A: "~@5 x!2 ~", B: "~@8 x!3 ~ x ~@3", C: "~@4 x!3 ~", D: "~@6 x!7 ~ x ~", E: "x", F: "~@15 x",
  G: "~@7 x!3 ~ x!2 ~ x!2",
})).gain(0.64)

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

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@11 B ~@42 C ~@9 D ~@20 D ~@23 E ~@6 F ~@7 D ~@4>".pickRestart({
// … 111 more lines

More by Kaoma