Strudelify
Un-Break My Heart cover art

1996 · Secrets

Un-Break My Heart

Toni Braxton

KeyD minorTempo58 bpm
0:00/0:00
// Un-Break My Heart — Toni Braxton
// 58 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 38, 4/4 at bar 38) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 71 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(58/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 · electric bass finger · "Fingered Bass"
const bass = note(`<
  A B C D E F G F H F I F J K L K L M N O P F Q F R S T U J M V W X K Y Z AA AB AC AD AE AF AG AH AI AJ AK AJ AL AM AL
  AM AL AM AN AM AO AP AQ AR AS AT AU AR AS AT AS AT AV@3
>`.pickRestart({
  A: "~ gb1", B: "b1@7 b1 e1@7 g1", C: "a1@8 gb2@5 db2@3", D: "g1", E: "gb1 gb2", F: "b1@7 b1 e1@8",
  G: "a1@7 a1 a1@6 e2 a1", H: "a1@8 gb2@3 gb2@3 gb1@2", I: "a1@7 a1 a1@4 a2 e2 a1@2", J: "a1@7 a1 a1@8",
  K: "d2@7 d2 g1@8", L: "c2@8 a2@3 a1@5", M: "d2@5 d1 f1 gb1 g1@8", N: "c2 a1", O: "~@7 bb2 bb2@5 f2 bb2@2, bb1",
  P: "a1@7 gb1 gb2@8", Q: "a1@7 a1 a1@4 a2 e2 a2@2", R: "a1@8 gb1@3 gb2 e2@2 db2@2", S: "b1@7 b1 e1@5 e1 gb1 g1",
  T: "a1@7 a1 a1@3 a2@2 e2 db2 a1", U: "b1@5 db2 d2 e2 e1@8", V: "c2@7 c2 a2@7 a1", W: "d2@3 f1@3 gb1@2 g1@8",
  X: "c2@7 c2 a1@3 a2@5", Y: "c2@7 c2 ~@3 a2@5, ~@8 a1@5 ~@3", Z: "bb1@7 ~ bb2@8, ~@7 bb1@7 ~@2",
  AA: "eb1@7 g1 ab1@5 ab2 gb2 eb2", AB: "db2@3 db1 eb1@2 e1@2 gb1@7 gb2", AC: "eb1@6 eb2@2 ab1@5 ab2 gb2 eb2",
  AD: "db2@7 e1 gb1@7 gb1", AE: "gb2@8 b1@7 gb3", AF: "e3@5 gb3 g3@2 a3@3 e3@5", AG: "a2@5 b2 db3 d3 b2@5 db3 d3@2",
  AH: "e3@3 b3@4 e3 a3@8", AI: "a1@3 a1@3 a1@2 d2@5 e1 f1@2", AJ: "g1@7 g1 c2@7 c1",
  AK: "a2@3 a1@3 a1@2 d2 d1@2 e1@2 f1@2 gb1", AL: "a2@3 a1@5 d2@5 f1@3", AM: "g1@7 g1 ~@3 c3@5, ~ c2",
  AN: "a2@2 g2@2 f2@2 e2@2 d2@5 f1@3", AO: "a2@3 a1@5 d2@2 d1 e1@3 f1@2", AP: "g1@7 g1 c2@7 c2",
  AQ: "a1@3 a1@3 a1@2 d2@3 d1@5", AR: "~@3 g2@5 ~@3 c3@5, g1 c2",
  AS: "~@6 a1@2 d2 d1@2 e1@2 f1@2 gb1, a1@3 ~@5, ~@3 a2@5 ~@8", AT: "g1@7 g1 c2@4 c2@4",
  AU: "~@6 a1@2 d2@3 d1@5, a1@3 ~@5, ~@3 a2@5 ~@8", AV: "[~@6 a1@2 bb1@4 d1@25 ~@11, a1 ~@7, ~@3 a2@5 ~@40]/3",
})).s("gm_electric_bass_finger").gain(0.66)

// chords · pad new age · "Fantasia"
const pad_new_age = note(`<
  A B C D E F G F C F G F G H I H I H I J K F G F C F G F G H I H I H I J L M N O@2 P@2 Q R S T S T S T S T S T S T S T
  S T S T S T S T S U@3
>`.pickRestart({
  A: "~@8 [gb3,bb3]@3 [ab3,b3]@2 [bb3,db4]@3", B: "[b3,d4,gb4] [g3,b3,d4]", C: "[a3,db4,e4] [gb3,bb3,db4]",
  D: "[g3,b3,d4] [a3,db4,e4]", E: "[bb3,db4,gb4]", F: "[gb3,b3,d4] [g3,b3,d4]", G: "[a3,db4,e4]",
  H: "[a3,d4,f4] [bb3,d4,f4]", I: "[g3,c4,e4] [a3,db4,e4]", J: "[g3,c4,e4] [f3,bb3,d4]", K: "[e3,a3,db4] [gb3,bb3,db4]",
  L: "[g3,bb3,eb4] [ab3,b3,eb4]", M: "[ab3,db4,e4] [bb3,db4,gb4]", N: "[bb3,eb4,g4] [ab3,b3,eb4]",
  O: "[[ab3,db4,e4] [bb3,db4,gb4]@2 [gb4,b4,d5]]/2", P: "[[g4,b4,d5] [e4,a4,db5]@2 [gb4,b4,d5]]/2",
  Q: "[b4,d5,gb5] [a4,db5,e5]", R: "[e3,db4]@3 [gb3,d4]@3 [g3,e4]@2 [a3,d4,f4]@8", S: "[bb3,d4,f4] [g3,c4,e4]",
  T: "[a3,db4,e4] [a3,d4,f4]", U: "[[a3,db4,e4]@8 [bb3,f4]@4 [a3,f4]@25 ~@11, ~@8 d4@29 ~@11]/3",
})).s("gm_pad_new_age").gain(0.17).pan(0.6)

// chords · acoustic guitar nylon · "Nylon-str.Guitar"
const acoustic_guitar_nylon = note(`<
  A B C D E F G H I J K L M N O N O P@2 Q R F G H I J K L M N O N O P@2 Q S T U V@2 ~ W ~ X Y Z Y Z Y Z Y Z Y Z Y Z Y Z
  Y Z Y Z Y Z Y Z Y AA@3
>`.pickRestart({
  A: "~@8 gb3 e3 db3 e3@2 gb3@3", B: "~@6 b3@2 ~ gb3 g3 b3@2 gb3 b3@2, b2 b3@2 ~@5, ~ gb3@4 gb3@3 e3@8, ~@3 b2@5 ~@8",
  C: "~@2 a3 db4@3 a3@2 ~@2 gb3@6, a2 gb2, ~ e3@7 ~ db3@7",
  D: "~@2 g3 b3@2 g3@3 ~@3 db4@2 a3@3, g2!2, ~ d3@7 ~ e3@7, ~@5 a3 ~@2",
  E: "~@3 bb3@2 ~@3 gb2@8, gb2@7 bb3@9, ~ db3@15, ~@2 gb3@2 ~ gb3@11",
  F: "b3 ~@2 d4@2 ~@2 d4@2 ~@2 d4@2 ~@2 d4, ~ gb3@4 gb3@4 gb3@4 gb3@2 ~, ~@2 b3@3 ~ b3@3 ~ g3@3 ~ g3@2",
  G: "db4 ~@2 db4@2 ~@2 db4@2 e3 a3 db4 [db4,d4] e4 b3 a3, ~ e3@4 e3@4 ~@7, ~@2 a3@3 ~ a3@3 ~@7", // Dmaj7
  H: "b3 ~@2 d4@2 ~@2 d4@2 gb3 ~ d4@2 g3 e4 d4, ~ gb3@4 gb3@4 ~ g3@3 ~@3, ~@2 b3@3 ~ b3@3 ~@7",
  I: "db4 e3 a3 db4@2 ~@2 db4@2 e3 bb3 db4 gb4@2 db4@2, ~@5 e3@2 ~@9, ~@6 a3@3 ~@7",
  J: "~@3 d4@2 ~@2 d4@2 gb3 g3 d4 gb4 e4 ~ b3, b3@2 b3@3 ~ b3@2 ~@6 d4@2, ~ gb3@4 gb3@4 ~@7",
  K: "db4 ~@2 db4@2 ~ a3 db4@2 e3 a3 db4 d4 [db4,d4] [b3,db4] a3, ~ e3@4 e3@2 ~@9, ~@2 a3@3 ~@11", // Dmaj7 Bsus2
  L: "b3@2 db4 d4@2 gb4@2 d4@2 gb3 g3 d4@2 g3 e4 d4",
  M: "db4 ~@2 db4@2 ~@2 db4 [e3,db4]@3 [f3,d4]@2 [g3,e4]@3, ~ e3@3 ~ e3@3 ~@8, ~ a3 ~ a3 ~@4", // Dbm Dm C
  N: "~@2 a3 d4@2 [e4,f4] e4 d4 ~ d4 f4 g4@2 bb3 d4 f4, d4 ~@3 bb3 ~@3, ~ f3@3 ~@12", // Fmaj7
  O: "~@3 e4@2 ~ c4 e4 [e3,db4]@3 [f3,d4]@2 g3!2 e3, e4@2 c4@3 ~@8 e4@3, ~ g3@4 g3@2 ~@9", // Dbm Dm
  P: "[~ d4 f4 e4 f4 e4 d4 a3 bb3 d4 f4 g4@2 d4 g4 g4@2 ~@4 e4@3 [e3,db4]@3 [f3,d4]@2 [g3,e4]@3, a3@3 ~@14 e4@2 c4@4 ~@9, ~@18 g4@3 ~@11]/2", // Dbm Dm C
  Q: "~@3 e4@2 ~ c4 e4 ~@3 d4@2 ~@2 d4, e4@2 c4@3 ~@3 d4@2 bb3@3 ~ bb3@2, ~ g3@4 g3@3 ~ f3@4 f3@3",
  R: "db4@2 ~@3 db4@2 ~ [bb3,db4]@8, ~ e3@3 ~@4, ~@3 a3@4 ~@9", // Bbm
  S: "~ bb3 eb4 ab4@2 bb4@3 ~@5 b3@3, g3@2 ~@7 ab3@7, ~@5 b3 ~@2, ~@11 eb4@5",
  T: "~@5 db4@3 ~@2 bb3 db4@2 bb3@3, ~ ab3@7 ~ gb3@7, ~ db4 ~@6, ~@3 e4@5 ~@8",
  U: "~@5 bb3@3 ~@5 b3@3, ~ g3@7 ~ ab3@7, ~ bb3 ~@3 b3 ~@2, ~@3 eb4@5 ~@3 eb4@5",
  V: "[~@5 db4@4 ~@4 bb3@4 ~@4 bb3@3 ~@8, ~ ab3@8 gb3@8 gb3@7 ~@8, ~@2 db4@2 ~@6 bb3@2 ~@6 bb3@3 ~@11, ~@3 e4@6 ~@2 db4@7 ~ db4@5 ~@8]/2",
  W: "~@7 [a3,b3] [g3,a3] ~@7, ~@4 gb3@3 ~", // Asus2 Gsus2
  X: "[e3,db4]@3 [f3,d4]@2 [g3,e4]@3 ~@2 a3 d4@2 [e4,f4] e4 d4, ~@4 d4 ~@3, ~@9 f3@3 ~@4", // Dbm Dm C Fmaj7
  Y: "~ d4 f4 g4@2 bb3 d4 f4 ~@3 e4@2 ~ c4 e4, bb3@2 ~@6 e4@2 c4@3 ~@3, ~@9 g3@4 g3@2 ~",
  Z: "[e3,db4]@3 [f3,d4]@2 g3!2 e3 ~@2 a3 d4@2 [e4,f4] e4 d4, ~@5 e4@3 d4@2 ~@6, ~@9 f3@3 ~@4", // Dbm Dm Fmaj7
  AA: "[[e3,db4]@3 [f3,d4]@2 g3!2 e3 ~@2 e4 ~ f4@27 ~@9, ~@5 e4@3 g3@2 ~ [a3,d4]@28 ~@9, ~@9 c4@2 ~@37]/3", // Dbm Dm D5
})).s("gm_acoustic_guitar_nylon").gain(0.36).pan(0.3)

// chords · epiano1 · "E.Piano 1"
const epiano1 = note(`<
  A B C D E F G F H F I J K L M N M N O P Q R G F H F I J K L M N M N O P S@2 T@3 ~@30
>`.pickRestart({
  A: "~@8 [db4,bb4]@3 [d4,b4]@2 [e4,db5]@3, ~ gb2", B: "[b2,gb4,d5]@8 [g4,d5]@7 e3, ~@4 e3@3 ~",
  C: "[a2,e4,db5]@7 a2 db5@4 b4@3 ~, ~ [gb2,e4]", D: "[d4,b4] [db4,a4], g2", E: "[gb2,bb3,gb4]",
  F: "[b3,d4]@5 ~@3 e3@4 ~@3 d4, b2@4 ~ b2@2 d4@7 b3@2, ~@6 b3@7 e3@3", // Bm
  G: "~ a3@4 ~@10 db4, [a2,db4]@5 a2@7 ~ a2@3, ~@6 a3@7 ~ a3@2, ~@7 db4@8 ~", // A
  H: "[a3,db4]@5 ~@3 [gb2,bb3]@8, a2@4 ~ a2@2 db4@9, ~@3 a3 ~@4", // A Gb
  I: "[a3,db4]@5 ~@7 a2@4, a2@4 ~ a2@7 ~@4, ~@3 a3@5, ~@7 db4@9", // A
  J: "[b2,b3,d4]@5 ~@10 d4, ~@5 b2@2 d4@7 ~@2, ~@6 b3@7 ~ b3@2, ~ e3", // Bm
  K: "~ a3@4 ~ a3 ~ [e3,db4]@3 [f3,d4]@2 [g3,e4]@3, db4@7 ~@9, a2@5 a2@3 a2@8", // Dbm Dm C
  L: "[a3,f4]@5 ~@3 [g2,bb3]@5 ~@2 f4, d3@4 ~ d3@2 f4@7 bb3@2, ~@6 a3@2 ~@5 g2@3", // Dm Gm
  M: "[c3,g3]@5 ~@2 e4 [e3,db4]@3 [f3,d4]@2 [g3,e4]@3, e4@6 g3@3 ~@7, ~@5 c3@3 a2@8", // C5 Dbm Dm C
  N: "[d3,a3]@5 ~@3 [g2,bb3]@5 ~@2 f4, f4@6 a3@2 ~@5 g2@3, ~@5 d3@2 f4@7 bb3@2", // D5 Gm
  O: "[c3,g3]@5 ~@2 e4 [e3,db4]@3 [f3,d4]@2 [g3,e4]@3, e4@3 g3 ~@4, ~@5 c3@3 a2@8", // C5 Dbm Dm C
  P: "[g3,e4]@5 ~@2 e4 [f3,d4]@5 ~@2 d4, bb2@4 ~ bb2@3 bb2@4 ~ bb2@3, ~@3 g3 ~@3 f3", // C Dm
  Q: "[a2,e3]@5 ~ e3@2 bb4@4 db5@4, db4 ~, ~@5 a2@3 [gb2,e3,db4]@8", // A5 Gb7
  R: "[b3,d4]@5 ~@3 e3@4 ~@3 d4, b2@4 ~ b2@2 d4@7 b3@2, b4@2 ~@4 b3@7 e3@3", // Bm
  S: "[[bb3,g4]@3 [b3,ab4]@2 [db4,bb4]@3 ab2@8 db3@8 [gb2,bb3,gb4]@8, eb3@8 [b3,ab4]@15 ~@9]/2", // Eb E Gb E
  T: "[[eb3,bb3,g4] ab2 db3 [gb2,bb3,gb4]@2 ~, ~ [b3,ab4]@2 ~@3]/3", // Eb Gb E
})).s("gm_epiano1").gain(0.32).pan(0.7)

// other · acoustic guitar nylon · "Nylon-str Guitar"
const acoustic_guitar_nylon_2 = note("<A B C@2 D ~@31 E F G H I ~@30>".pickRestart({
  A: "~@8 bb3@3 b3@2 db4@3", B: "d4@3 d4!2 e4 gb4 g4@4 gb4@3 d4@2",
  C: "[e4@13 ~ [b3,db4] ~ b3@8 db4@8, ~@15 a3@2 ~@15]/2", D: "[gb3,db4]@5 db3 e3 ~ gb4@8, ~@6 gb3@9 ~, ~@7 db4@9",
  E: "~@10 ab3 [bb3,b3] eb4 [ab4,bb4] b4 [ab4,bb4]", // Bmaj7 Absus2
  F: "b4@3 e4@2 db4@2 [eb4,e4] ~@3 ab4 bb4 [ab4,bb4] ~ gb4, ~@4 gb4@3 ~", // Emaj7 Absus2
  G: "bb4@3 eb4@2 ~ bb4@2 b4@3 [ab4,bb4] b4 db5 ~ eb5, ~@5 g4@2 ~@9", // Absus2
  H: "eb5@3 ~@2 bb4 [b4,db5] ab4 bb4@6 ~@2, ~@3 ab4@4 ~@9", I: "~ b4 ~ db5 [b4,db5] bb4 ~ db5 b4@8, bb4 ~@7",
})).s("gm_acoustic_guitar_nylon").gain(0.55).pan(0.7)

// chords · string ensemble 2 · "Slow Strings"
const string_ensemble_2 = note("<~@13 A B A B A B C D ~@8 A B A B A B E F@2 G@3 ~@3 H@2 I@22 J@3>".pickRestart({
  A: "a3 [g2,bb3], [d3,f4]", B: "[c3,g3,e4] [a2,e3,db4]", C: "[c4,e4] [bb3,d4], bb2", D: "a2 gb2, [e3,db4]",
  E: "[c4,e4] [bb3,d4], bb2@15 ~", // C Bb
  F: "[[bb3,g4]@3 [b3,ab4]@2 [db4,bb4]@3 [b3,eb4]@8 e4@8 [bb3,gb4]@8, eb3 ab4@2 ~, ~ db4]/2", // Eb E Gb B Ebm
  G: "[[bb3,g4] b3 e4 [bb3,gb4]@2 ~, eb4@2 db4@3 ~, ~ ab4@2 ~@3]/3", H: "[~ a3 [g2,bb3] [c3,g3,e4], ~ [d3,f4]@2 ~]/2",
  I: "[[a2,e3,db4] a3 [g2,bb3] [c3,g3,e4], ~ [d3,f4]@2 ~]/2", J: "[[a2,e3,db4]@8 [g3,e4]@4 [a3,f4]@25 ~@11]/3",
})).s("gm_string_ensemble_2").gain(0.14).pan(0.4)

// other · pad halo · "Halo Pad"
const pad_halo = note("<~@4 A B ~@3 C D C E ~@8 F G F H C D C E I J I J I J K L M ~ N O@4 P@2 Q@22 R ~@2>".pickRestart({
  A: "~ [db5,gb5]", B: "[b4,d5]@15 ~", C: "gb3 g3, d4", D: "[e3,db4]", E: "[e3,db4]@8 [e3,db4]@3 [f3,d4]@2 [g3,e4]@3",
  F: "d4@3 gb4", G: "e4", H: "e4 db4", I: "f5", J: "e5@8 db5@3 d5@2 e5@3", K: "e5 d5", L: "eb5 ~",
  M: "~@8 [bb4,db5,gb5]@7 ~", N: "~ [bb4,db5,gb5]", O: "[~ [b4,d5]@2 [a4,db5]@2 [d5,gb5]@2 [db5,e5]]/4",
  P: "[[e4,db5]@3 [f4,d5]@3 [g4,e5]@2 f5@16 e5@8]/2", Q: "[db5@3 d5@2 e5@3 f5@16 e5@8]/2", R: "db5@3 d5@2 e5@3 ~@8",
})).s("gm_pad_halo").gain(0.15).pan(0.7)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~@38 A@3 ~@3 B@2 C@2 B@2 D@2 B@4 E@2 F@10 G@3>".pickRestart({
  A: "[~@15 eb6@4 ab5@5 bb5@3 gb5@13 ~@8]/3", B: "[db4@3 d4@3 e4@2 f4@16 e4@8]/2",
  C: "[db4@3 d4@3 e4@2 f4@16 [e4,e5]@8]/2", D: "[db4@3 d4@3 [e4,e5]@2 f4@16 e4@8]/2",
  E: "[db4@3 d4@3 e4@2 [f4,f5]@16 [e4,e5]@8]/2", F: "[[db4,db5]@3 [d4,d5]@3 [e4,e5]@2 [f4,f5]@16 [e4,e5]@8]/2",
  G: "[[db4,db5]@3 [d4,d5]@3 [e4,e5]@2 [e4,e5]@4 [f4,f5]@25 ~@11]/3", // Db D E F
})).s("gm_string_ensemble_1").gain(0.18).pan(0.3)

// chords · piano · "Piano 1"
const piano = note("<~@44 A B C D E F G H I J K@2 L M N@2 O P Q R S T U V W@3>".pickRestart({
  A: "[a2,e3,db4]@3 [f3,d4]@3 [g3,e4] ~@5 d3@3 d2, ~@3 a2@5 [a3,f4]@8, ~@4 d2@3 ~", // A Dm C Dm
  B: "[g2,bb3]@5 ~ bb3 g2 e4@3 ~@3 c4 c2, f4@8 ~@3 c4@2 c3@2 ~, ~@5 g3@3 c2@7 ~, ~@12 g4@3 ~", // Gm
  C: "~ e3@2 [f3,d4]@3 [g3,e4] ~ [a3,f4]@4 ~ a3@2 d2, a2@8 d2@7 ~, db4@3 ~@9 d3@3 ~", // Dm C Dm
  D: "g2@5 ~@2 g2 e4@3 ~@2 g4@2 c3, [bb3,f4]@6 g3@2 ~@3 c3@3 ~@2, ~@5 g2@2 ~ c2@8, ~@12 c4@3 ~", // Bb5
  E: "[e3,db4]@3 [f3,d4]@2 ~ [g3,e4] ~@8 d3, a2@5 a2@3 d4@8, ~@4 [d2,f4]@2 a4 f4, ~@11 d3@2 d2@3", // Dbm Dm C Dm
  F: "[g2,bb3,f4]@3 ~@4 g2 e4@3 ~ g4@2 ~ c2, d4@8 ~@3 c3@4 ~, ~@3 g2@2 g2@2 ~ c2@7 ~, ~@2 a4 f4 ~@3 e4", // Gm7
  G: "~ e3@2 [f3,d4]@2 ~ [g3,e4] ~@7 f4 d3, a2@5 a2@3 [d2,f4]@4 a4@2 ~@2, db4@3 ~@5 d4@7 ~, ~@11 d3@2 d2@3", // Dm C Dm
  H: "[g2,bb3,f4]@3 ~@4 g2 ~@6 e4 c3, ~@3 g2@2 g2@2 ~ [c2,e4]@4 g4@2 ~@2, ~@4 a4@2 f4@2 ~@3 c3@2 c2@2 ~", // Gm7 C
  I: "[a2,e3,db4]@3 [f3,d4]@3 [g3,e4] ~@8 d2, ~@3 a2@5 [d2,d4,f4]@6 a3@2, ~@13 d3@2 ~", // A Dm C Dm
  J: "[g2,bb3]@5 ~@2 g2 ~@6 g4 c3, f4@8 ~@3 c3@2 ~@3, ~@5 g2@2 ~ [c2,e4]@5 c2@2 ~, ~@6 g3@6 c4@3 ~", // Gm C
  K: "[~@3 [f3,d4]@2 ~ [g3,e4] ~ [a3,f4]@3 ~ a4@3 d3 [g2,d4]@3 ~ [f4,a4]@3 g2 ~@4 [e4,g4]@3 ~, [a2,db4]@2 a2@3 a2@2 ~ d2@8 ~@3 g2@3 ~@2 c2@7 ~, ~ e3@2 ~@8 d3@3 ~@13 c3@4 ~, ~@12 f4@7 ~@13]/2", // Dm C Dm G5 F Em A
  L: "[a2,e3,db4]@3 [a2,d4]@3 [g3,e4] ~ d4@3 ~@3 f4 d2, ~@3 f3@2 ~@3 [d2,f4]@5 d4@2 ~, ~@11 d3@3 ~@2, ~@3 a3", // A D5 C Dm
  M: "bb3@5 ~ bb3 g2 [c4,e4]@3 ~ [c4,g4]@2 e4 c2, [g2,f4]@7 ~ c2@6 ~@2, ~@5 g3@2 ~@4 c3@4 ~", // C C5 G7
  N: "[[e3,db4]@2 ~ [f3,d4]@2 ~ [g3,e4] ~ [d4,f4]@5 ~ d4 ~ [g2,bb3]@6 [g2,bb3,f4] ~ c2@5 c3 g3 c3, a2 ~ a2@3 a2@2 ~ d2@7 f4@6 ~@3 [c4,e4]@7 ~, ~@13 d3@3 ~@16]/2", // Dbm Dm C Dm Gm Gm7 C
  O: "[a3,db4]@3 [f3,d4]@2 a2 [g3,e4] ~ [d4,f4] e4 d4 ~@2 d2 ~@2, a2@5 ~@3 d2@5 ~@3, ~@11 [d4,f4]@4 ~", // A Dm C Dm
  P: "[d4,f4] e4 d4 ~@2 g2@2 ~ [c4,e4] d4 c4 ~@2 c2@2 c2, g2@5 ~@3 c2@5 ~@3, ~@3 [d4,f4]@4 ~@4 [c4,e4]@4 ~", // Dm C Dm C
  Q: "[a2,e3,db4]@3 [a2,d4]@2 ~ [g3,e4] ~ [d4,f4] e4 d4 ~@2 d2 d3 ~, ~@3 f3 ~ a2@2 ~ d2@5 ~@3, ~@11 [d4,f4]@4 ~", // A D5 C Dm
  R: "[d4,f4] e4 d4 ~@2 g2 ~ g2 [c4,d4,e4] d4 c4 ~@2 c2 c3 ~, g2@5 ~@3 c2@5 ~@3, ~@3 [d4,f4]@4 ~@4 [c4,e4]@4 ~", // Dm C Dm C
  S: "~ e3 ~ [f3,d4] ~@2 [g3,e4] a2 [f4,a4] g4 f4 ~@2 d2 d3 ~, [a2,db4]@2 a2@3 a2@2 ~ d2@3 [f4,a4]@4 ~", // Dm C F A F
  T: "[f4,a4] g4 f4 [f4,a4]@2 g2 f4 [g2,a4] ~ e4@2 c4@2 ~ c2 ~, g2@4 ~@4 [c2,g4]@5 c3@2 ~", // F Gsus2 C5
  U: "~ e4 ~ d5@2 ~ e5 a2 [d5,f5] e5 d5 ~@3 d3 ~, [a2,db5]@2 a2@4 ~@2 d2@4 ~ d2@2 ~, ~@2 f4@2 ~ g4@2 ~@4 [d5,f5]@4 ~", // Dm A Dm
  V: "[d5,f5] e5 d5 [d5,f5]@2 ~ [d5,f5] g2 [g4,e5]@3 ~@3 c4 c3, g2@4 ~ g2@2 ~ c2@8, ~@11 c3@2 c5@2 ~, ~@12 e4@3 ~", // Dm C
  W: "[~ e4 ~ [f4,d5]@2 ~ [g4,e5]@2 [bb1,g4,e5]@4 [d1,a4,f5]@27 ~@9, [a2,db5]@2 a2@3 a2@3 ~@40]/3", // Dm C Edim Dm A
})).s("gm_piano").gain(0.66).pan(0.3)

// drums · kick
const kick = s("bd").struct("<A B@35 C D@3 E ~@3 F D@13 F D@9 G ~@2>".pickRestart({
  A: "~ x", B: "x ~@6 x!2 ~@7", C: "x ~@6 x!2 ~@6 x", D: "x ~@7 x ~@6 x", E: "x", F: "x ~@2 x ~@2 x ~ x ~@6 x",
  G: "x ~@2 x ~@2 x ~ x ~@3 x ~@3",
})).gain(0.64)

// drums · rim
const rim = s("rim").struct("<~ [~ x ~ x]!39 [~ x ~@2] ~@30>").gain(0.64)

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

// drums · low tom
const low_tom = s("lt").struct("<~@44 A B C B D B C B E B C B D B F B E B C B D B C B G ~@2>".pickRestart({
  A: "x ~@2 x ~@2 x ~@5 x ~@3", B: "~ x ~ x", C: "~@5 x!2 ~@5 x ~@3", D: "~@3 x!2 ~ x!2 ~@4 x ~@3",
  E: "~@3 x!5 ~@4 x ~@3", F: "x ~ x!2 ~ x!2 ~@5 x ~@3", G: "x ~ x!2 ~ x!2 ~ x ~@3 x ~@3",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  [~@2 x!2]
  [x ~@2 x!4 ~ x ~@3 x ~ x!2]!35
  [x ~@3 x ~ x!3 ~@2 x!4 ~]!8
  [~@4 x ~@2 x!2 ~@2 x!4 ~]
  [x ~@3 x ~ x!3 ~@2 x!4 ~]!23
  [x ~@3 x ~ x!2 ~@8]
  ~@2
>`).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~ [~@11 x ~@4]!35 [~@3 x ~@12]!8 [x ~@2 x ~@2 x ~@9] [~@3 x ~@12]!24 ~@2>").gain(0.48)

// drums · crash
// … 43 more lines

More by Toni Braxton