Strudelify
KeyC majorTempo92 bpm
0:00/0:00
// 1950 — Amedeo Minghi
// 92 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 19, 4/4 at bar 20, 2/4 at bar 63, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(92/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.

// other · trumpet
const trumpet = note(`<
  ~@23 A ~ A ~ B C A D ~@35 E F E F G H I F@2 ~@3 J K J L H M N O H O I P Q P O H O I P Q P O H O I P R S ~@2
>`.pickRestart({
  A: "~@2 e5 ~ e5 ~ e5 ~ e5!3 ~ e5 f4 f5 d5", B: "~@2 d5 ~ d5 ~ d5 ~ d5!3 ~ d5 ~ d5 c5", C: "~@8 d5!3 ~ d5 ~ d5 c5",
  D: "~@8 e5!3 ~ e5 f4 f5 d5", E: "~@10 e5 ~ e5 ~ e5 ~", F: "e5!3 ~ e5 f4 f5 d5 ~@8", G: "~@10 d5 ~ d5 ~ d5 ~",
  H: "d5!3 ~ d5 ~ d5 c5 ~@8", I: "d5!3 ~ d5 ~ d5 c5 ~@2 e5 ~ e5 ~ e5 ~", J: "a#4!3 ~ a#4 ~ a#4 a4 ~@8",
  K: "c5!3 ~ c5 ~ c5 a#4 ~@8", L: "c5!3 ~ c5 ~ c5 a#4 ~@2 d5 ~ d5 ~ d5 ~", M: "d5!3 ~ d5 ~ d5 c5 ~@2 d5 ~ d5 ~ d5 ~",
  N: "d5!3 ~ d5 ~ d5 c5 ~@2 c5 ~ c5 ~ c5 ~", O: "c5!3 ~ c5 ~ c5 b4 ~@8", P: "e5!3 ~ e5 ~ e5 d5 ~@8",
  Q: "e5!3 ~ e5 ~ e5 d5 ~@2 e5 ~ e5 ~ e5 ~", R: "~ e5!3 ~ e5 ~ e5 d5 ~@2 e5 ~@2 e5 ~",
  S: "e5 ~ e5!3 ~@2 e5 ~ e5 ~ d5 ~@4",
})).s("gm_trumpet").gain(0.45).pan(0.7)

// chords · piano
const piano = note(`<
  ~ A B A C D E F G H I J K D L M L N O@3 P@2 Q R S T U V W X Y Z@2 AA@2 AB@2 AC@2 AD AE AF AD AG@2 AH AI AJ AK AL AM AN
  AO AP AQ AJ AR AS AT AU AV AW AX I AY AZ BA@2 BB BC BD@2 BE BF BG BH BI BJ BK BL BM BN BO BD BP BQ BR BS BT BU BV BP
  BQ BR BS BT BU BV BP BQ BR BS BT BW BX@3
>`.pickRestart({
  A: "[e3,g3,c4] ~ [g3,c4] [a1,a2] [e3,g3,c4] ~ [e3,g3,c4] [a1,a2], [a1,a2]@3 ~ [a1,a2]@3 ~", // C C5 A C A
  B: "[e3,g3,c4] ~@2 [a1,a2] e3 ~@2 [a1,a2,c4], [a1,a2]@3 ~ [a1,a2,g3]@2 g3@2, ~@4 [e3,g3,c4]@4 c4 ~ e3@6", // C A Am A A7 C
  C: "[e3,g3,c4] ~ [g3,c4] [g1,g2] [e3,c4] ~@2 [g1,g2,c4], [g1,g2]@3 ~ [g1,g2]@3 ~, ~@2 g3!2, ~@5 e3@3", // C C5 G C C5 G
  D: "[f3,a3,c4] ~ [a3,c4] [d1,d2] [e3,a3,c4] ~ [e3,a3,c4] [d1,d2], [d1,d2]@3 ~ [d1,d2]@3 ~", // F Am D Am D
  E: "[g3,a3,c4] ~ [a3,c4] [d1,d2] [f3,a3,c4]!3 [d1,d2,f3,a3,c4], [d1,d2]@3 ~ [d1,d2]@3 ~", // Am7 Am D F Dm7 D
  F: "[d3,f3,c4] c4 [f3,c4] [g1,g2] [d3,f3,c4] ~ [d3,f3,c4] [g1,g2], [g1,g2]@3 ~ [g1,g2]@3 ~", // Dm7 F5 G Dm7 G
  G: "[d3,f3,b3] b3 [f3,b3] [g1,g2] [g2,d3,f3,b3] ~ [d3,f3,b3] g1, [g1,g2]@3 ~ g1@3 ~, ~@5 g2@3", // Bdim Fdim G G7 Bdim G
  H: "[e3,g3,c4] c4 [e3,g3,c4] [c2,c3] [e3,g3,b3] [g3,b3] [e3,g3,b3] [c2,c3], [c2,c3]@3 ~ [c2,c3]@3 ~", // C Em G Em C
  I: "[e3,g3,d4] d4 [e3,g3,d4] [c2,c3] [e3,g3,c4] [g3,c4] [e3,g3,c4] [c2,c3], [c2,c3]@3 ~ [c2,c3]@3 ~", // Em7 C C5 C
  J: "[e3,g3,c4] c4 [e3,g3,c4] [a1,a2] [e3,g3,c4] g3 [e3,g3,c4] [a1,a2], [a1,a2]@3 ~ [a1,a2]@3 ~", // C A C A
  K: "[e3,g3,c4] c4 [e3,g3,c4] [g1,g2] [e3,c4] ~@2 [g1,g2,c4], [g1,g2]@3 ~ [g1,g2]@3 ~, ~@2 g3!2, ~@5 e3@3", // C G C C5 G
  L: "[e3,g#3,b3] b3 [e3,g#3,b3] [g#1,g#2] [e3,g3,c4] g3 [e3,g3,c4] [a1,a2], [g#1,g#2]@3 ~ [a1,a2]@3 ~", // E G# C A G# A
  M: "[f3,a3,d4] d4 [f3,a3,d4] [d1,d2] [d3,g3,b3] g3 [d3,g3,b3] [g1,g2], [d1,d2]@3 ~ [g1,g2]@3 ~", // Dm D G D G
  N: "[f3,a3,d4] d4 [f3,a3,d4] [f1,f2] [d3,g3,b3] g3 [d3,g3,b3] [g1,g2], [f1,f2]@3 ~ [g1,g2]@3 ~", // Dm F G F G
  O: "[[e3,g#3,d4] d4 [e3,g#3,d4] [g#1,g#2] [a2,e3,a3,d4]!3 [a1,a2,e3,a3] [a2,e3,a3,c4]!3 [a1,a2,e3,a3,c4] [e3,g3,c4]!3 [c2,c3,g3] [e3,g3,b3]!3 [c2,c3,b3] [e3,g3,d4] d4 [e3,g3,d4] [c2,c3], [g#1,g#2]@3 ~ a1@3 d4@5 ~@3 c4@5 ~@4, ~@8 a1@3 ~ [c2,c3]@3 ~ [c2,c3]@3 ~ [c2,c3]@3 ~]/3", // E7 G# Asus4 A5 Am C C5 Em …
  P: "[[e3,g3,c4] [g3,c4] [e3,g3,c4] [c2,c3] [e3,g3,c4]!3 [a1,a2,g3] [e3,g3,b3]!3 [a1,a2,b3] [e3,g3,d4] d4 [e3,g3,d4] [a1,a2], [c2,c3]@3 ~ [a1,a2]@3 c4@5 ~@4, ~@8 [a1,a2]@3 ~ [a1,a2]@3 ~]/2", // C C5 C A7 Em Asus2 Em7 A …
  Q: "[g3,c4] [g3,c4,e4]!2 [a1,a2,g3,c4,e4] [a3,c4,e4]!3 [f1,f2], e3 ~, [a1,a2]@3 ~ [f1,f2]@3 ~", // C5 C Am7 Am F A F
  R: "[a3,c4,d4] [a3,c4] [a3,c4,d4] [f1,f2] [a3,c4,e4]!3 [f1,f2], [f1,f2]@3 ~ [f1,f2]@3 ~", // D7 Am D7 F Am F
  S: "[a3,c4,d4] [a3,c4] [a3,c4,d4] [f1,f2] [g3,b3,e4]!3 [g1,g2], [f1,f2]@3 ~ [g1,g2]@3 ~", // D7 Am D7 F Em G F G
  T: "[g3,b3,d4] [g3,b3] [g3,b3,d4] [g1,g2] [g3,b3,d4]!3 [g1,g2], [g1,g2]@3 ~ [g1,g2]@3 ~", // G
  U: "[g3,b3,d4] [g3,b3] [g3,b3,d4] [g1,g2] [f3,a3,d4]!3 [f1,f2], [g1,g2]@3 ~ [f1,f2]@3 ~", // G Dm F G F
  V: "[f3,a3,c4] [f3,a3] [f3,a3,c4] [f1,f2] [f3,a3,d4]!3 [f1,f2], [f1,f2]@3 ~ [f1,f2]@3 ~", // F Dm F
  W: "[f3,a3,c4] [f3,a3] [f3,a3,c4] [f1,f2] [f3,c4,e4]!3 [a#1,a#2,f3,c4,e4], [f1,f2]@3 ~ [a#1,a#2]@3 ~", // F Fmaj7 A#sus2 F A#
  X: "[f3,a#3,d4]!3 [a#1,a#2,f3,a#3,d4] [g3,a#3,e4]!3 [g1,g2,e4], [a#1,a#2]@3 ~ [g1,g2]@3 ~", // A# Edim C A# G
  Y: "[g3,a#3,e4] [g3,a#3] [g3,a#3,d4] [g1,g2,g3,a#3,d4] [c4,e4,g4]!3 [c1,c2,c4,e4,g4], [g1,g2]@3 ~ [c1,c2]@3 ~, ~ e4@3 ~@4", // Edim Gm C G C
  Z: "[[c4,e4,g4]!3 [c1,c2,c4,e4,g4] [a3,c4,f4]!3 [f1,f2,c4] [a3,c4,e4]!3 [f1,f2,e4] [a3,c4,g4] g4 [a3,c4,g4] [f1,f2], [c1,c2]@3 ~ [f1,f2]@3 f4@5 ~@4, ~@8 [f1,f2]@3 ~ [f1,f2]@3 ~]/2", // C F F5 Am Fmaj7 Am7 F C …
  AA: "[[a3,c4,f4] [c4,f4] [a3,c4,f4] [f1,f2] [a3,c4,f4]!3 [d2,d3,c4] [a3,c4,e4]!3 [d2,d3,e4] [a3,c4,g4] g4 [a3,c4,g4] [d2,d3], [f1,f2]@3 ~ [d2,d3]@3 f4@5 ~@4, ~@8 [d2,d3]@3 ~ [d2,d3]@3 ~]/2", // F F5 F D7 Am Dsus2 Am7 D …
  AB: "[[a3,c4,f4] [c4,f4] [c4,f4,a4] [d2,d3,c4,f4,a4] [d4,f4,a4]!3 [a#1,a#2,f4] [d4,f4,g4]!3 [a#1,a#2,g4] [d4,f4,a#4] ~ [d4,f4,a4] [g1,g2], [d2,d3]@3 ~ [a#1,a#2]@3 ~ [a#1,a#2]@3 ~ [f1,f2]@4, ~ a3@3 ~@3 a4@5 ~ a#4@3]/2", // F F5 F Dm7 Dm A#5 G7 D# …
  AC: "[[a#3,d4,g4] d4 [a#3,d4,f4] [g1,g2] [g3,c4,f4]!3 [c2,c3,c4] [g3,c4,e4]!3 [c2,c3,e4] [f3,a#3,e4]!3 [a#1,a#2,f3,a#3,e4], [g1,g2]@3 ~ [c2,c3]@3 ~ [c2,c3]@3 ~ [a#1,a#2]@3 ~, ~ g4@3 ~@3 f4@5 ~@4]/2", // Gm A# G Csus4 C A# G C …
  AD: "[f3,a#3,d4]!3 [a#1,a#2,f3,a#3,d4] [a#3,d4,g4] [a#3,d4] [a#3,d4,f4] [g1,g2,f4], [a#1,a#2]@3 ~ [g1,g2]@3 ~, ~@5 g4@3", // A# Gm A# G7 A# G
  AE: "[g3,a#3,e4] [g3,a#3] [g3,a#3,d4] [c2,c3,g3,a#3,d4] [f3,a#3,d4]!3 [f1,f2,f3,a#3,d4], [c2,c3]@3 ~ [f1,f2]@3 ~, ~ e4@3 ~@4", // Edim Gm A# C F
  AF: "[f3,a3,c4] c4 [g3,c4,e4] [f1,f2,g3,c4,e4] [f3,a#3,e4]!3 [a#1,a#2,f3,a#3,e4], [f1,f2]@3 ~ [a#1,a#2]@3 ~, ~ [f3,a3]@3 ~@4", // F C A# F A# F
  AG: "[[g3,a#3,e4]!2 [g3,a#3] [c2,c3,g3,a#3,f4] [a3,c4,f4]!3 [f1,f2,c4] [a3,c4,e4]!3 [f1,f2,e4] [a3,c4,g4] g4 [a3,c4,g4] [f1,f2], [c2,c3]@3 ~ [f1,f2]@3 ~ [f1,f2]@3 ~ [f1,f2]@3 ~, ~@2 e4@2 ~@3 f4@5 ~@4]/2", // Edim Gm Csus4 F F5 Am Fmaj7 Am7 …
  AH: "[a3,c4,f4] [c4,f4] [a3,c4,f4] [f1,f2] [e3,g3,c4] ~ [g3,c4] [a1,a2], [f1,f2]@3 ~ [a1,a2]@3 ~", // F F5 F C C5 A F A
  AI: "[e3,g3,c4] ~ [e3,g3,c4] [a1,a2] [e3,g3,c4] ~ [g3,c4] [g1,g2], [a1,a2]@3 ~ [g1,g2]@3 ~", // C A C C5 G A G
  AJ: "[e3,c4] ~@2 [g1,g2,c4] [f3,a3,c4] ~ [a3,c4] [d1,d2], [g1,g2]@3 ~ [d1,d2]@3 ~, g3!2 ~@2, ~ e3@3 ~@4", // C C5 F Am D G D
  AK: "[e3,a3,c4] ~ [e3,a3,c4] [d1,d2] [g3,a3,c4] ~ [a3,c4] [d1,d2], [d1,d2]@3 ~ [d1,d2]@3 ~", // Am D Am7 Am D
  AL: "[f3,a3,c4]!3 [d1,d2,f3,a3,c4] [d3,f3,c4] c4 [f3,c4] [g1,g2], [d1,d2]@3 ~ [g1,g2]@3 ~", // F Dm7 F5 G D G
  AM: "[d3,f3,c4] ~ [d3,f3,c4] [g1,g2] [d3,f3,b3] b3 [f3,b3] [g1,g2], [g1,g2]@3 ~ [g1,g2]@3 ~", // Dm7 G Bdim Fdim G
  AN: "[g2,d3,f3,b3] ~ [d3,f3,b3] g1 [e3,g3,c4] c4 [e3,g3,c4] [c2,c3], g1@3 ~ [c2,c3]@3 ~, ~ g2@3 ~@4", // G7 Bdim C
  AO: "[e3,g3,b3] [g3,b3] [e3,g3,b3] [c2,c3] [e3,g3,d4] d4 [e3,g3,d4] [c2,c3], [c2,c3]@3 ~ [c2,c3]@3 ~", // Em G Em C Em7 C
  AP: "[e3,g3,c4] [g3,c4] [e3,g3,c4] [c2,c3] [e3,g3,c4] c4 [e3,g3,c4] [a1,a2], [c2,c3]@3 ~ [a1,a2]@3 ~", // C C5 C A C A
  AQ: "[e3,g3,c4] g3 [e3,g3,c4] [a1,a2] [e3,g3,c4] c4 [e3,g3,c4] [g1,g2], [a1,a2]@3 ~ [g1,g2]@3 ~", // C A C G A G
  AR: "[e3,a3,c4] ~ [e3,a3,c4] [d1,d2] [e3,g#3,b3] b3 [e3,g#3,b3] [g#1,g#2], [d1,d2]@3 ~ [g#1,g#2]@3 ~", // Am D E G# D G#
  AS: "[e3,g3,c4] g3 [e3,g3,c4] [a1,a2] [f3,a3,d4] d4 [f3,a3,d4] [d1,d2], [a1,a2]@3 ~ [d1,d2]@3 ~", // C A Dm D A D
  AT: "[d3,g3,b3] g3 [d3,g3,b3] [g1,g2] [e3,g#3,b3] b3 [e3,g#3,b3] [g#1,g#2], [g1,g2]@3 ~ [g#1,g#2]@3 ~", // G E G# G G#
  AU: "[e3,g3,c4] g3 [e3,g3,c4] [a1,a2] [f3,a3,d4] d4 [f3,a3,d4] [f1,f2], [a1,a2]@3 ~ [f1,f2]@3 ~", // C A Dm F A F
  AV: "[d3,g3,b3] g3 [d3,g3,b3] [g1,g2] [e3,g#3,d4] d4 [e3,g#3,d4] [g#1,g#2], [g1,g2]@3 ~ [g#1,g#2]@3 ~", // G E7 G# G G#
  AW: "[a2,e3,a3,d4]!3 [a1,a2,e3,a3] [a2,e3,a3,c4]!3 [a1,a2,e3,a3,c4], a1@3 d4@5, ~@4 a1@3 ~", // Asus4 A5 Am
  AX: "[e3,g3,c4]!3 [c2,c3,g3] [e3,g3,b3]!3 [c2,c3,b3], [c2,c3]@3 c4@5, ~@4 [c2,c3]@3 ~", // C C5 Em Cmaj7 C
  AY: "[e3,g3,c4]!3 [a1,a2,g3] [e3,g3,b3]!3 [a1,a2,b3], [a1,a2]@3 c4@5, ~@4 [a1,a2]@3 ~", // C A7 Em Asus2 A
  AZ: "[e3,g3,d4] d4 [e3,g3,d4] [a1,a2] [g3,c4] [g3,c4,e4]!2 [a1,a2,g3,c4,e4], [a1,a2]@3 ~ e3@4, ~@4 [a1,a2]@3 ~", // Em7 A C5 C Am7 A
  BA: "[a3,c4,e4]!3 [f1,f2] [a3,c4,d4] [a3,c4] [a3,c4,d4] [f1,f2], [f1,f2]@3 ~ [f1,f2]@3 ~", // Am F D7 Am D7 F
  BB: "[g3,b3,e4]!3 [g1,g2] [g3,b3,d4] [g3,b3] [g3,b3,d4] [g1,g2], [g1,g2]@3 ~ [g1,g2]@3 ~", // Em G
  BC: "[g3,b3,d4]!3 [g1,g2] [g3,b3,d4] [g3,b3] [g3,b3,d4] [g1,g2], [g1,g2]@3 ~ [g1,g2]@3 ~", // G
  BD: "[f3,a3,d4]!3 [f1,f2] [f3,a3,c4] [f3,a3] [f3,a3,c4] [f1,f2], [f1,f2]@3 ~ [f1,f2]@3 ~", // Dm F
  BE: "[f3,c4,e4]!3 [a#1,a#2,f3,c4,e4] [f3,a#3,d4]!3 [a#1,a#2,f3,a#3,d4], [a#1,a#2]@3 ~ [a#1,a#2]@3 ~", // Fmaj7 A#sus2 A#
  BF: "[g3,a#3,e4]!3 [g1,g2,e4] [g3,a#3,e4] [g3,a#3] [g3,a#3,d4] [g1,g2,g3,a#3,d4], [g1,g2]@3 ~ [g1,g2]@3 ~, ~@5 e4@3", // Edim C Edim Gm G
  BG: "[c4,e4,g4]!3 [c1,c2,c4,e4,g4] [c4,e4,g4]!3 [c1,c2,c4,e4,g4], [c1,c2]@3 ~ [c1,c2]@3 ~", // C
  BH: "[a3,c4,f4]!3 [f1,f2,c4] [a3,c4,e4]!3 [f1,f2,e4], [f1,f2]@3 f4@5, ~@4 [f1,f2]@3 ~", // F F5 Am Fmaj7 F
  BI: "[a3,c4,g4] g4 [a3,c4,g4] [f1,f2] [a3,c4,f4] [c4,f4] [a3,c4,f4] [f1,f2], [f1,f2]@3 ~ [f1,f2]@3 ~", // Am7 F F5 F
  BJ: "[d3,f3,a#3]!3 [a#1,a#2,f3] [d3,f3,a3]!3 [a#1,a#2,a3], [a#1,a#2]@3 a#3@5, ~@4 [a#1,a#2]@3 ~", // A# A#5 Dm A#maj7 A#
  BK: "[d3,f3,c4] c4 [d3,f3,c4] [a#1,a#2] [d3,f3,a#3] [f3,a#3] [d3,f3,a#3] [a#1,a#2], [a#1,a#2]@3 ~ [a#1,a#2]@3 ~", // Dm7 A# A#5 A#
  BL: "[d3,f3,a#3]!3 [g1,g2,f3] [d3,f3,a3]!3 [g1,g2,a3], [g1,g2]@3 a#3@5, ~@4 [g1,g2]@3 ~", // A# G7 Dm Gsus2 G
  BM: "[d3,f3,c4] c4 [d3,f3,c4] [g1,g2] [f3,a#3] [f3,a#3,d4]!2 [g1,g2,f3,a#3,d4], [g1,g2]@3 ~ d3@4, ~@4 [g1,g2]@3 ~", // Dm7 G A#5 A# Gm7 G
  BN: "[g3,a#3,d4]!3 [d#1,d#2] [g3,a#3,c4] [g3,a#3] [g3,a#3,c4] [d#1,d#2], [d#1,d#2]@3 ~ [d#1,d#2]@3 ~", // Gm D# C7 Gm C7 D#
  BO: "[g3,a#3,d4]!3 [c2,c3] [g3,a#3,c4] [g3,a#3] [g3,a#3,c4] [c2,c3], [c2,c3]@3 ~ [c2,c3]@3 ~", // Gm C C7 Gm C7 C
  BP: "[e3,g3,c4]!3 [c2,c3,e3,g3] [e3,g3,b3]!3 [c2,c3,e3,g3,b3], [c2,c3]@3 c4@5, ~@4 [c2,c3]@3 ~", // C Em Cmaj7 C
  BQ: "[e3,g3,d4]!3 [c2,c3] [e3,g3,c4]!3 [c2,c3], [c2,c3]@3 ~ [c2,c3]@3 ~", // Em7 C
  BR: "[e3,g3,c4]!3 [a1,a2,e3,g3] [e3,g3,b3]!3 [a1,a2,e3,g3,b3], [a1,a2]@3 c4@5, ~@4 [a1,a2]@3 ~", // C A7 Em A
  BS: "[e3,g3,d4]!3 [a1,a2] [g3,c4] [g3,c4,e4]!2 [a1,a2,g3,c4,e4], [a1,a2]@3 ~ e3@4, ~@4 [a1,a2]@3 ~", // Em7 A C5 C Am7 A
  BT: "[a3,c4,e4]!3 [f1,f2,c4] [a3,c4,d4]!3 [f1,f2], [f1,f2]@3 ~ [f1,f2]@3 ~", // Am F5 D7 F
  BU: "[a3,c4,e4]!3 [d2,d3,c4] [a3,c4,d4]!3 [d2,d3], [d2,d3]@3 ~ [d2,d3]@3 ~", // Am D7 D
  BV: "[g3,b3,e4]!3 [g1,g2,b3] [g3,b3,d4]!3 [g1,g2], [g1,g2]@3 ~ [g1,g2]@3 ~", // Em G
  BW: "~ [a3,c4,e4]@2 [a3,c4,e4]@2 [a3,c4,e4]@2 [d2,d3,c4]@2 [a3,c4,d4]@2 [a3,c4,d4]@2 ~ [a3,c4,d4]@2, ~ [d2,d3]@6 ~@2 [d2,d3]@7", // Am D7 D
  BX: "[[d2,d3]@2 [g3,b3,e4]@2 [g3,b3,e4]@2 ~ [g3,b3,e4]@2 [g1,g2,b3]@2 [g3,b3,d4]@3 [g3,b3,d4]@3 [g3,b3,d4]@3 [g1,g2]@2 ~ [c1,c2,g4,c5]@25, ~@2 [g1,g2]@7 ~@2 [g1,g2]@8 ~@3 e4@24 ~@2]/3", // D Em G C5 G
})).s("gm_piano").gain(0.48)

// chords · piano · soft notes
const piano_soft = note(`<
  ~ A B A C D E F G H I J K D L M L M N O P@2 Q@8 R ~ S T@2 U@2 V W X Y ~@2 Y S Z@2 AA AB@3 AC AD@3 AE AF@2 AG AH AG AI
  ~ AJ I AJ AK AL@2 AM@2 AN@2 ~ AO ~ AP AQ AR AS AR AT AU@2 AV ~ AW ~ AX AY@2 AZ ~ AW ~ AX AY@2 AZ ~ AW ~ AX AY BA@3 ~
>`.pickRestart({
  A: "~ [e3,g3,c4] e3 [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4]", B: "~ [e3,g3,c4] ~@6",
  C: "~ [e3,g3,c4] e3 [e3,g3,c4] ~ c4@2 ~", D: "~ [f3,a3,c4] f3 [a3,c4] ~ [e3,a3,c4] ~ [e3,a3,c4], ~@3 f3@5",
  E: "~ [g3,a3,c4] g3 [a3,c4] ~@4, ~@3 g3@5", F: "~ [d3,f3] d3 [d3,f3,c4] ~ [d3,f3,c4] ~ [d3,f3,c4]",
  G: "~ [d3,f3] d3 [d3,f3,b3] ~ [d3,f3,b3] ~ [d3,f3,b3]", H: "~ [e3,g3] ~ [e3,g3] ~ e3 ~ [e3,g3,b3], ~@3 c4@5",
  I: "~ [e3,g3] ~ [e3,g3] ~ e3 ~ [e3,g3,c4], ~@3 d4@5", J: "~ [e3,g3] ~ [e3,g3,c4] ~ [e3,c4] ~ [e3,g3,c4]",
  K: "~ [e3,g3] ~ [e3,g3,c4] ~ c4@2 ~", L: "~ [e3,g#3] ~ [e3,g#3,b3] ~ [e3,c4] ~ [e3,g3,c4]",
  M: "~ [f3,a3] ~ [f3,a3,d4] ~ [d3,b3] ~ [d3,g3,b3]", N: "~ [e3,g#3] ~ [e3,g#3,d4] ~@4", O: "~@7 e3",
  P: "[~@3 [e3,g3] ~ [e3,g3] ~ [e3,g3] ~ e3 ~ [e3,g3,c4] ~@3 e3, ~@7 d4@5 ~@4]/2", // Em C
  Q: "[~@3 [e3,g3] ~ [e3,g3] ~ [e3,g3] ~@7 [a3,c4] ~ d4 ~ [a3,c4] ~@3 [a3,c4] ~ d4 ~ [a3,c4,d4] ~@3 [g3,b3] ~ d4 ~ [g3,b3,d4] ~@3 [g3,b3,d4] ~ d4 ~ [g3,b3,d4] ~@3 [f3,a3] ~ c4 ~ [f3,a3] ~@3 [f3,a3] ~ c4 ~ [f3,a3,c4] ~@4, ~@7 d4@5 ~@3 e4@5 ~@3 e4@5 ~@3 e4@13 ~@7 c4@5 ~@8, ~@19 d4@5 ~@23 d4@5 ~@3 d4@5 ~@4]/8", // Em Am D7 G F
  R: "~@7 [g3,a#3]", S: "~@7 a3", T: "[~@3 [a3,c4] ~ [a3,c4] ~ [a3,c4] ~ a3 ~ [a3,c4,f4] ~@3 a3, ~@7 g4@5 ~@4]/2",
  U: "[~@3 [a3,c4] ~ [a3,c4] ~ [a3,c4] ~@7 d4, ~@7 g4@5 ~@4]/2", V: "~@3 [d4,f4] ~ [d4,f4] ~ [d4,f4,a4]",
  W: "~ a#3 ~ [a#3,d4,f4] ~@3 g3", X: "~@3 [g3,c4] ~@4", Y: "~@7 [a#3,d4]",
  Z: "[~@3 [a3,c4] ~ [a3,c4] ~ [a3,c4] ~ a3 ~ [a3,c4,f4] ~ [e3,g3,c4] e3 [e3,g3,c4], ~@7 g4@5 ~@4]/2", // Am F C
  AA: "~ [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4] e3 [e3,g3,c4]", // C
  AB: "[~ c4@2 ~@2 [f3,a3,c4] f3 [a3,c4] ~ [e3,a3,c4] ~ [e3,a3,c4] ~ [g3,a3,c4] g3 [a3,c4] ~@5 [d3,f3] d3 [d3,f3,c4], ~@7 f3@5 ~@3 g3@5 ~@4]/3", // F Am Am7 Am Dm Dm7
  AC: "~ [d3,f3,c4] ~ [d3,f3,c4] ~ [d3,f3] d3 [d3,f3,b3]", // Dm7 Dm Bdim
  AD: "[~ [d3,f3,b3] ~ [d3,f3,b3] ~ [e3,g3] ~ [e3,g3] ~ e3 ~ [e3,g3,b3] ~ [e3,g3] ~ [e3,g3] ~ e3 ~ [e3,g3,c4] ~ [e3,g3] ~ [e3,g3,c4], ~@7 c4@5 ~@3 d4@5 ~@4]/3", // Bdim Em C Em C
  AE: "~ [e3,c4] ~ [e3,g3,c4] ~ [e3,g3] ~ [e3,g3,c4]", // C Em C
  AF: "[~ c4@2 ~@2 [f3,a3,c4] f3 [a3,c4] ~ [e3,a3,c4] ~ [e3,a3,c4] ~ [e3,g#3] ~ [e3,g#3,b3], ~@7 f3@5 ~@4]/2", // F Am E
  AG: "~ [e3,c4] ~ [e3,g3,c4] ~ [f3,a3] ~ [f3,a3,d4]", AH: "~ [d3,b3] ~ [d3,g3,b3] ~ [e3,g#3] ~ [e3,g#3,b3]",
  AI: "~ [d3,b3] ~ [d3,g3,b3] ~ [e3,g#3] ~ [e3,g#3,d4]", AJ: "~@3 e3 ~@3 [e3,g3]",
  AK: "~ [e3,g3] ~ [e3,g3] ~@4, ~@3 d4@5", // Em
  AL: "[~@3 [a3,c4] ~ d4 ~ [a3,c4] ~@3 [a3,c4] ~ d4 ~ [a3,c4,d4], ~@3 e4@5 ~@3 e4@5, ~@7 d4@5 ~@4]/2", // Am D7
  AM: "[~@3 [g3,b3] ~ d4 ~ [g3,b3,d4] ~@3 [g3,b3,d4] ~ d4 ~ [g3,b3,d4], ~@3 e4@13]/2", // G
  AN: "[~@3 [f3,a3] ~ c4 ~ [f3,a3] ~@3 [f3,a3] ~ c4 ~ [f3,a3,c4], ~@3 d4@5 ~@3 d4@5, ~@7 c4@5 ~@4]/2", // F
  AO: "~@3 [g3,a#3] ~@4", AP: "~@3 a3 ~@3 [a3,c4]", AQ: "~ [a3,c4] ~ [a3,c4] ~ a3 ~ [a3,c4,f4], ~@3 g4@5",
  AR: "~@3 d3 ~@3 [d3,f3]", AS: "~ [d3,f3] ~ [d3,f3] ~ d3 ~ [d3,f3,a#3], ~@3 c4@5",
  AT: "~ [d3,f3] ~ [d3,f3] ~@4, ~@3 c4@5", AU: "~@3 [g3,a#3] ~ c4 ~ [g3,a#3,c4], ~@3 d4@5",
  AV: "~@3 [f3,a3] ~ c4 ~ [f3,a3,c4], ~@3 d4@5", AW: "~@3 [e3,g3] ~@3 [e3,g3,c4], ~@3 d4@5",
  AX: "~@3 [e3,g3] ~@4, ~@3 d4@5", AY: "~@3 a3 ~@3 [a3,c4,d4], ~@3 e4@5", AZ: "~@3 g3 ~@3 [g3,b3,d4], ~@3 e4@5",
  BA: "[~@7 a3@2 ~@7 [a3,c4,d4]@2 ~@7 g3@2 ~@9 [g3,b3,d4]@3 ~@9, ~@7 e4@11 ~@7 e4@13 ~@10]/3", // D7 G
})).s("gm_piano").gain(0.24)

// drums · kick
const kick = s("bd").struct("<~ A@18 B@43 C A@28 C A@6 C A@4 D ~ E F ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@3 x ~@2 x", C: "x!2", D: "x", E: "~ x ~@6", F: "~@7 x ~@8",
})).gain(0.72)

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

// drums · low tom
const low_tom = s("lt").struct("<~@29 A ~@2 B ~@3 B ~@2 B ~@33 C ~ D ~ D ~@6 D ~@6 E ~@6 E ~@9>".pickRestart({
  A: "~ x", B: "~@5 x!2 ~@9", C: "x", D: "~@13 x!2 ~", E: "~@14 x!2",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B A@10 C D@3 E F G H F H D A@3 I A@4 I A@3 I A@4 J A@2 J A J A@10 H D@3 K L C D C D F A@3 F A@4 F A F A@3 F A@2 F
  A F A F A M F A F A F A M F A F A F N O P ~
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~", C: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", D: "~ x!3 ~ x!3",
  E: "~ x!3 ~@2 x!2", F: "~ x!7", G: "x!2 ~@2 x ~@3 x ~ x ~ x ~ x ~", H: "x ~ x ~ x ~ x!2 ~@2 x ~ x ~ x ~",
  I: "x!4 ~ x!3", J: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~", K: "~@2 x!2 ~ x!3", L: "x ~ x ~ x ~ x ~ x!2 ~@2 x ~@3",
  M: "x!4 ~ x ~ x", N: "~ x ~ x ~ x ~ x ~ x ~ x ~@2 x ~", O: "x ~@3 x ~@2 x ~ x ~ x ~@2 x ~", P: "~ x ~@14",
})).gain(0.56)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A B A C A D A C A D A C A E A C F D G H I H I A G A G A G A G@2 A G A G A G@2 A J A@2 J A J K A@2 I K A@2 I K A H I
  K A L M A E A E A N A N A N A N@2 A N A N A N A N@2 A N A N A N A@2 N A N A N A@2 N A N@2 O P Q ~
>`.pickRestart({
  A: "~@5 x ~@7 x ~@2", B: "~@5 x ~@5 x ~ x ~ x", C: "~@3 x ~@9 x ~@2", D: "~@5 x ~@9 x", E: "~@5 x ~ x ~@7 x",
  F: "~@5 x ~@4 x ~@2 x ~@2", G: "~@13 x ~@2", H: "~@5 x ~@7 x ~ x", I: "~@7 x ~@5 x ~@2", J: "~@3 x ~ x ~ x ~@5 x ~@2",
  K: "~@5 x ~@5 x ~@4", L: "~@2 x ~@2 x ~@7 x ~@2", M: "~@7 x ~@8", N: "~@5 x ~@10", O: "~@3 x ~@4", P: "~ x",
  Q: "~@3 x ~@12",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~@22 B ~@3 B ~ B ~@2 C ~@3 D ~@2 D ~@26 E ~@3 E ~ E ~@2 F ~ F ~ G ~ H ~@2 F ~ G ~ H ~@2 I ~ G ~ H ~@2 I ~ G ~ H ~@5
>`.pickRestart({
  A: "~@13 x!2 ~", B: "~ x!3 ~@4", C: "~ x!2 ~ x ~@11", D: "~ x!2 ~@13", E: "~@5 x!3", F: "~@9 x!2 ~ x ~@3", G: "~@7 x",
  H: "~@6 x!2", I: "~@2 x!2",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@14 A@4 B C D B D B ~@33 D A@4 E ~ A ~ A ~@39 F ~>".pickRestart({
  A: "x!2", B: "x", C: "~ x ~@6", D: "~ x", E: "~@5 x ~@2", F: "~ x ~@2",
})).gain(0.56)

// … 11 more lines

More by Amedeo Minghi