Strudelify

Breaking Us In Two

Joe Jackson

KeyF♯ minorTempo110 bpm
0:00/0:00
// Breaking Us In Two — Joe Jackson
// 110 bpm, 4/4, key F# 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 133 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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
const piano = note(`<
  A B C D E F G H I J K L M N O P Q R S D T U V W X Y Z AA AB AC AD AE@2 AF AG@2 AH AI AJ AK AL AM AN@2 AO AP AQ AR A B
  C D E F G H I J K L M N O P Q R S D T U V W X Y Z AA AB AC AD AS@2 AF AG@2 AH AI AJ AK AL AM AN@2 AO AP AQ AT@2 B C D
  E F G H I J K L M N O AU AV@2 AW@3 AX AY@3 AZ BA@3 BB BC@2 ~ BB BC@2 ~
>`.pickRestart({
  A: "[f#1,f#2,c#4,f#4,a#4,c#5]", B: "[e4,b4]@5 ~@2 c#2, [f#2,e5], g#4@13 g#4@3, ~@5 [e4,b4]@3",
  C: "c#4@2 c#4 ~@4 c#4, [f#1,f#2,c#5]@13 f#4@3, a#4@10 g#4 a#4@5, f#4 ~@5 f#4@6 g#4@4, ~ f#3", // F#5
  D: "~@4 a3@2 g#3@2 ~@4 a2@2 b2 ~, d2@6 e2@9 ~, ~@2 d3@4 ~@2 f#3@7 ~, ~@10 e3@5 ~",
  E: "~@12 f#4@2 g#4 ~, [f#1,f#2,c#3]@15 ~, ~@10 c#4@5 ~", // F#5
  F: "[e4,g#4,b4,e5]@2 b4!2, [f#1,f#2], ~ [e4,e5], ~@4 g#4@3 ~", // E F# E
  G: "b2@6 ~@6 [b2,e4]@2 f#2 ~, [b1,f#4]@15 ~, d4@10 d4@5 ~, a3@8 a3@7 ~, ~@3 b2@3 ~@2", // E5 B5
  H: "[c#4,e4]@3 ~@3 a2@2, a1, a2@3 a3 a2 d4@3, a3@2 ~ e4@5, ~@3 c#4@2 a3@2 ~", // C#m
  I: "d3@3 ~@3 [d3,a3,e4] a2, [d2,f#4]@15 ~, d4@5 d4@2 ~, a3@2 a3 ~, ~@3 d3@3 ~@2", // Dsus2 D
  J: "[b3,e4]@2 [b3,e4,g#4]@2 ~@3 e3, e2, a4@9 ~ e3@4 ~@2, e3@3 ~ [b3,f#4]@4, ~@3 e4", // E5 E B5
  K: "a3@2 a3@2 ~@2 [d3,e4] a2, d2@15 ~, d3@3 ~, f#4@10 f#4@5 ~, d4@6 ~@2 e4@4 ~@2 d4 ~", // Dsus2
  L: "e3@3 e3 ~@2 [e3,g#4] b2, e2@15 ~, [b3,e4,g#4]@8 [b3,e4,b4]@7 ~, ~@8 e3@4 ~@2 e4 ~, ~@10 a4@5 ~", // E E5
  M: "a3@6 ~@6 [a3,d4,f#4]@2 d3 a2, d2@15 ~, f#4@8 d4@2 e4@5 ~, [d3,d4]@4 d3@3 ~, ~@3 a3@3 ~@2", // D
  N: "d3@2 ~ a2 b3@2 ~ e3, [d2,a3,d4,f#4] [e2,e4,g#4], ~@2 d3@2 e3@3 ~, ~@3 b3", // D E
  O: "f#3@2 ~ c#4@2 ~@2 a#4, [f#2,f#4], a#4@7 ~, c#4@3 ~@2 [c#4,g#4]@3, ~ f#3 ~ f#3", // F# C#5
  P: "~@2 a3 ~@4 b2, d2@3 [e2,g#3]@5, ~ d3@2 ~ f#3@4, ~@5 e3@3, ~@3 [g2,a2]", // E Gsus2
  Q: "~@12 g#4@3 c#2, [f#1,f#2,c#3], ~ c#4, ~@5 f#4@3", // F#5
  R: "[e4,g#4,b4,e5]@4 [e4,g#4,b4]@2 ~ f#2, f#1, f#2@3 ~ e5@4, ~@3 [e4,g#4,b4]", // E
  S: "c#4@2 ~@5 c#4, a#4@11 a#4@5, f#2@4 ~ g#4 g#4@2, f#4@6 f#4@7 f#4@3, ~@2 c#4@5 ~",
  T: "~@12 [c#4,a#4]@3 ~, [f#1,f#2,c#3]@15 ~, ~@3 c#4@2 g#4@2 ~, ~@8 f#4@7 ~", // F# F#5
  U: "f#2@3 ~@4 e4, f#1, g#4@4 e4 b4@3, b4 e5, [e4,e5]@3 f#2@5", // E
  V: "b2@6 ~@4 d4@2 [b2,a3,d4,f#4]@3 ~, b1@15 ~, f#4@3 ~, d4@2 a3 ~, a3@3 b2@3 ~@2", // Bm7
  W: "a3@2 ~@5 e2, [a1,e4], c#4 ~, a2@3 a2@2 a2@3, ~ a3 [a3,c#4]!2", // A5 A
  X: "~@7 [a2,d4], [d2,f#4], d4@5 d4@2 ~, a3@2 a3 ~, ~@3 d3@3 [d3,a3,e4]@2", // D5 D Dsus2
  Y: "[b3,e4]@4 ~@2 e3@2 e3 ~@6 e2, e2@7 b2, a4 f#4, e3@3 ~@2 e3@3, ~ [b3,e4,g#4] b3 [b3,e4]", // E5 E E5
  Z: "~@4 a3 ~@2 [a2,d4], [d2,f#4], d4@5 d4@2 ~, a3 ~, ~@3 d3@3 [d3,a3,e4]@2", // D5 D Dsus2
  AA: "b3@4 ~@3 b2 ~@6 e4@2, e2, [e4,g#4] b4, e3@3 e3 [e3,b3] a4@3, ~ b3 e4 [e3,b3,g#4]", // E E5 E
  AB: "d3@6 ~@9 a2, [d2,f#4], d4@5 d4@3, a3@2 a3 [a3,e4], ~@3 d3@4 d3", // D A5
  AC: "a3@4 a3@2 d3 a2 [e3,b3]@4 ~ e3@2 b2, [d2,d3,d4,f#4]@7 ~ [e2,e4,g#4]@7 ~, ~@12 b3@3 ~", // E5 D E
  AD: "f#3@2 f#3 ~ f#3!2 [f#3,c#4] f#3, f#2, a#4@3 ~, f#4@2 ~ [f#4,a#4], c#4@3 c#4@2 ~@3", // F#5 F#
  AE: "[[f#2,f#3,c#4,f#4,a#4]@2 [f#2,f#3,c#4,f#4,a#4]!5 f#4 [b1,b2,a3,d4,f#4]@3 [b1,b2,a3,d4,f#4] [a3,d4,f#4]@2 ~ b2, ~@7 [f#2,f#3,c#4,a#4]@5 [b1,b2]@3 ~, ~@7 [a3,d4,f#4]]/2", // F# Bm7 D F# B D
  AF: "[c#2,c#3]@3 ~ g#3@2 ~ g#2, [g#3,c#4,e4] [c#4,e4], ~@3 c#3@3 [c#3,g#3]@2", // C# C#m C#5
  AG: "[d3@3 ~@2 d3 f#2@3 ~@2 f#2 c#4 ~ e4!2, d2@6 ~@3 f#2@2 ~ [e2,e4,g#4]@2 [e2,c#4,g#4]@2, [a3,d4,f#4]@4 [a3,d4,f#4]@2 [c#4,f#4,a4]@4 [c#4,f#4,a4]@2 ~ a4@3, ~@3 d3@2 ~@11]/2", // E C#m D F#m
  AH: "[b1,b2]@3 ~ [a3,d4,f#4]@2 [b1,b2,a3,d4,f#4]@2, [a3,d4,f#4] ~, ~@3 [b1,b2]@3 ~@2", // B D Bm7 D B
  AI: "c#3@3 c#3 [d2,d3,a3,d4,f#4]@2 [e2,e3,e4,g#4]@2, [c#2,c#4,e4,g#4] ~", // D E C#m
  AJ: "f#2@2 ~@5 c#3, a#4@3 ~, f#4@5 f#4@3, c#4!2, ~@3 f#3@3 [f#3,a#4]@2", // F#
  AK: "a3@4 ~@2 b2@2 [e2,e3,a3,d4,f#4]@3 ~ [e2,e3,a3,d4,f#4]@4, [b1,d4,f#4] ~, b2@3 ~@5, ~ a3 ~@2", // D Bm
  AL: "a2@3 ~ [g3,c4,e4]@2 ~ e2, a1, [g3,c4,e4] ~, ~@3 a2@3 [a2,g3,c4,e4]@2", // C Am7
  AM: "[b1,b2]@6 [b1,b2]@2 b3@4 ~@3 d2, [a3,d4,f#4] [e4,g4], ~@4 e2@3 e2, ~@3 b3", // B D Em
  AN: "[[a1,a2]@6 ~@2 [g3,c4,e4]@3 c2 [e2,b3,e4,g4]@12 [e2,b3,e4,g4]@4 [d2,a3,d4,f#4]@4, [g3,c4,e4] ~@3, ~@3 a1@3 ~@10, ~@3 a2@2 ~@11]/2", // A C Em D C
  AO: "[c3,c4,e4]@7 c3, [c2,g4]", AP: "[c2,c3,g3,c4,e4]@14 c3 ~",
  AQ: "b2@3 ~ b3@2 [b2,b3]@2, b1, [b3,d4,f#4] [d4,f#4], ~@3 b2@3 ~@2", // B Bm D
  AR: "[c#3,c#4,f#4,g#4]@3 [c#3,c#4,f#4,g#4] [c#4,f4]@2 [c#4,f4]@2, c#2, ~ [c#3,g#4]", // C#sus4 C# C#5
  AS: "[[f#2,f#3,c#4,f#4,a#4]@2 [f#2,f#3,c#4,f#4,a#4]!5 f#4 [b1,b2,a3,d4,f#4]@3 [b1,b2,a3,d4,f#4] [a3,d4,f#4]@2 ~ b2, ~@14 [f#2,f#3,c#4,a#4]@9 ~ [b1,b2]@6 ~@2, ~@7 [a3,d4,f#4]]/2", // F# Bm7 D F# B D
  AT: "[[c#3,c#4,f#4,g#4]@3 [c#3,c#4,f#4,g#4] [c#4,f4]@2 c#4@2 [f#1,f#2,c#4,f#4,a#4,c#5]@8, c#2@31 ~, ~ [c#3,g#4]@3, ~@3 f4@5]/2", // C#sus4 C# F# C#5
  AU: "f#3@3 f#3 [f#2,f#3,c#4,f#4,a#4]@2 [e2,e3,b3,e4,g#4]@2, [f#2,c#4,f#4,a#4] ~", // F# E F#
  AV: "[[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] [e2,e3,b3,e4,g#4], d2@3 ~]/2", AW: "[[f#2,c#4,f#4,a#4]@15 ~, f#3@41 ~@7]/3",
  AX: "~@2 a3 g#3 ~@3 b2, d2@3 e2@5, ~ d3@2 ~ f#3@4, ~@5 e3@3, ~@3 a2", AY: "[[f#1,f#2]@15 ~, c#3@47 ~]/3",
  AZ: "~@2 a3 ~@3 a2 b2, d2@3 [e2,g#3]@5, ~ d3@2 ~ f#3@4, ~@10 e3@5 ~", BA: "[[f#1,f#2]@13 ~@3, c#3@47 ~]/3",
  BB: "~@2 a3 ~@4 b2, d2@3 [e2,g#3]@5, ~ f#3@2 ~ f#3@4, ~@5 e3@3, ~@3 a2", BC: "[f#1,f#2,c#3]/2",
})).s("gm_piano").gain(0.48)

// chords · piano · soft notes
const piano_soft = note(`<
  A ~ B A@2 C D E F G H ~@3 I A J K L A M N O ~@2 P Q ~@3 R ~ S T ~ U ~@2 V ~@3 W X Y ~@3 A ~ B A@2 C D E F G H ~@3 I A
  J K L A M N O ~@2 P Q ~@3 R ~ S Z ~ U ~@2 V ~@3 W X Y ~@3 A ~ B A@2 C D E F G H ~@3 I ~@6 A ~@11 A ~@3
>`.pickRestart({
  A: "~@15 c#2", B: "~ f#4@5 c#4@8 ~@2", C: "~@7 g#4, ~@5 c#5@3", D: "~@14 f#4 ~", E: "~@2 a3 ~@4 [a3,c#4]",
  F: "~@14 d4 ~", G: "~@7 b2@8 b2, ~@6 e3@3 ~@7", H: "~@8 a3@7 ~, ~@3 d4@4 ~", I: "~@2 f#3 ~", J: "~@7 a#4",
  K: "~@6 f#2@8 ~ c#2", L: "~ f#2, f#1", M: "~@10 c#4@2 ~@2 [f#2,g#4] c#2", N: "~@3 g#4", O: "~@14 a3 f#2",
  P: "~@7 b2 ~@8", Q: "~@5 a3 ~@2", R: "~@3 f#3 ~ c#4 ~ c#4, ~@2 f#4 ~, ~@5 g#4@3", S: "~@7 b1", T: "~@3 c#2@5",
  U: "~@5 c#4 ~@2", V: "~ f#2@3", W: "~@5 a2 ~@2", X: "~@12 e2 ~@3", Y: "~@7 [g3,c4,e4]", Z: "~@5 c#2@10 ~",
})).s("gm_piano").gain(0.24)

// bass · acoustic bass · "Jazz Bass"
const bass = note(`<
  A B C D A E F G H I J K H L M D N B O P A E Q R S T U T V W X Y Z AA AB@2 AC AD AE AF AG AH AI@2 AJ AK AL AM A B C D A
  E F G H I J K H L M D N B O P A E Q R S T U T V W X Y Z AA AB@2 AC AN AE AF AG AH AI@2 AJ AK AL AM A B C D A E F G H I
  J K H L AO AP AQ AR AS AT AU AV AW ~ AX AY AZ BA AO BB BC@2 BD BE BF@3
>`.pickRestart({
  A: "f#2@7 ~", B: "f#1", C: "f#2@5 ~ f#2@3 ~ g#2@2 f#2@2 e2@2", D: "d2@5 ~ d2@2 e2@4 d2@2 e2@2",
  E: "f#1@5 c#2 f#2 c#2", F: "b1@5 ~ b1 ~ b1@5 ~ b1@2", G: "a1@5 ~ a1 ~ a1@4 a1@4", H: "d2@4 ~@2 d2 ~ d2@6 b1@2",
  I: "e2@5 ~ e2 ~ e2@4 d2@2 e2@2", J: "d2@5 ~ d2 ~ d2@4 a1@2 d2@2", K: "e2@5 ~ e2 ~ e2@4 g2@2 a2@2",
  L: "d2@5 ~ d2@2 e2@5 ~ e2@2", M: "f#2@5 ~@3 f#2@5 ~ f#2 ~", N: "f#2@7 c#2", O: "f#2@5 ~ f#2@4 e2@2 f#2@2 e2@2",
  P: "~@3 d2 e2@2 d2 e2", Q: "b1@4 ~@2 b1 ~ b1@5 ~ b1@2", R: "a1@5 ~ a1 ~ a1@4 ~@2 a1@2",
  S: "d2@4 ~@2 d2 ~ d2@5 ~ d2@2", T: "e2@4 ~@2 e2 ~ e2@5 ~ e2@2", U: "d2@4 ~@2 d2 ~ d2@4 b1@2 d2@2",
  V: "d2@4 ~@2 d2 ~ d2@4 a1@4", W: "d2@5 ~ d2@2 e2@6 d2 e2", X: "f#2@5 ~@3 f#2@5 ~@3",
  Y: "f#2@3 ~ f#2@2 f#2@2 f#2@2 f#2 ~ f#2 ~ f#2 ~", Z: "b1@4 ~@2 b1 ~ b1@5 ~ b1 ~", AA: "c#2@5 ~ c#2 ~ c#2@5 ~ c#2@2",
  AB: "[d2@4 ~@2 d2 ~ d2@4 f#2@7 ~ f#2@4 e2@2 f#2@2 e2@2 d2@2]/2", AC: "b1@5 ~ b1 ~ b1@4 a1@2 b1@2",
  AD: "c#2@6 b1 c#2 d2@4 e2@4", AE: "f#2@5 ~ f#2@2 f#2@5 ~ f#2@2", AF: "b1@5 ~ b1@2 e2@3 ~ e2@3 ~",
  AG: "a1@5 ~ a1 ~ a1@5 ~ a1@2", AH: "b1@5 ~ b1@2 e2@4 e2@3 ~", AI: "[g1 ~@5 a1 ~ a1@4 e2@11 ~ e2@4 d2@4]/2",
  AJ: "c2@14 c2 ~", AK: "c2@7 c2", AL: "~ b1@13 b1 ~", AM: "c#2@6 c#2 ~ c#2@8", AN: "c#2@6 b1 d2@5 e2@4, ~@7 c#2 ~@8",
  AO: "f#2@6 f#2 ~ f#2@6 f#2@2", AP: "f#2@8 f#2@4 e2@3 ~", AQ: "d2", AR: "d2 e2", AS: "f#2@3 f#1 f#2@3 f#2",
  AT: "f#2@5 ~@9 f#2@2", AU: "f#2@6 f#2 ~ f#2@6 ~@2", AV: "d2@3 ~ e2@2 d2 e2", AW: "f#2@3 ~ f#2@3 ~",
  AX: "f#2@3 ~ f#2@3 f#2", AY: "d2@6 d2@2 e2@5 ~ e2@2", AZ: "f#2@3 ~ f#2@4", BA: "f#2@5 ~@3 f#2@8",
  BB: "d2@3 ~ e2@3 e2", BC: "[f#2@11 ~@5]/2", BD: "~ f#2", BE: "d2@3 d2 e2@3 e2", BF: "[f#2@17 ~@7]/3",
})).s("gm_acoustic_bass").gain(0.43)

// bass · acoustic bass · "Jazz Bass" · soft notes
const bass_soft = note(`<
  A ~@3 A ~@9 B ~@4 C A ~@9 D ~@3 E ~@13 A ~@3 A ~@9 B ~@4 C A ~@9 D ~@3 F ~@13 A ~@3 A ~@14 G H I J K B ~ L B ~@3 M N
  ~@4
>`.pickRestart({
  A: "~@7 c#2", B: "~@6 f#2 ~@9", C: "d2@5 ~@11", D: "~@6 f#2 ~@7 f#2 ~", E: "~@12 c#2 ~@3", F: "~@11 c#2 ~@4",
  G: "~@6 f#2 ~ f#2@6 ~@2", H: "~@7 f#2", I: "~@3 d2 ~@4", J: "~@3 f#2 ~@3 f#2", K: "f#2@6 f#2 ~ f#2@6 f#2@2",
  L: "~@3 f#2 ~@4", M: "~@6 f#2@2 f#2@7 ~", N: "f#2@3 f#2 ~@4",
})).s("gm_acoustic_bass").gain(0.21)

// other · bagpipe · "Scotland"
const bagpipe = note("<~@64 A@3 B C@3 D E F G H@2 I@2 J ~@53>".pickRestart({
  A: "[~@6 a#4 b4 c#5@14 e5@6 c#5@10 b4@2 a#4@3 g#4@4 ~, ~@43 b4 ~@4]/3", B: "f#4@3 e4 c#4 e4 b3@2",
  C: "[c#4@6 c#5 d#5 e5@14 b5@2 a#5@3 g#5@2 ~ f#5@6 e5@6 c#5@3 b4@3, ~@27 b5 ~@20]/3",
  D: "c#5@10 f#4@2 ~ c#5@2 ~, ~@6 g#4 ~", E: "b4@4 a4@2 a4@4 g#4@3 a4@3", F: "b4@6 a4 ~ a4@2 g#4@2 f#4@2 e4@2",
  G: "~@2 b4@2 a4 ~ f#4@2 ~ d5@2 c#5 ~ a4@3, ~ c#5@2 ~@2 g#4@2 ~@5 b4@2 ~@2",
  H: "[~ d5 c#5 b4 a4 ~ f#5@2 e5@2 d5@2 a5@8 f#5@6 e5@4 d5@2, e5 ~@15]/2",
  I: "[a4@3 c#5 b4@4 g#4@4 f#4@8 e4@4 c#4@4 b3@4]/2", J: "c#4@15 ~",
})).s("gm_bagpipe").gain(0.3).pan(0.4)

// chords · piano
const piano_2 = note("<~@7 A ~@15 B ~@19 C D E F G ~@7 H ~@35 I J K L M ~@18 N@3 ~ O@3 ~ P@3 ~ Q@4 ~@3>".pickRestart({
  A: "~@3 d#5, ~ b3@3, ~@3 d#4@5, ~ f#4, ~@5 b4@3", B: "~@7 d#4 ~@4 d#5@2 f#5@2, ~@3 b3 f#4@3 ~, ~@5 [b4,c5]@2 ~",
  C: "~@8 [e5,e6]@4 [f#5,f#6]@3 ~", D: "~@4 [a5,a6]@4 ~@4 [f#5,f#6]@3 ~, [g5,g6]@8 [e5,e6]@7 ~",
  E: "~@4 [a5,a6]@3 ~ [e5,e6]@3 ~ [f#5,f#6]@3 ~, [g5,g6]@7 ~@9", // A E F# G
  F: "[c#6,c#7]@4 [d#6,d#7]@4 [e6,e7]@4 [d#6,d#7]@3 ~, ~@4 c#7 ~@11", G: "[c#6,c#7]@6 [c#6,g#6,c#7] ~ [c#6,g#6,c#7]@8",
  H: "~@6 b3 ~@5 d#5@2 f#5 ~, ~@7 d#4@7 ~@2, ~@4 f#4@3 ~, ~@5 b4@2 ~", I: "~@8 [g5,g6]@3 ~ [f#5,f#6]@3 ~",
  J: "~@4 [f#5,f#6]@3 ~ [e5,e6]@4 [f#5,f#6] ~@3, [e5,e6]@7 ~@9", K: "[g5,g6]@3 ~ [a5,a6]@3 ~ [e5,e6]@3 ~ [f#5,f#6]@3 ~",
  L: "[c#6,c#7]@4 [d#6,d#7]@4 [e6,e7]@3 ~ [d#6,d#7]@3 ~", M: "[c#6,c#7]@6 [c#6,g#6,c#7]@2 [c#6,g#6,c#7]@7 ~",
  N: "[~@4 g#4 ~ a#4 ~ d#5 ~ g#5 ~ a#5 ~@3 f#6 ~ g#6 ~@3 c#7!2, ~@3 d#4@10 a#5@4 f#6@4 a#6@3, ~@5 g#4@10 d#6@9, ~@3 d#5@5, ~@11 g#5@13]/3",
  O: "[~@2 d#4 ~ g#4 ~ a#4 ~ d#5 ~ g#5 ~ a#5 ~ d#6 ~ f#6 ~ g#6 ~ a#6 ~ c#7 ~, ~@6 d#4@16 g#5@12 f#6@13 ~, ~@5 g#4@8 a#5@11, ~@7 a#4@8 d#6@9, ~@3 d#5@5]/3",
  P: "[~@2 d#4 ~ g#4 ~@3 d#5 ~ g#5 ~@3 d#6 ~ g#6 ~ a#6 ~ c#7 ~ d#7!2, ~@3 d#4@10 a#5@6 a#6@2 c#7@3, ~@5 g#4@10 d#6@9, ~@7 a#4@10 g#6@7, ~@3 d#5@5]/3",
  Q: "[~@8 g#4@2 ~@2 a#4@2 ~@2 d#5@2 ~@2 g#5@2 ~@6 d#6@2 ~@6 g#6@2 ~@4 a#6@2 c#7 ~ c#7@10 ~@8, ~@6 d#4@16 g#5@8 d#6@4 f#6@11 ~@19, ~@10 g#4@16 a#5@19 ~@19, ~@14 a#4@31 ~@19, ~@9 d#5@14 ~@9]/4",
})).s("gm_piano").gain(0.32)

// chords · piano · soft notes
const piano_soft_2 = note("<~@114 A@3 ~@3 B@2 C D@2 ~ E F G ~@4>".pickRestart({
  A: "[~@2 d#4 ~@11 d#6 ~@5 a#6 ~@3, ~@7 a#4@16 ~, ~@19 g#6@5]/3",
  B: "[~@7 c#7@4 ~@5, ~@6 g#6@9 ~@17, ~@5 a#6@3 ~@8]/2", C: "~@6 a#4 ~", D: "[~@4 a#5 ~@11, ~@3 g#5@13]/2",
  E: "~@2 d#4 ~@5", F: "~@4 a#5 ~@3", G: "f#6 ~@3 a#6 ~@3, ~@6 g#6@7 ~@3",
})).s("gm_piano").gain(0.24)

// chords · marimba
const marimba = note("<~@114 A@3 ~ B@2 C@2 D@2 E ~ F G H@2 ~@3>".pickRestart({
  A: "[~@2 g#3 ~ a#3 ~ d#4 ~ g#4 ~ a#4 ~@3 g#5 ~ a#5!2 f#5!2 ~@4, ~@3 g#3@8 a#4@2 d#5@2 g#5@3 ~@6, ~@5 a#3@13 ~@6, ~@7 d#4@11 ~@6, ~@3 g#4@3 ~@2]/3",
  B: "[~@4 d#3@2 ~@4 g#3@2 ~@2 a#3@2 ~@4 c#4@2 c#4@2 d#4@2 ~@2 f#4@2 f#4 ~, ~@3 d#3@9 ~@4, ~@3 g#3@3 ~@2, ~@16 a#3@8 ~@2 d#4@5 ~]/2",
  C: "[g#4@2 g#4@2 a#4@2 ~@2 c#5@2 ~@2 d#5@2 d#5@7 ~@11, ~@6 a#4@9 ~@17, ~@10 c#5@5 ~@17]/2",
  D: "[~@4 d#3 ~@3 f#3@2 f#3@2 g#3@2 ~@2 c#4@2 c#4@2 d#4@2 ~@3 f#4 ~@2 g#4@2 g#4@2, ~@3 d#3@3 ~ g#3@3 ~ d#4@5, ~@13 f#4@3]/2",
  E: "a#4 ~@4 c#5 c#5@2 d#5@2 ~@2 f#5@2 f#5 ~, ~ a#4@3 ~ d#5@2 ~", F: "~@2 d#3 ~ g#3!2 a#3!2, ~@3 d#3@3 ~@2",
  G: "c#4 ~ c#4@2 d#4 ~@3 g#4@2 g#4@2 a#4@2 a#4@2, ~@3 d#4@3 ~@2",
  H: "[c#5 ~ c#5@2 d#5@2 ~@2 f#5@2 f#5@2 g#5 ~ g#5@10 ~@8, ~@6 d#5@7 ~@19]/2",
})).s("gm_marimba").gain(0.1)

// drums · kick
const kick = s("bd").struct(`<
  A@2 B C A@2 B C@2 D B@2 C B C@2 A@2 B C A@2 C B C E B C B C@2 F C@2 G H C B C B C B@2 I B C@3 A@2 B C A@2 B C@2 D B@2
  C B C@2 A@2 B C A@2 C B C E B C B C@2 F C@2 G H C B C B C B@2 I B C@3 A@2 B C A@2 B C@2 D B@2 C B C B D B C B@2 C B@3
  C B@2 C B@3 C@2 A ~@2
>`.pickRestart({
  A: "x", B: "x ~@2 x!2 ~@3", C: "x ~@2 x!2 ~@2 x", D: "x ~@3 x ~@2 x", E: "x ~@3 x!2 ~ x", F: "x ~@2 x!3 ~ x",
  G: "x ~@2 x!2 ~ x ~", H: "~ x ~ x!2 ~@2 x", I: "~ x ~ x!2 ~@3",
})).gain(0.56)

// drums · rim
const rim = s("rim").struct("<~@113 A B@2 C B C@3 B C@2 B C@3 B ~@4>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@3 x!2",
})).gain(0.56)

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

// drums · low tom
const low_tom = s("lt").struct("<~@21 A ~ A ~@45 A ~ A ~@61>".pickRestart({
  A: "~@7 x",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 A ~@17 B ~@29 A ~@17 B ~@45>".pickRestart({
  A: "~@5 x ~@2", B: "~@6 x!2",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@5 A ~@15 B ~@17 A ~@13 A ~@15 B ~@31 A ~@31>".pickRestart({
  A: "~@3 x", B: "~@5 x ~@2",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct(`<
  A@3 ~ A@2 ~ A ~ A@2 ~@2 B A ~ A@3 ~ A@2 ~@2 A ~ A ~ A ~ A C A ~ C ~ A@3 ~ A@2 D ~ A ~@2 B A@3 ~ A@2 ~ A ~ A@2 ~@2 B A
  ~ A@3 ~ A@2 ~@2 A ~ A ~ A ~ A C A ~ C ~ A@3 ~ A@2 D ~ A ~@2 B A@3 ~ A@2 ~ A ~ A@2 ~@2 B A@3 ~ A ~@7 A ~@6 A@2 ~@2
>`.pickRestart({
// … 80 more lines

More by Joe Jackson