Strudelify

Shame and Scandal in the Family

Trini Lopez

KeyG♯ minorTempo143 bpm
0:00/0:00
// Shame and Scandal in the Family — Trini Lopez
// 143 bpm, 4/4, key G# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(143/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 · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@28 A B C D E F G H I J K L M N@2 O P Q N O R ~ S T U V W X Y Z AA AB AC AD AE AF AG AD AH ~ AI AJ AK AL AM AN AO AP
  AI AJ AK AL AM AN AO AP
>`.pickRestart({
  A: "[b4,d#5] ~ d#5@2 e5@2 [b4,f5]@2 ~@2 [b4,d#5,f#5]@4 ~@2, ~ b4@2 ~@5", // B Bdim B
  B: "[e5,g#5] ~ g#5@2 a5@2 a#5@2 ~@2 [e5,g#5,b5]@4 ~@2, ~@2 e5@7 ~@7", // E
  C: "b5@2 [f#5,c#6]@2 ~@2 [f#5,b5]@3 ~ [f#5,c#6] ~ f#5@2 c#6 ~, f#5 ~@11 b5 ~@3", // F#5 B5 F#5
  D: "[e5,b5] ~ b5 ~ a5@2 [e5,g#5]@2 ~@2 [e5,g#5]@2 ~@2 [e5,g#5] ~, ~ e5@2 ~@5", // E5 E
  E: "[b4,d#5] ~ d#5@2 e5@2 f5@2 ~@2 [b4,d#5,f#5]@5 ~, ~ b4@3 ~@4", // B
  F: "[e5,g#5] ~ g#5@2 a5@2 a#5@2 ~@2 [e5,g#5,b5]@4 ~@2, ~ e5@3 ~@4", // E
  G: "[f#5,b5] ~ [f#5,b5]@2 ~@2 [f#5,b5]@2 ~@2 [f#5,b5]@3 ~ [f#5,b5] ~", // B5
  H: "[e5,b5] ~ [e5,b5]@3 ~ [e5,b5]@2 ~@2 [e5,b5]@3 ~ [e5,b5] ~", // E5
  I: "~@2 [f#5,a#5,c#6] ~@3 [f#5,a#5,c#6]@2 ~@2 [f#5,a#5,c#6]@2 ~@2 [f#5,a#5,c#6] ~", // F#
  J: "[f#5,a#5,c#6] ~ [f#5,a#5,c#6]@2 ~@2 [f#5,a#5,c#6]@2 ~@2 [f#5,a#5,c#6]@2 ~@2 [f#5,a#5,c#6] ~", // F#
  K: "~@2 [c#5,f#5] ~@3 [a#4,c#5,f#5]@3 ~ [a#4,c#5,f#5]@3 ~ [a#4,c#5,f#5] ~, ~ a#4 ~@6", // F#5 F#
  L: "~@2 [g#4,c#5] ~@3 [g#4,c#5,f5]@3 ~ [g#4,c#5,f5]@3 ~ [g#4,c#5,f5] ~", // C#5 C#
  M: "~@2 [g#4,c#5,f5] ~@3 [g#4,c#5,f5]@3 ~ [g#4,c#5,f5]@3 ~ [g#4,c#5,f5] ~", // C#
  N: "~@2 [a#4,c#5,f#5] ~@3 [a#4,c#5,f#5]@3 ~ [a#4,c#5,f#5]@3 ~ [a#4,c#5,f#5] ~", // F#
  O: "~@2 [g#4,c#5,f5] ~@3 [g#4,c#5,f5]@3 ~ [g#4,c#5,f5]@2 ~@2 [g#4,c#5,f5] ~", // C#
  P: "~@2 [g#4,c#5,f5] ~@3 [g#4,c#5,f5]@4 [g#4,c#5,f5]@3 ~ [g#4,c#5,f5] ~", // C#
  Q: "~@2 [a#4,c#5,f#5] ~@3 [a#4,c#5,f#5]@3 ~ [a#4,c#5,f#5]@2 ~@2 [a#4,c#5,f#5] ~", R: "[g#4,c#5,f5] ~@7",
  S: "[c#5,f5] ~ f5@2 f#5@2 [c#5,g5]@2 ~@2 [c#5,f5,g#5]@4 ~@2, ~ c#5@2 ~@5", // C# C#dim C#
  T: "[f#5,a#5] ~ a#5@2 b5@2 c6@2 ~@2 [f#5,a#5,c#6]@4 ~@2, ~@2 f#5@7 ~@7", // F#
  U: "c#6@2 [g#5,d#6]@2 ~@2 [g#5,c#6]@3 ~ [g#5,d#6] ~ g#5@2 d#6 ~, g#5 ~@11 c#6 ~@3", // G#5 C#5 G#5
  V: "[f#5,c#6] ~ c#6 ~ b5@2 [f#5,a#5]@2 ~@2 [f#5,a#5]@2 ~@2 [f#5,a#5] ~, ~ f#5@2 ~@5", // F#5 F#
  W: "[c#5,f5] ~ f5@2 f#5@2 g5@2 ~@2 [c#5,f5,g#5]@5 ~, ~ c#5@3 ~@4", // C#
  X: "[f#5,a#5] ~ a#5@2 b5@2 c6@2 ~@2 [f#5,a#5,c#6]@4 ~@2, ~ f#5@3 ~@4", // F#
  Y: "[g#5,c#6] ~ [g#5,c#6]@2 ~@2 [g#5,c#6]@2 ~@2 [g#5,c#6]@3 ~ [g#5,c#6] ~", // C#5
  Z: "[f#5,c#6] ~ [f#5,c#6]@3 ~ [f#5,c#6]@2 ~@2 [f#5,c#6]@3 ~ [f#5,c#6] ~", // F#5
  AA: "~@2 [g#5,c6,d#6] ~@3 [g#5,c6,d#6]@2 ~@2 [g#5,c6,d#6]@2 ~@2 [g#5,c6,d#6] ~", // G#
  AB: "[g#5,c6,d#6] ~ [g#5,c6,d#6]@2 ~@2 [g#5,c6,d#6]@2 ~@2 [g#5,c6,d#6]@2 ~@2 [g#5,c6,d#6] ~", // G#
  AC: "~@2 [c5,d#5,g#5] ~@3 [c5,d#5,g#5]@3 ~ [c5,d#5,g#5]@3 ~ [c5,d#5,g#5] ~", // G#
  AD: "~@2 [a#4,d#5,g5] ~@3 [a#4,d#5,g5]@3 ~ [a#4,d#5,g5]@2 ~@2 [a#4,d#5,g5] ~", // D#
  AE: "~@2 [a#4,d#5,g5] ~@3 [a#4,d#5,g5]@4 [a#4,d#5,g5]@3 ~ [a#4,d#5,g5] ~", // D#
  AF: "~@2 [c5,d#5,g#5] ~@3 [c5,d#5,g#5]@3 ~ [c5,d#5,g#5]@2 ~@2 [c5,d#5,g#5] ~", // G#
  AG: "~@2 [c5,d#5,g#5] ~@3 [c5,d#5,g#5]@4 [c5,d#5,g#5]@3 ~ [c5,d#5,g#5] ~", AH: "[a#4,d#5,g5] ~@7",
  AI: "[d#5,g5] ~ g5@2 g#5@2 [d#5,a5]@2 ~@2 [d#5,g5,a#5]@4 ~@2, ~ d#5@2 ~@5", // D# D#dim D#
  AJ: "[g#5,c6] ~ c6@2 c#6@2 d6@2 ~@2 [g#5,c6,d#6]@4 ~@2, ~@2 g#5@7 ~@7", // G#
  AK: "d#6@2 [a#5,f6]@2 ~@2 [a#5,d#6]@3 ~ [a#5,f6] ~ a#5@2 f6 ~, a#5 ~@11 d#6 ~@3", // A#5 D#5 A#5
  AL: "[g#5,d#6] ~ d#6 ~ c#6@2 [g#5,c6]@2 ~@2 [g#5,c6]@2 ~@2 [g#5,c6] ~, ~ g#5@2 ~@5", // G#5 G#
  AM: "[d#5,g5] ~ g5@2 g#5@2 a5@2 ~@2 [d#5,g5,a#5]@5 ~, ~ d#5@3 ~@4", // D#
  AN: "[g#5,c6] ~ c6@2 c#6@2 d6@2 ~@2 [g#5,c6,d#6]@4 ~@2, ~ g#5@3 ~@4", // G#
  AO: "[a#5,d#6] ~ [a#5,d#6]@2 ~@2 [a#5,d#6]@2 ~@2 [a#5,d#6]@3 ~ [a#5,d#6] ~", // D#5
  AP: "[g#5,d#6] ~ [g#5,d#6]@3 ~ [g#5,d#6]@2 ~@2 [g#5,d#6]@3 ~ [g#5,d#6] ~", // G#5
})).s("gm_lead_2_sawtooth").gain(0.2)

// bass · acoustic bass
const bass = note(`<
  A B C D E F G H E I E J K L M N@2 L@2 N K L M N@2 L O ~ P Q R S T Q R S U V@2 W X U@2 W@2 U V W Y ~ Z AA AB AC AD AA
  AB AC AE AF AE AG@2 AE AF AG AH ~ AI AJ AK AJ AL AM AK AJ AI AJ AK AJ AL AM AK AJ
>`.pickRestart({
  A: "e2@4 ~@2 e2 ~ b2 ~ b2@3 ~ e2 ~", B: "d2@4 ~@2 d2 ~ a2 ~ a2@3 ~ a2 ~", C: "a1@4 ~@2 a1 ~ e2 ~ e2@3 ~ a1 ~",
  D: "b1 ~@5 b1 ~ b1@2 ~@2 b1@2 ~@2", E: "b1 ~ b1@2 ~@2 b1 ~ f#2 ~ f#2@2 ~@2 f#2 ~",
  F: "e2 ~ e2@2 ~@2 e2 ~ b2 ~ b2@2 ~@2 b2 ~", G: "b1 ~ b1@3 ~ b1 ~ f#2 ~ f#2@2 ~@2 f#2 ~",
  H: "e2 ~ e2@2 ~@2 e2 ~ b2 ~ b2@3 ~@3", I: "e2 ~ e2@2 ~@2 e2 ~ b2 ~ b2@3 ~ b2 ~",
  J: "e2 ~ e2@2 ~@2 e2 ~ b2 ~ b2@2 e2@2 ~@2", K: "e2@4 ~@2 e2 ~ b2 ~ b2@3 ~ b2 ~",
  L: "b1@4 ~@2 b1 ~ f#2 ~ f#2@2 ~@2 f#2 ~", M: "b1@4 ~@2 b1 ~ f#2 ~ f#2@3 ~ f#2 ~",
  N: "e2@4 ~@2 e2 ~ b2 ~ b2@2 ~@2 b2 ~", O: "b1 ~@3", P: "a2@5 ~@3 f#2@6 ~@2", Q: "g#2@5 ~@3 b2@6 ~@2",
  R: "a2@3 ~ f#2@3 ~", S: "g#2@3 ~ b2@3 ~", T: "a2@7 ~ f#2@6 ~@2", U: "f#2@4 ~@2 f#2 ~ c#3 ~ c#3@2 ~@2 c#3 ~",
  V: "f#2@4 ~@2 f#2 ~ c#3 ~ c#3@3 ~ c#3 ~", W: "c#2@4 ~@2 c#2 ~ g#2 ~ g#2@2 ~@2 g#2 ~",
  X: "c#2@4 ~@2 c#2 ~ g#2 ~ g#2@3 ~ g#2 ~", Y: "c#2 ~@3", Z: "b2@5 ~@3 g#2@6 ~@2", AA: "a#2@5 ~@3 c#3@6 ~@2",
  AB: "b2@3 ~ g#2@3 ~", AC: "a#2@3 ~ c#3@3 ~", AD: "b2@7 ~ g#2@6 ~@2", AE: "g#2@4 ~@2 g#2 ~ d#3 ~ d#3@2 ~@2 d#3 ~",
  AF: "g#2@4 ~@2 g#2 ~ d#3 ~ d#3@3 ~ d#3 ~", AG: "d#2@4 ~@2 d#2 ~ a#2 ~ a#2@2 ~@2 a#2 ~", AH: "d#2 ~@3",
  AI: "d#2@4 ~@2 d#2 ~ a#2 ~ a#2@3 ~ a#2 ~", AJ: "g#1 ~ g#1@2 ~@2 g#1 ~ d#2 ~ d#2@2 ~@2 d#2 ~",
  AK: "d#2 ~ d#2@3 ~ d#2 ~ a#2 ~ a#2@3 ~ a#2 ~", AL: "d#2 ~ d#2@3 ~ d#2 ~ a#2 ~ a#2@2 ~@2 a#2 ~",
  AM: "g#1 ~ g#1@2 ~@2 g#1 ~ d#2 ~ d#2@3 ~ d#2 ~",
})).s("gm_acoustic_bass").gain(0.42)

// chords · percussive organ
const percussive_organ = note(`<
  A B C D E A E A E A E A F G@2 H@2 G@2 F@2 G@2 H@2 E I ~@9 J@2 ~@20 K@2 ~@24
>`.pickRestart({
  A: "[b4,e5]", B: "[a4,d5]", C: "[a4,c#5]", D: "[a4,b4,d#5] ~@5 [a4,b4,d#5] ~ [a4,b4,d#5]@2 ~@2 [a4,b4,d#5] ~@3",
  E: "[b4,d#5]", F: "[e5,g#5]", G: "[d#5,f#5]/2", H: "[e5,g#5]/2", I: "[b4,d#5] ~@7", J: "[c#5,f#5]/2",
  K: "[d#5,g#5]/2", // G#5
})).s("gm_percussive_organ").gain(0.2)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E F G H I H J K L M N H O P Q H L M N H O P R ~ E F G H I H J K S T U V W X Y Z AA X U V AB ~ AC AD AE X AF X
  AG AH AI AJ AK AL AM AN AO AP AQ ~ AR AS AT AN AU AN AV AW AR AS AT AN AU AN AV AW
>`.pickRestart({
  A: "[b2,e3,g#3,b3,e4]@2 [b2,e3]@2 [g#3,b3,e4] ~ [g#3,b3,e4]@2 [b2,e3]@2 [g#3,b3,e4]@2 [b2,e3]@2 [g#3,b3,e4] ~, ~@6 [b2,e3] ~@9", // E E5 E E5 E E5 E E5
  B: "[a2,d3,f#3,a3,d4]@2 [a2,d3]@2 [f#3,a3,d4] ~ [f#3,a3,d4]@2 [a2,d3]@2 [f#3,a3,d4]@2 [a2,d3]@2 [f#3,a3,d4] ~, ~@6 [a2,d3] ~@9", // D D5 D D5 D D5 D D5
  C: "[a3,c#4,e4]@2 [a2,e3]@2 [a3,c#4,e4] ~ [a2,e3,a3,c#4,e4]@2 [a2,e3]@2 [a3,c#4,e4]@2 [a2,e3]@2 [a3,c#4,e4] ~, [a2,e3] ~@15", // A A5 A A5 A A5 A A5
  D: "[b2,a3,b3,d#4,f#4]@2 ~@4 [b2,a3,b3,d#4,f#4] ~ [b2,a3,b3,d#4,f#4]@2 ~@2 [b2,a3,b3,d#4,f#4] ~@3", // B7
  E: "[a3,b3,d#4,f#4] ~@3 [a3,b3,d#4,f#4] ~ [a3,b3,d#4,f#4]@2 [b2,f#3]@2 [a3,b3,d#4,f#4]@2 [b2,f#3]@2 [d#4,f#4] ~, [b2,f#3] ~@3", // B7 B5 B7 B5 D#m B5
  F: "[e3,b3,e4,g#4]@2 ~@2 b3 ~ [b3,e4,g#4]@2 [e3,g#3]@2 [b3,e4,g#4]@2 [e3,g#3]@2 [b3,e4,g#4] ~, ~@6 [e3,g#3] ~@9", // E
  G: "[b2,f#3,b3,d#4,f#4] ~ [b2,f#3]@2 [b3,d#4,f#4] ~ [b3,d#4,f#4]@4 [b2,f#3]@2 [b3,d#4,f#4]@2 [b2,f#3] ~, ~@3 [b2,f#3] ~@4", // B B5 B B5 B B5
  H: "[b2,e3,b3,e4,g#4]@2 [b2,e3]@2 [b3,e4,g#4] ~ [b3,e4,g#4]@2 [b2,e3]@2 [b3,e4,g#4]@2 [b2,e3]@2 [b3,e4,g#4] ~, ~@6 [b2,e3] ~@9", // E E5 E E5 E E5 E E5
  I: "[b2,f#3,b3,d#4,f#4,a4] ~ [b2,f#3]@2 [b3,d#4,f#4,a4] ~ [b3,d#4,f#4,a4]@2 [b2,f#3]@2 [b3,d#4,f#4,a4]@2 [b2,f#3]@2 [b3,d#4,f#4,a4] ~, ~@6 [b2,f#3] ~@9", // B7 B5 B7 B5 B7 B5 B7 B5
  J: "[b2,f#3,b3,d#4,f#4,a4] ~ [b2,f#3]@2 [b3,d#4,f#4,a4] ~ [b3,d#4,f#4,a4]@2 [b2,f#3]@2 [b3,d#4,f#4,a4]@2 [b2,f#3]@2 [b3,d#4,f#4,a4] ~, ~@6 b2 ~@9", // B7 B5 B7 B5 B7 B5 B7
  K: "[b2,e3,b3,e4,g#4] ~ [b2,e3]@2 [b3,e4,g#4] ~ [b3,e4,g#4]@2 [b2,e3]@2 [b3,e4,g#4]@2 [b2,e3]@2 [b3,e4,g#4] ~, ~@6 [b2,e3] ~@9", // E E5 E E5 E E5 E E5
  L: "[b2,e3,b3,e4,g#4]@2 [b2,e3]@2 [b3,e4,g#4] ~ [b3,e4,g#4]@2 ~@2 [b3,e4,g#4]@2 [b2,e3]@2 [b3,e4,g#4] ~, ~@2 [b2,e3] ~", // E E5 E E5 E E5
  M: "[a3,b3,d#4,f#4]@2 ~@2 [a3,b3,d#4,f#4] ~ [a3,b3,d#4,f#4]@2 [b2,f#3]@2 [a3,b3,d#4,f#4]@2 [b2,f#3]@2 [a3,b3,d#4] ~, [b2,f#3]@4 ~@2 [b2,f#3] ~@9", // B7 B5 B7 B5 B7 B5
  N: "[b2,f#3,a3,b3,d#4,f#4]@2 [b2,f#3]@2 [d#4,f#4] ~ [a3,b3,d#4,f#4]@2 [b2,f#3]@2 [a3,b3,d#4,f#4]@2 [b2,f#3]@2 [d#4,f#4] ~, ~@6 [b2,f#3] ~@9", // B7 B5 D#m B7 B5 B7 B5 D#m …
  O: "[b2,e3,b3,e4,g#4]@2 [b2,e3]@2 [b3,e4,g#4] ~ [b3,e4,g#4]@4 [b2,e3]@2 [b3,e4,g#4]@2 [b2,e3] ~, ~@3 [b2,e3] ~@4", // E E5 E E5 E E5
  P: "[a3,b3,f#4]@2 f#3@2 [a3,b3,d#4,f#4] ~ [a3,b3,d#4,f#4]@2 [b2,f#3]@2 [a3,b3,d#4,f#4]@2 [b2,f#3]@2 [a3,b3,d#4,f#4] ~, b2@4 ~@2 [b2,f#3] ~@9, f#3 ~@15", // B7 B5 B7 B5 B7 B5
  Q: "[b2,f#3,a3,b3,d#4,f#4]@2 [b2,f#3]@2 [a3,b3,d#4,f#4] ~ [a3,b3,d#4,f#4]@4 [b2,f#3]@2 [a3,b3,d#4,f#4]@2 [b2,f#3] ~, ~@3 [b2,f#3] ~@4", // B7 B5 B7 B5 B7 B5
  R: "[b2,a3,b3,d#4,f#4]@3 ~@13", // B7
  S: "[a#3,c#4,f#4]@2 f#2@2 [f#3,a#3,c#4,f#4] ~ [a#3,c#4,f#4]@2 [f#2,f#3]@2 [a#3,c#4,f#4]@2 [f#2,f#3]@2 [a#3,c#4,f#4] ~, f#2 ~@5 f#2 ~@9", // F#
  T: "[f#2,a#3,c#4,f#4]@2 [f#2,f#3]@2 [a#3,c#4,f#4] ~ [a#3,c#4,f#4]@2 [f#2,f#3]@2 [a#3,c#4,f#4]@2 [f#2,f#3]@2 [a#3,c#4,f#4] ~", // F#
  U: "[c#3,f#3,c#4,f#4,a#4]@2 [c#3,f#3]@2 [c#4,f#4,a#4] ~ [c#4,f#4,a#4]@2 ~@2 [c#4,f#4,a#4]@2 [c#3,f#3]@2 [c#4,f#4,a#4] ~, ~@2 [c#3,f#3] ~", // F# F#5 F# F#5 F# F#5
  V: "[b3,c#4,f4,g#4]@2 ~@2 [b3,c#4,f4,g#4] ~ [b3,c#4,f4,g#4]@2 [c#3,g#3]@2 [b3,c#4,f4,g#4]@2 [c#3,g#3]@2 [b3,c#4,f4] ~, [c#3,g#3]@4 ~@2 [c#3,g#3] ~@9", // C#7 C#5 C#7 C#5 C#7 C#5
  W: "[c#3,g#3,b3,c#4,f4,g#4]@2 [c#3,g#3]@2 [f4,g#4] ~ [b3,c#4,f4,g#4]@2 [c#3,g#3]@2 [b3,c#4,f4,g#4]@2 [c#3,g#3]@2 [f4,g#4] ~, ~@6 [c#3,g#3] ~@9", // C#7 C#5 Fm C#7 C#5 C#7 C#5 Fm …
  X: "[c#3,f#3,c#4,f#4,a#4]@2 [c#3,f#3]@2 [c#4,f#4,a#4] ~ [c#4,f#4,a#4]@2 [c#3,f#3]@2 [c#4,f#4,a#4]@2 [c#3,f#3]@2 [c#4,f#4,a#4] ~, ~@6 [c#3,f#3] ~@9", // F# F#5 F# F#5 F# F#5 F# F#5
  Y: "[c#3,f#3,c#4,f#4,a#4]@2 [c#3,f#3]@2 [c#4,f#4,a#4] ~ [c#4,f#4,a#4]@4 [c#3,f#3]@2 [c#4,f#4,a#4]@2 [c#3,f#3] ~, ~@3 [c#3,f#3] ~@4", // F# F#5 F# F#5 F# F#5
  Z: "[b3,c#4,g#4]@2 g#3@2 [b3,c#4,f4,g#4] ~ [b3,c#4,f4,g#4]@2 [c#3,g#3]@2 [b3,c#4,f4,g#4]@2 [c#3,g#3]@2 [b3,c#4,f4,g#4] ~, c#3@4 ~@2 [c#3,g#3] ~@9, g#3 ~@15", // C#7 C#5 C#7 C#5 C#7 C#5
  AA: "[c#3,g#3,b3,c#4,f4,g#4]@2 [c#3,g#3]@2 [b3,c#4,f4,g#4] ~ [b3,c#4,f4,g#4]@4 [c#3,g#3]@2 [b3,c#4,f4,g#4]@2 [c#3,g#3] ~, ~@3 [c#3,g#3] ~@4", // C#7 C#5 C#7 C#5 C#7 C#5
  AB: "[c#3,b3,c#4,f4,g#4]@3 ~@13", // C#7
  AC: "[b3,c#4,f4,g#4] ~@3 [b3,c#4,f4,g#4] ~ [b3,c#4,f4,g#4]@2 [c#3,g#3]@2 [b3,c#4,f4,g#4]@2 [c#3,g#3]@2 [f4,g#4] ~, [c#3,g#3] ~@3", // C#7 C#5 C#7 C#5 Fm C#5
  AD: "[f#3,c#4,f#4,a#4]@2 ~@2 c#4 ~ [c#4,f#4,a#4]@2 [f#3,a#3]@2 [c#4,f#4,a#4]@2 [f#3,a#3]@2 [c#4,f#4,a#4] ~, ~@6 [f#3,a#3] ~@9", // F#
  AE: "[c#3,g#3,c#4,f4,g#4] ~ [c#3,g#3]@2 [c#4,f4,g#4] ~ [c#4,f4,g#4]@4 [c#3,g#3]@2 [c#4,f4,g#4]@2 [c#3,g#3] ~, ~@3 [c#3,g#3] ~@4", // C# C#5 C# C#5 C# C#5
  AF: "[c#3,g#3,c#4,f4,g#4,b4] ~ [c#3,g#3]@2 [c#4,f4,g#4,b4] ~ [c#4,f4,g#4,b4]@2 [c#3,g#3]@2 [c#4,f4,g#4,b4]@2 [c#3,g#3]@2 [c#4,f4,g#4,b4] ~, ~@6 [c#3,g#3] ~@9", // C#7 C#5 C#7 C#5 C#7 C#5 C#7 C#5
  AG: "[c#3,g#3,c#4,f4,g#4,b4] ~ [c#3,g#3]@2 [c#4,f4,g#4,b4] ~ [c#4,f4,g#4,b4]@2 [c#3,g#3]@2 [c#4,f4,g#4,b4]@2 [c#3,g#3]@2 [c#4,f4,g#4,b4] ~, ~@6 c#3 ~@9", // C#7 C#5 C#7 C#5 C#7 C#5 C#7
  AH: "[c#3,f#3,c#4,f#4,a#4] ~ [c#3,f#3]@2 [c#4,f#4,a#4] ~ [c#4,f#4,a#4]@2 [c#3,f#3]@2 [c#4,f#4,a#4]@2 [c#3,f#3]@2 [c#4,f#4,a#4] ~, ~@6 [c#3,f#3] ~@9", // F# F#5 F# F#5 F# F#5 F# F#5
  AI: "[c4,d#4,g#4]@2 g#2@2 [g#3,c4,d#4,g#4] ~ [c4,d#4,g#4]@2 [g#2,g#3]@2 [c4,d#4,g#4]@2 [g#2,g#3]@2 [c4,d#4,g#4] ~, g#2 ~@5 g#2 ~@9", // G#
  AJ: "[g#2,c4,d#4,g#4]@2 [g#2,g#3]@2 [c4,d#4,g#4] ~ [c4,d#4,g#4]@2 [g#2,g#3]@2 [c4,d#4,g#4]@2 [g#2,g#3]@2 [c4,d#4,g#4] ~", // G#
  AK: "[d#3,g#3,d#4,g#4,c5]@2 [d#3,g#3]@2 [d#4,g#4,c5] ~ [d#4,g#4,c5]@4 [d#3,g#3]@2 [d#4,g#4,c5]@2 [d#3,g#3] ~, ~@3 [d#3,g#3] ~@4", // G# G#5 G# G#5 G# G#5
  AL: "[c#4,d#4,a#4]@2 a#3@2 [c#4,d#4,g4,a#4] ~ [c#4,d#4,g4,a#4]@2 [d#3,a#3]@2 [c#4,d#4,g4,a#4]@2 [d#3,a#3]@2 [c#4,d#4,g4,a#4] ~, d#3@4 ~@2 [d#3,a#3] ~@9, a#3 ~@15", // D#7 D#5 D#7 D#5 D#7 D#5
  AM: "[d#3,a#3,c#4,d#4,g4,a#4]@2 [d#3,a#3]@2 [c#4,d#4,g4,a#4] ~ [c#4,d#4,g4,a#4]@4 [d#3,a#3]@2 [c#4,d#4,g4,a#4]@2 [d#3,a#3] ~, ~@3 [d#3,a#3] ~@4", // D#7 D#5 D#7 D#5 D#7 D#5
  AN: "[d#3,g#3,d#4,g#4,c5]@2 [d#3,g#3]@2 [d#4,g#4,c5] ~ [d#4,g#4,c5]@2 [d#3,g#3]@2 [d#4,g#4,c5]@2 [d#3,g#3]@2 [d#4,g#4,c5] ~, ~@6 [d#3,g#3] ~@9", // G# G#5 G# G#5 G# G#5 G# G#5
  AO: "[d#3,g#3,d#4,g#4,c5]@2 [d#3,g#3]@2 [d#4,g#4,c5] ~ [d#4,g#4,c5]@2 ~@2 [d#4,g#4,c5]@2 [d#3,g#3]@2 [d#4,g#4,c5] ~, ~@2 [d#3,g#3] ~", // G# G#5 G# G#5 G# G#5
  AP: "[c#4,d#4,g4,a#4]@2 ~@2 [c#4,d#4,g4,a#4] ~ [c#4,d#4,g4,a#4]@2 [d#3,a#3]@2 [c#4,d#4,g4,a#4]@2 [d#3,a#3]@2 [c#4,d#4,g4] ~, [d#3,a#3]@4 ~@2 [d#3,a#3] ~@9", // D#7 D#5 D#7 D#5 D#7 D#5
  AQ: "[d#3,c#4,d#4,g4,a#4]@3 ~@13", // D#7
  AR: "[c#4,d#4,g4,a#4] ~@3 [c#4,d#4,g4,a#4] ~ [c#4,d#4,g4,a#4]@2 [d#3,a#3]@2 [c#4,d#4,g4,a#4]@2 [d#3,a#3]@2 [g4,a#4] ~, [d#3,a#3] ~@3", // D#7 D#5 D#7 D#5 Gm D#5
  AS: "[g#3,d#4,g#4,c5]@2 ~@2 d#4 ~ [d#4,g#4,c5]@2 [g#3,c4]@2 [d#4,g#4,c5]@2 [g#3,c4]@2 [d#4,g#4,c5] ~, ~@6 [g#3,c4] ~@9", // G#
  AT: "[d#3,a#3,d#4,g4,a#4] ~ [d#3,a#3]@2 [d#4,g4,a#4] ~ [d#4,g4,a#4]@4 [d#3,a#3]@2 [d#4,g4,a#4]@2 [d#3,a#3] ~, ~@3 [d#3,a#3] ~@4", // D# D#5 D# D#5 D# D#5
  AU: "[d#3,a#3,d#4,g4,a#4,c#5] ~ [d#3,a#3]@2 [d#4,g4,a#4,c#5] ~ [d#4,g4,a#4,c#5]@2 [d#3,a#3]@2 [d#4,g4,a#4,c#5]@2 [d#3,a#3]@2 [d#4,g4,a#4,c#5] ~, ~@6 [d#3,a#3] ~@9", // D#7 D#5 D#7 D#5 D#7 D#5 D#7 D#5
  AV: "[d#3,a#3,d#4,g4,a#4,c#5] ~ [d#3,a#3]@2 [d#4,g4,a#4,c#5] ~ [d#4,g4,a#4,c#5]@2 [d#3,a#3]@2 [d#4,g4,a#4,c#5]@2 [d#3,a#3]@2 [d#4,g4,a#4,c#5] ~, ~@6 d#3 ~@9", // D#7 D#5 D#7 D#5 D#7 D#5 D#7
  AW: "[d#3,g#3,d#4,g#4,c5] ~ [d#3,g#3]@2 [d#4,g#4,c5] ~ [d#4,g#4,c5]@2 [d#3,g#3]@2 [d#4,g#4,c5]@2 [d#3,g#3]@2 [d#4,g#4,c5] ~, ~@6 [d#3,g#3] ~@9", // G# G#5 G# G#5 G# G#5 G# G#5
})).s("gm_acoustic_guitar_steel").gain(0.29).pan(0.4)

// chords · harpsichord
const harpsichord = note(`<
  A B C D E F G H I J I J H K L M N O L P H K L M N O Q ~ E F G H I J I J R S T U V W X Y V Z T U AA ~ AB AC AD T AE AF
  AE AF AG AH AI AJ AK AL AM AN AO ~ AP AQ AR AM AS AT AS AT AP AQ AR AM AS AT AS AT
>`.pickRestart({
  A: "[e3,b3], [e4,g#4]@7 ~", B: "[d3,a3,d4,f#4]@15 ~", C: "[a2,a3,c#4,e4]@7 ~",
  D: "[b2,b3,d#4,f#4]@2 ~@4 [b2,b3,d#4,f#4] ~ [b2,b3,d#4,f#4]@2 ~@2 [b2,d#4,f#4]@2 ~@2, ~@12 b3 ~@3", // B
  E: "[b3,d#4,f#4]@3 ~ b2 ~ [b3,d#4,f#4]@4 b2 ~ [b3,d#4,f#4]@2 ~@2", // B
  F: "[b3,e4,g#4]@3 ~ e3 ~ [b3,e4,g#4]@4 e3@2 [e4,g#4] ~@3, ~@6 b3 ~", // E
  G: "[a3,d#4,f#4]@4 ~@2 [a3,d#4,f#4]@4 b2 ~ [a3,d#4,f#4]@3 ~", // D#dim
  H: "[b3,e4,g#4]@3 ~ e3 ~ [b3,e4,g#4]@3 ~ e3 ~ [b3,e4,g#4] ~@3", // E
  I: "[a3,d#4,f#4]@4 b2 ~ [a3,d#4,f#4]@4 b2 ~ [a3,d#4,f#4] ~@3", // D#dim
  J: "[b3,e4,g#4]@4 e3 ~ [b3,e4,g#4]@3 ~ e3 ~ [b3,e4,g#4] ~@3", // E
  K: "[a3,d#4,f#4]@4 ~@2 [d#4,f#4]@3 ~ b2 ~ [b3,d#4,f#4] ~@3, ~@6 [a3,b3] ~@9", // D#dim D#m B Asus2
  L: "[b3,d#4,f#4]@4 b3 ~ [b3,d#4,f#4]@4 b3 ~ [b3,d#4,f#4] ~@3", // B
  M: "[b3,e4,g#4]@4 b3 ~ [b3,e4,g#4]@4 b3 ~ [b3,e4,g#4] ~@3", // E
  N: "[b3,e4,g#4]@4 b3 ~ [b3,e4,g#4]@4 b3 ~ [e4,g#4] ~@3, ~@6 b3 ~", // E
  O: "[a3,b3,d#4,f#4]@4 ~@2 [b3,d#4,f#4]@4 b3 ~ [b3,d#4,f#4] ~@3", // B7 B
  P: "[b3,e4,g#4]@4 b3 ~ [e4,g#4]@4 b3 ~ [b3,e4,g#4] ~@3, ~@6 b3@3 ~@7", Q: "[b3,d#4,f#4]@3 ~@13",
  R: "[a#3,c#4,f#4]@4 a#3 ~ [c#4,f#4]@4 a#3 ~ [a#3,c#4,f#4]@3 ~, ~@6 a#3@3 ~@7", // F# F#5 F#
  S: "[c#4,f#4]@4 a#3@2 [c#4,f#4]@4 a#3@2 [c#4,f#4]@2 a#3 ~, a#3@3 ~@3 a#3@3 ~@7", // F#5
  T: "[c#4,f#4,a#4]@3 ~ f#3 ~ [c#4,f#4,a#4]@3 ~ f#3 ~ [c#4,f#4,a#4] ~@3", // F#
  U: "[b3,f4,g#4]@4 ~@2 [f4,g#4]@3 ~ c#3 ~ [c#4,f4,g#4] ~@3, ~@6 [b3,c#4] ~@9", // Fdim Fm C# Bsus2
  V: "[c#4,f4,g#4]@4 c#4 ~ [c#4,f4,g#4]@4 c#4 ~ [c#4,f4,g#4] ~@3", // C#
  W: "[c#4,f#4,a#4]@4 c#4 ~ [c#4,f#4,a#4]@4 c#4 ~ [c#4,f#4,a#4] ~@3", // F#
  X: "[c#4,f#4,a#4]@4 c#4 ~ [c#4,f#4,a#4]@4 c#4 ~ [f#4,a#4] ~@3, ~@6 c#4 ~", // F#
  Y: "[b3,c#4,f4,g#4]@4 ~@2 [c#4,f4,g#4]@4 c#4 ~ [c#4,f4,g#4] ~@3", // C#7 C#
  Z: "[c#4,f#4,a#4]@4 c#4 ~ [f#4,a#4]@4 c#4 ~ [c#4,f#4,a#4] ~@3, ~@6 c#4@3 ~@7", AA: "[c#4,f4,g#4]@3 ~@13",
  AB: "[c#4,f4,g#4]@3 ~ c#3 ~ [c#4,f4,g#4]@4 c#3 ~ [c#4,f4,g#4]@2 ~@2", // C#
  AC: "[c#4,f#4,a#4]@3 ~ f#3 ~ [c#4,f#4,a#4]@4 f#3@2 [f#4,a#4] ~@3, ~@6 c#4 ~", // F#
  AD: "[b3,f4,g#4]@4 ~@2 [b3,f4,g#4]@4 c#3 ~ [b3,f4,g#4]@3 ~", // Fdim
  AE: "[b3,f4,g#4]@4 c#3 ~ [b3,f4,g#4]@4 c#3 ~ [b3,f4,g#4] ~@3", // Fdim
  AF: "[c#4,f#4,a#4]@4 f#3 ~ [c#4,f#4,a#4]@3 ~ f#3 ~ [c#4,f#4,a#4] ~@3", // F#
  AG: "[c4,d#4,g#4]@4 c4 ~ [d#4,g#4]@4 c4 ~ [c4,d#4,g#4]@3 ~, ~@6 c4@3 ~@7", // G# G#5 G#
  AH: "[d#4,g#4]@4 c4@2 [d#4,g#4]@4 c4@2 [d#4,g#4]@2 c4 ~, c4@3 ~@3 c4@3 ~@7", // G#5
  AI: "[d#4,g#4,c5]@4 d#4 ~ [d#4,g#4,c5]@4 d#4 ~ [g#4,c5] ~@3, ~@6 d#4 ~", // G#
  AJ: "[c#4,d#4,g4,a#4]@4 ~@2 [d#4,g4,a#4]@4 d#4 ~ [d#4,g4,a#4] ~@3", // D#7 D#
  AK: "[d#4,g4,a#4]@4 d#4 ~ [d#4,g4,a#4]@4 d#4 ~ [d#4,g4,a#4] ~@3", // D#
  AL: "[d#4,g#4,c5]@4 d#4 ~ [g#4,c5]@4 d#4 ~ [d#4,g#4,c5] ~@3, ~@6 d#4@3 ~@7", // G#
  AM: "[d#4,g#4,c5]@3 ~ g#3 ~ [d#4,g#4,c5]@3 ~ g#3 ~ [d#4,g#4,c5] ~@3", // G#
  AN: "[c#4,g4,a#4]@4 ~@2 [g4,a#4]@3 ~ d#3 ~ [d#4,g4,a#4] ~@3, ~@6 [c#4,d#4] ~@9", AO: "[d#4,g4,a#4]@3 ~@13",
  AP: "[d#4,g4,a#4]@3 ~ d#3 ~ [d#4,g4,a#4]@4 d#3 ~ [d#4,g4,a#4]@2 ~@2", // D#
  AQ: "[d#4,g#4,c5]@3 ~ g#3 ~ [d#4,g#4,c5]@4 g#3@2 [g#4,c5] ~@3, ~@6 d#4 ~", // G#
  AR: "[c#4,g4,a#4]@4 ~@2 [c#4,g4,a#4]@4 d#3 ~ [c#4,g4,a#4]@3 ~", // Gdim
  AS: "[c#4,g4,a#4]@4 d#3 ~ [c#4,g4,a#4]@4 d#3 ~ [c#4,g4,a#4] ~@3", // Gdim
  AT: "[d#4,g#4,c5]@4 g#3 ~ [d#4,g#4,c5]@3 ~ g#3 ~ [d#4,g#4,c5] ~@3", // G#
})).s("gm_harpsichord").gain(0.23).pan(0.6)

// drums · kick
const kick = s("bd").struct("<A@3 B A@22 C ~ A@20 C ~ A@16 C ~ A@16>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~ x ~", C: "x",
})).gain(0.47)

// drums · snare
const snare = s("sd").struct("<A@3 B A@22 C D A@7 E A@12 C D A@7 E A E A@6 C D A@7 E A@7 E>".pickRestart({
  A: "~ x ~ x", B: "x ~@2 x!2 ~ x ~", C: "x", D: "~@5 x!3", E: "~@4 x ~@5 x!6",
})).gain(0.42)
// … 15 more lines

More by Trini Lopez