Strudelify

Luna rossa

Renzo Arbore

KeyA majorTempo89 bpm
0:00/0:00
// Luna rossa — Renzo Arbore
// 89 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 88 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 24.
setcpm(89/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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@7 B A@3 C A@3 C A D E F E@3 F E@2 A C G H I@3 F@4 I@4 J F@4 I K@2 L M@4 N O P Q@3 R@4 Q S Q@3 R@4 Q T U@3 V@4 M W@3
  M X
>`.pickRestart({
  A: "[a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4] [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4] [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4] [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4] [a2,e3,a3,c4,e4]@2", // Am
  B: "[b2,g#3,b3,d4,f4]@2 [b2,g#3,b3,d4,f4] [b2,g#3,b3,d4,f4]@2 [b2,g#3,b3,d4,f4] [b2,g#3,b3,d4,f4]@2 [b2,g#3,b3,d4,f4]@2 [b2,g#3,b3,d4,f4] [b2,g#3,b3,d4,f4]@2 [b2,g#3,b3,d4,f4] [b2,g#3,b3,d4,f4]@2", // Bdim
  C: "[b2,e3,g#3,b3,e4]@2 [b2,e3,g#3,b3,e4] [b2,e3,g#3,b3,e4]@2 [b2,e3,g#3,b3,e4] [b2,e3,g#3,b3,e4]@2 [b2,e3,g#3,b3,e4]@2 [b2,e3,g#3,b3,e4] [b2,e3,g#3,b3,e4]@2 [b2,e3,g#3,b3,e4] [b2,e3,g#3,b3,e4]@2", // E
  D: "[a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4] [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4] [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4] [a2,g3,a3,c#4,e4]@2 [a2,g3,a3,c#4,e4] [a2,g3,a3,c#4,e4]@2", // Am A7
  E: "[a2,d3,a3,d4,f4]@2 [a2,d3,a3,d4,f4] [a2,d3,a3,d4,f4]@2 [a2,d3,a3,d4,f4] [a2,d3,a3,d4,f4]@2 [a2,d3,a3,d4,f4]@2 [a2,d3,a3,d4,f4] [a2,d3,a3,d4,f4]@2 [a2,d3,a3,d4,f4] [a2,d3,a3,d4,f4]@2", // Dm
  F: "[a2,g3,a3,c#4,e4]@2 [a2,g3,a3,c#4,e4] [a2,g3,a3,c#4,e4]@2 [a2,g3,a3,c#4,e4] [a2,g3,a3,c#4,e4]@2 [a2,g3,a3,c#4,e4]@2 [a2,g3,a3,c#4,e4] [a2,g3,a3,c#4,e4]@2 [a2,g3,a3,c#4,e4] [a2,g3,a3,c#4,e4]@2", // A7
  G: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,d3,a3,d4,f#4]!2", // A D
  H: "[a2,d3,a3,d4,f#4] ~@5 [a2,d3,a3,d4]@2", // D D5
  I: "[d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2", // D
  J: "[d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4]@2 [d3,f#3,a3,d4,f#4] [d3,f#3,a3,d4,f#4]@2 [d#3,a3,b3,f#4] [d#3,a3,b3,f#4]@2", // D B7
  K: "[d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2", // Dm
  L: "[d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 [d3,a3,c4,f#4]@2 [d3,a3,c4,f#4] [d3,a3,c4,f#4]@2 [d3,a3,c4,f#4] [d3,a3,c4,f#4]@2", // Dm D7
  M: "[g3,a#3,d4,g4]@2 [g3,a#3,d4,g4] [g3,a#3,d4,g4]@2 [g3,a#3,d4,g4] [g3,a#3,d4,g4]@2 [g3,a#3,d4,g4]@2 [g3,a#3,d4,g4] [g3,a#3,d4,g4]@2 [g3,a#3,d4,g4] [g3,a#3,d4,g4]@2", // Gm
  N: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a#2,f3,a#3,d4,e4]@2 [a#2,f3,a#3,d4,e4] [a#2,f3,a#3,d4,e4]@2 [a#2,f3,a#3,d4,e4] [a#2,f3,a#3,d4,e4]@2", // A A#
  O: "[a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2 [a2,e3,a3,c#4,e4] [a2,e3,a3,c#4,e4]@2", // A
  P: "[a2,e3,a3,c#4,e4] ~@7", // A
  Q: "[f#3,a#3,c#4,f#4]@2 [f#3,a#3,c#4,f#4] [f#3,a#3,c#4,f#4]@2 [f#3,a#3,c#4,f#4] [f#3,a#3,c#4,f#4]@2 [f#3,a#3,c#4,f#4]@2 [f#3,a#3,c#4,f#4] [f#3,a#3,c#4,f#4]@2 [f#3,a#3,c#4,f#4] [f#3,a#3,c#4,f#4]@2", // F#
  R: "[c#3,g#3,b3,c#4,f4]@2 [c#3,g#3,b3,c#4,f4] [c#3,g#3,b3,c#4,f4]@2 [c#3,g#3,b3,c#4,f4] [c#3,g#3,b3,c#4,f4]@2 [c#3,g#3,b3,c#4,f4]@2 [c#3,g#3,b3,c#4,f4] [c#3,g#3,b3,c#4,f4]@2 [c#3,g#3,b3,c#4,f4] [c#3,g#3,b3,c#4,f4]@2", // C#7
  S: "[f#3,a#3,c#4,f#4]@2 [f#3,a#3,c#4,f#4] [f#3,a#3,c#4,f#4]@2 [f#3,a#3,c#4,f#4] [f#3,a#3,c#4,f#4]@2 [f#3,a#3,c#4,f#4] [c#3,g#3,b3,c#4,f4]@2 [c#3,g#3,b3,c#4,f4] [c#3,g#3,b3,c#4,f4]@4", // F# C#7
  T: "[f#3,a#3,c#4,f#4]@2 [d3,a3,d4,g4]@3 [d3,a3,d4,g4]@2 [d3,a3,d4,g4] [d3,a3,d4,g4]@3 [d3,a3,d4,g4]@3 [d3,a3,d4,g4]@2", // F# Dsus4
  U: "[g3,b3,d4,g4]@2 [g3,b3,d4,g4] [g3,b3,d4,g4]@2 [g3,b3,d4,g4] [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,g4] [g3,b3,d4,g4]@2 [g3,b3,d4,g4] [g3,b3,d4,g4]@2", // G
  V: "[d3,a3,c4,d4,f#4]@2 [d3,a3,c4,d4,f#4] [d3,a3,c4,d4,f#4]@2 [d3,a3,c4,d4,f#4] [d3,a3,c4,d4,f#4]@2 [d3,a3,c4,d4,f#4]@2 [d3,a3,c4,d4,f#4] [d3,a3,c4,d4,f#4]@2 [d3,a3,c4,d4,f#4] [d3,a3,c4,d4,f#4]@2", // D7
  W: "[c3,g3,c4,d#4]@2 [c3,g3,c4,d#4] [c3,g3,c4,d#4]@2 [c3,g3,c4,d#4] [c3,g3,c4,d#4]@2 [c3,g3,c4,d#4]@2 [c3,g3,c4,d#4] [c3,g3,c4,d#4]@2 [c3,g3,c4,d#4] [c3,g3,c4,d#4]@2", // Cm
  X: "[g3,a#3,d4,g4]@2 [g3,a#3,d4,g4]@3 [g3,a#3,d4,g4]!4 ~@7", // Gm
})).s("gm_acoustic_guitar_steel").gain(0.23)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~ A B C D E B C D F ~@7 G H I J K L M N ~ O P Q ~@17 R S@2 T U V W X Y Z ~@24 AA AB ~@5 AC
>`.pickRestart({
  A: "~@13 a3 c4 e4", B: "a4!24 g#4!4 a4!2 g#4 a4", C: "g#4!24 f4!6 g4 f4", D: "e4!32", E: "e4 ~@19 a3@4 c4@4 e4@4",
  F: "e4 ~@31", G: "~@18 e3@2 g3 ~ a3@2 b3 ~ c#4 ~ d4 ~ e4 ~", H: "[f4,f5]!28 [g4,g5]!2 [f#4,f#5] [f4,f5]",
  I: "[e4,e5]!28 [g4,g5]!4", J: "[f4,f5]!22 f5!3 ~@7",
  K: "~@2 a4@2 g4 ~ f4@3 ~ f4@2 e4@2 d4@3 ~ d4@2 e4@2 f4 ~ g4@2 e4@2 d4@2 e4@2",
  L: "[d4,d5]!28 [e4,e5]!2 [d#4,d#5] [d4,d5]", M: "[c#4,c#5]!28 [e4,e5]!4", N: "[d4,d5]!19 d5!12 ~",
  O: "a4!24 b4!6 a#4 a4", P: "g#4!32", Q: "a4!22 ~@10", R: "~@28 a4 g#4 g4 f#4", S: "f4!32", T: "f4!16 f#4!16",
  U: "g4!28 a4!4", V: "a#4!4 [a#4,a5]!12 [g4,a#5]!4 [g4,g5]!12", W: "[g4,g5]!16 [g4,f5]!16", X: "[g4,e5]!16 [g4,d5]!16",
  Y: "[a4,c#5]!16 d5!16", Z: "[a4,c#5]!18 ~@14",
  AA: "~@2 c5@2 b4@2 a4@2 g#4@2 a4@2 b4@2 a4 ~ b4 c5@2 ~ c5@2 a4@2 ~@2 a4 ~ f4@2 f#4@2", AB: "d4!2 ~ d4!21 ~@8",
  AC: "[g4,a#4,d5]@2 ~@2 [g4,a#4,d5] ~@5 [g4,a#4,d5] ~ [g4,a#4,d5] ~ [g4,a#4,d5] ~ [g4,a#4,d5] ~@15", // Gm
})).s("gm_acoustic_guitar_nylon").gain(0.16).pan(0.2)

// other · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note("<~@5 A ~@3 A ~@10 B ~@3 C ~@3 D ~@25 E F ~@32>".pickRestart({
  A: "~ e4!15 ~@16", B: "~@22 f4!3 [f4,f5]!7", C: "~@19 d4!12 [d4,d5]", D: "~@22 a4!6 ~@4", E: "~@16 g4!16",
  F: "~@18 [a4,c#5]!14", // A
})).s("gm_acoustic_guitar_nylon").gain(0.08).pan(0.2)

// other · banjo
const banjo = note(`<
  ~ A B C D E B C D ~@8 F G H I J K L M ~ N O P ~@17 Q R S T U V W X Y Z ~@24 AA AB ~@6
>`.pickRestart({
  A: "~@13 a4 c5 e5", B: "a5!24 g#5!4 a5!2 g#5 a5", C: "g#5!24 f5!6 g5 f5", D: "e5!30 ~@2", E: "~@5 a4 c5 e5",
  F: "~@18 a4@2 b4@2 c#5@2 d5 ~ e5@2 f5 ~ g5@2", G: "a5!28 a#5!2 a5 g#5", H: "g5!28 a#5!4", I: "a5!23 ~@9",
  J: "~@2 a5@2 g5@2 f5@2 ~@2 f5@2 e5@2 d5@3 ~ d5 ~ d5 ~ d5 ~ d5@2 c#5@2 b4@2 c#5@2", K: "f5!28 g5!2 f#5 f5",
  L: "e5!28 g5!4", M: "f5!24 ~@8", N: "e5!24 f5!6 e5 d#5", O: "d5!32", P: "e5!22 ~@10", Q: "~@28 a5 g#5 g5 f#5",
  R: "f5!22 ~@10", S: "f5!32", T: "f5!16 f#5!16", U: "g5!28 a5!4", V: "a#5!32", W: "g5!16 f5!16", X: "e5!16 d5!16",
  Y: "c#5!16 d5!16", Z: "c#5!16 ~@16",
  AA: "~@2 [c5,c6]@2 [b4,b5]@2 a5@2 [g#4,g#5]@2 [a4,a5]@2 [b4,b5]@2 [a4,a5]@2 [b4,c6] ~@3 c6@2 [a4,a5]@2 ~@2 a4@2 [f4,f5]@2 f#5@2, ~@6 a4 ~@9 c5@2 ~@2 c5 ~@4 a5@2 ~@3 f#4 ~", // C B G# A B A Cmaj7 A …
  AB: "[d4,d5]!3 d5 [d4,d5]!11 d5 [d4,d5]!3 d4@2 d5 ~@10, ~@19 d5 ~@12", // D
})).s("gm_banjo").gain(0.24).pan(0.7)

// other · banjo · soft notes
const banjo_soft = note("<~@4 A B ~@2 A B ~@10 C ~@3 D ~@3 E ~@18 F ~@7 G ~@25 H ~@6>".pickRestart({
  A: "~@30 e5!2", B: "e5!16 ~@16", C: "~@23 a5!9", D: "~@24 f5!8", E: "~@22 e5!6 ~@4", F: "~@22 f5!10",
  G: "~@16 c#5!16", H: "~@20 d5 d4!3 ~ [d4,d5] ~@6, ~@22 d5@3 ~@7",
})).s("gm_banjo").gain(0.12).pan(0.7)

// bass · electric bass finger
const bass = note(`<
  ~ A B C@4 D E C@2 F C@3 G C H I J I@3 J I@2 K G L M N@3 J@4 N O N@2 P Q J@3 N I@2 R S@4 T J U V@2 W X Y@3 V Z V@2 AA
  AB Y@3 V AC AD@2 AE AF N@3 AG AH@3 S AI
>`.pickRestart({
  A: "~@3 a2", B: "a1 ~ a1@6 e2@6 c3@3 ~ a1@6 e2@6 c3@2", C: "~@2 a1@6 e2@6 c3@3 ~ a1@6 e2@6 c3@2",
  D: "~@2 b1@5 ~ d2@5 ~ f2@6 g#2@5 ~ f2@6", E: "e2 ~ a1@6 e2@6 c3@3 ~ a1@6 e2@6 c3@2",
  F: "~@2 e1@6 b1@6 g#2@3 ~ e1@6 b1@6 g#2@2", G: "~ e1@3 g#1@2 b1@2 c2@3 b1@3 e1@2",
  H: "~@2 a1@6 e2@6 c3@3 ~ a1@6 c#2@6 e2@2", I: "~@2 d2@6 f2@6 a2@3 ~ d2@6 f2@6 a2@2",
  J: "~@2 a1@6 c#2@6 e2@3 ~ a1@6 c#2@6 e2@2", K: "~@2 a1@6 c2@6 e2@3 ~ a1@6 c2@6 e2@2",
  L: "~@2 a1@6 c#2@6 e2@3 ~ a1@6 c#2@4 d2 ~ d2 ~", M: "d2 ~@23 a2@8", N: "~@2 d2@6 f#2@6 a2@3 ~ d2@6 f#2@6 a2@2",
  O: "~@2 d2@6 f#2@6 a2@3 ~ d2@6 f#2@6 a1@2", P: "~ d2@3 f#2@3 a2 d2@4 d#2@4",
  Q: "~@2 e2@6 g2@6 a2@3 ~ a1@6 c#2@6 e2@2", R: "~@2 d2@6 f2@6 a2@2 a2@2 a1@2 g2 ~ g1 ~ f#2@2 d1@2 e1@2 f#1@2",
  S: "~@2 g1@6 a#1@6 d2@3 ~ g1@6 a#1@6 d2@2", T: "a1@8 a#1@3 d2@3 f2@2", U: "a1@8 ~@10 c#2@2 ~@2 c#2 ~ c#2@8",
  V: "~@2 f#1@6 a#1@6 c#2@3 ~ f#1@6 a#1@6 c#2@2", W: "~@2 f#1@6 a#1@6 c#2@3 ~ f#1@6 g1@6 g1 ~",
  X: "g#1@4 b1@3 c#2 ~ c#2@3 f2@3 g#2", Y: "~@2 c#2@6 f2@6 g#2@3 ~ c#2@6 f2@6 g#2@2",
  Z: "~@2 f#1@6 a#1@6 c#2@3 ~ c#2@2 ~@2 c#2 ~ c#2@8", AA: "~@2 f#1@6 a#1@6 c#2@3 ~ f#1@6 g1@8",
  AB: "g#1 ~ g#1@4 b1@8 c#2@2 ~@2 c#2@6 f2@6 g#2@2", AC: "~@4 d2@5 ~ d2@3 ~ d2@2 d2@16",
  AD: "~@2 g1@6 b1@6 d2@3 ~ g1@6 b1@6 d2@2", AE: "~ g1@3 b1@3 d2 d2@4 a#1@4",
  AF: "a1 ~ a1@4 c2@8 d2@2 ~@2 d2@6 f#2@6 a2@2", AG: "g1 ~ g1@6 a#1@6 d2@3 ~ g1@6 a#1@6 d2@2",
  AH: "~@2 c2@6 d#2@6 g2@3 ~ c2@6 d#2@6 g2@2", AI: "~@4 g1@3 ~@3 g1 ~ g1 ~ g1 ~ g1@2 ~@14",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · accordion
const accordion = note(`<
  ~ A B@2 C D E F G@2 ~@2 H I ~@2 J K L M N@2 ~@2 O P Q@2 R S T U V W X Y Z AA AB T U V W X Y Z AC AD@2 AE AF AG AH AI
  AJ AK@2 AL AM AN AO AP AQ AR AS AT AL AM AN AO AP AQ AR AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI
>`.pickRestart({
  A: "~@13 a4 c5 e5", B: "[a5@24 g#5@4 a5@2 ~ g#5@25 f5@6 g5 f5, ~@31 a5 ~@32]/2", C: "e5@29 c5 b4 a4",
  D: "b4@5 a4 c5 e5", E: "a5@24 g#5@4 a5@2 ~ a5", F: "~@24 f5@6 ~ f5, ~@15 g5",
  G: "[~@30 [b5,c6] a5@2 e6@24 c6 [f5,g5,a5,b5] e5 ~@4, e5 ~, ~@29 d6@2 ~@33]/2", // Cmaj7 G7
  H: "~@18 [e5,g5] ~@3 c5@2 [e5,g5]@2 c5@2 f#5@2 f5 ~", // Em
  I: "e5@6 c5@2 ~@2 c5@2 b4@2 a#4@2 a4@3 ~ g4 ~ d4 ~@2 d#4 d4@2 c4@4", J: "~@16 [g4,b4] ~@4 b4 d5 ~@3 [b4,d5]@4 ~@2",
  K: "c5 ~@8 a4 c#5@2 d5@2 e5@2, a4 ~@31", L: "f5", M: "[c#5,e5]",
  N: "[~@18 a5@2 g#5 ~ a5@2 a#5@3 ~ g#5 ~ g#5 a5@12 d#5 e5@2 d5@2 c#5@6 d5@10]/2", O: "~@14 e5@2 f5@12 f5@2 g5 ~",
  P: "a5@17 ~ a5@2 g#5@2 g5@2 f5@2 e5@2 f5@2 g5@2",
  Q: "[e5@23 ~ [b4,d5]@5 ~ a4 ~ g#4@23 ~ d5@7 c#5, ~@23 f5@5 ~ b4@2 b4@22 ~@11]/2", // Bm
  R: "~@2 b4@2 a4@8 [a4,c#5,e5]@4 a4 ~@5 [a4,c#5,e5]@4 ~@2 [a4,d5,f#5] ~ [a4,f#5] ~, d5 ~@14 d5, ~ c#5@2 ~@29", // A D
  S: "[a4,d5,f#5] ~@15", // D
  T: "[a4,b4,d5] ~ f#4 ~@3 [a4,b4,d5] ~@3 f#4 ~ [a4,b4,d5] ~ f#4 ~ [a4,b4,d5] ~@3 f#4 ~ [a4,b4,d5] ~@3 f#4 ~ [a4,b4,d5] ~@3", // Bm7
  U: "[a4,b4,d5] ~@4 a4 [b4,d5] ~@3 f#4 ~ [a4,b4,d5] ~@3 [a4,b4,d5] ~@3 f#4 ~ [a4,b4,d5] ~@3 f#4 ~ [a4,b4,d5] ~ f#4 ~", // Bm7 Bm Bm7
  V: "[a4,b4,d5] ~@3 f#4 ~ [a4,b4,d5] ~@3 f#4 ~ [a4,b4,d5] ~ f#4 ~ [a4,b4,d5] ~@5 [a4,b4,d5] ~@3 f#4 ~ [b4,d5] ~ f#4 ~", // Bm7 Bm
  W: "[b4,c#5,e5] ~@3 g4 ~ [b4,c#5] ~@3 g4 ~ [b4,c#5,e5] ~ g4 ~ [b4,c#5,e5] ~@3 g4 ~ [g4,b4,c#5,e5] ~@3 g4 ~ [b4,c#5,e5] ~ g4 ~, ~@3 e5 ~@12", // C#m7 Bsus2 C#m7 C#m7b5 C#m7
  X: "[g4,a4,c#5] ~@5 [a4,c#5,e5] ~@3 g4 ~ [a4,c#5,e5] ~ g4 ~ [b4,c#5,e5] ~@3 g4 ~ [a4,c#5,e5] ~@3 g4 ~ [a4,c#5,e5] ~ g4 ~, e5 ~@15", // A7 A C#m7 A
  Y: "[b4,c#5] ~ g4 ~ g4 ~ [a4,c#5,e5] ~@3 g4 ~ [a4,c#5,e5] ~ g4 ~ [a4,c#5,e5] ~@3 g4 ~ [a4,c#5,e5] ~@3 g4 ~ [a4,c#5,e5] ~@3", // Bsus2 A
  Z: "[b4,c#5,e5] ~ g4 ~@3 [a4,c#5,e5] ~@3 g4 ~ [a4,c#5] ~ g4 ~ [b4,c#5] ~@5 [a4,c#5,e5] ~@3 g4 ~ [a4,c#5,e5] ~ g4 ~, ~@8 e5 ~@7", // C#m7 A Bsus2 A
  AA: "[a4,b4,d5] ~@5 [a4,b4,d5] ~@3 f#4@2 a4@2 f#4@2 b4@2 [a#4,d5]@2 ~@2 [a4,d5]@2 ~@2 d5 ~ a4@2 f#4@2, ~@12 d5 ~@3 d5 ~@9 f#4@2 ~@4, ~@27 d5@2 ~@3", // Bm7 A# D5
  AB: "[a4,d5]@2 f#4@2 [b4,d5]@2 [a#4,d5]@2 a4@2 f#4@2 [a4,d5]@2 g#4@2 [g4,d5]@2 f#4@2 e4@2 f#4@2 d4@2 e4@2 f#4@2 d4 ~", // D5 Bm A# D5 G5
  AC: "[a4,b4,d5] ~ f#4 ~@3 [a4,b4,d5] ~@3 f#4 ~ [a4,b4,d5] ~ f#4 ~ [a4,b4,d5] ~@5 [a4,b4,d5] ~@3 a4@2 g4@2 f#4@2", // Bm7
  AD: "[f4@16 e4@5 ~ e4 ~ d4@14 [a3,d4,f4] ~@3 a3 ~ [a3,d4] ~ a3 ~ [a3,d4,f4] ~@4 [a3,d4] f4 ~@3 a3 ~ [d4,f4] ~@3, ~@21 f4@2 ~@21 f4@2 ~@18]/2", // Dm D5 Dm D5 Dm
  AE: "[a3,d4,f4] ~@4 [a3,d4,f4] ~@4 a3 ~ d4@2 a3 ~ [a3,d4,f#4] ~@5 [a3,d4,f#4] ~@3 a3@2 d4@2 a3 ~, ~@12 f4 ~@19", // Dm D
  AF: "[a#3,d4,g4] ~@5 [a#3,d4,g4] ~@3 g3@2 a#3@2 a4@2 a#4@2 a4@2 g4@2 a#4@3 ~ a#4@2 a4@2 g4@2", // Gm
  AG: "a#4@2 a4@2 g4@2 a#4@2 ~@2 a#4@2 a4@2 g4@2 a#4@2 a4@2 g4@2 a#4@2 ~@2 a#4@2 a4@2 g4 ~",
  AH: "[g4,a#4] ~@5 [d4,g4,a#4] ~@3 d4 ~ [d4,g4,a#4]@3 ~ [d4,g4,a#4] ~@5 [d4,g4,a#4] ~@3 d4 ~ [g4,a#4] ~ d4 ~", // Gm
  AI: "[d4,g4,a#4] ~@5 [d4,g4,a#4] ~@3 d4 ~ [d4,g4,a#4]@2 ~@2 [d4,g4,a#4] ~@5 [d4,g4] ~@3 g4@2 ~ d5@2 ~, ~@11 a#4 ~@2 a#4 ~", // Gm G5
  AJ: "~@3 a4@2 a4 e5 d#5 ~@3 a#4@3 e5 d#5, c#5@5 ~@3 d5@6 ~@2",
  AK: "[~@11 a4@4 ~ c5 c#5 d5 d#5 ~ d5 c5 ~ a4 g4 f4 ~ d4 c#4 a#3 a3@2 ~@17 [g#3,c#4,f#4] ~@3 [g#3,c#4,f#4] ~ [g#3,c#4,f#4]@8, e5@8 ~@2 e5 ~@21, ~@6 c#5@10 ~@7 a#4@2 ~@2 e4@2 ~@35]/2", // C#sus4
  AL: "[f#4,a#4,c#5] ~@5 [a#4,d#5] ~@3 f#4 ~ [a#4,c#5] ~@3 [f#4,a#4,c#5] ~@5 [a#4,d#5] ~@3 f#4 ~ [f#4,a#4,c#5] ~@3", // F# D#5 A#m F# D#5 F#
  AM: "[f#4,a#4,c#5] ~@3 f#4 [a#4,d#5] ~@4 f#4 ~ [a#4,c#5] f#4 ~@2 [a#4,c#5] ~@3 f#4 ~ [a#4,d#5] ~@3 f#4 ~ [a#4,c#5] ~@3", // F# D#5 A#m D#5 A#m
  AN: "[f#4,a#4,c#5] ~@5 [a#4,d#5] ~@3 f#4 ~ [a#4,c#5] ~ f#4 ~ [a#4,c#5] ~@4 d#5 a#4 ~@3 f#4 ~ [a#4,c#5] ~ f#4 ~", // F# D#5 A#m
  AO: "[g#4,b4,c#5] ~@5 [g#4,d#5] ~@3 f4 [g#4,c#5] b4 ~@3 [g#4,b4,c#5] ~@3 f4 ~ d#5@2 f4 ~ f4 ~ [g#4,c#5] ~ f4 ~, ~@22 g#4 ~@9", // C#7 G#5 C#5 C#7 C#5
  AP: "[g#4,b4,c#5] ~@3 f4 ~ d#5@2 ~@2 f4 ~ [g#4,b4,c#5] ~ f4 ~ [g#4,b4,c#5] ~ f4 ~ f4 ~ [g#4,b4,d#5] ~@3 f4 ~ [g#4,c#5] ~ f4 ~, ~@6 g#4 ~@25", // C#7 G#m C#5
  AQ: "[g#4,b4,c#5] ~ f4 ~ f4 ~ [g#4,d#5] ~@3 f4 ~ [g#4,b4,c#5] ~ f4 ~ [g#4,b4,c#5] ~ f4 ~ f4 ~ [g#4,b4,d#5] ~@3 f4 ~ [g#4,b4,c#5] ~@3", // C#7 G#5 C#7 G#m C#7
  AR: "[g#4,b4,c#5] ~ f4 ~ f4 ~ [g#4,d#5] ~@3 f4 ~ [g#4,b4,c#5] ~ f4 ~ [g#4,b4,c#5] ~ f4 ~ f4 ~ b4 ~@3 f4 ~ [g#4,c#5] ~ f4 ~, ~@14 b4 ~", // C#7 G#5 C#7 C#5
  AS: "[a#4,c#5] ~@3 f#4 ~ [a#4,c#5,d#5] ~@3 f#4 ~ a#4 ~@3 [a#4,c#5] ~@5 [a#4,d#5] ~@3 f#4 ~ [a#4,c#5] ~@3", // A#m D#7 A#m D#5 A#m
  AT: "[a#4,c#5] ~@5 [a#4,d#5] ~@3 f#4 ~ [a#4,c#5] ~ f#4 ~@3 [f#4,g#4,c#5] ~@3 f4 ~ [g#4,b4,c#5] ~ f4 ~ [g#4,c#5] ~@3", // A#m D#5 A#m F#sus2 C#7 C#5
  AU: "[a#4,c#5] ~@3 f#4 ~ [a#4,c#5,d#5] ~@3 f#4 ~ a#4 ~ f#4 ~ [a#4,c#5] ~@5 [a#4,d#5] ~@3 f#4 ~ [a#4,c#5] ~@3", // A#m D#7 A#m D#5 A#m
  AV: "[a#4,c#5] ~@3 [d4,g4,a4,d5]@3 ~@3 [d4,g4,a4,d5]@2 ~@4 [d4,g4,a4,d5]@5 ~ [d4,g4,a4,d5] ~@5 [d4,g4,a4,d5]@3 ~", // A#m Dsus4
  AW: "[b3,d4,g4] ~@5 [b3,d4,g4] ~@3 b3 ~ [b3,d4,g4] ~ b3 ~ [b3,d4,g4] ~@5 [b3,d4,g4] ~@3 b3 ~ [d4,g4]@2 b3 ~", // G G5
  AX: "[d4,g4,b4] ~@5 [d4,g4,b4] ~@3 d4 ~ [d4,g4,b4] ~ d4 ~ [d4,g4,b4] ~@5 [d4,g4,b4] ~@3 d4 ~ [d4,g4,b4] ~@3", // G
  AY: "[d4,g4,b4] ~@5 [d4,g4,b4] ~@3 d4 ~ [g4,b4] d4 ~@2 [d4,g4,b4] ~@5 [d4,g4,b4] ~@5 [c#4,e4,g4,a#4]@3 ~", // G C#dim
  AZ: "[d4,f#4,a4] ~@5 [d4,f#4,a4] ~@3 d4 ~ [d4,f#4,a4] ~ d4 ~ [d4,f#4,a4] ~@5 [d4,f#4,a4] ~@3 d4 ~ [f#4,a4] ~@3", // D F#m
  BA: "[d4,f#4,a4] ~@5 [d4,f#4,a4] ~@3 d4 ~ [d4,f#4,a4] ~ d4 ~ [d4,f#4,a4] ~ d4 ~@3 [d4,f#4,a4] ~@3 d4 ~ [f#4,a4] ~@3", // D F#m
  BB: "~@2 c5@2 b4@2 a4@2 g#4@2 a4@2 b4@2 a4@2 [b4,c5] ~@3 c5@2 a4 ~@3 a4@2 f4@2 f#4@2", // Cmaj7
  BC: "~@6 [f#4,a4] ~@5 [f#4,a4] ~@3 f#4 ~@5 [d4,f#4,a4] ~@3 d4 ~ [f#4,a4] ~ d4 ~, d4@17 ~@15", // F#m D F#m
  BD: "[d4,g4,a#4] ~@5 [d4,g4,a#4] ~@3 d4 ~ g4 ~ d4 ~ a#4@2 a4@2 g4@2 a4@2 a#4@2 g4@2 a4@2 a#4@2", // Gm
  BE: "~@6 [d#4,g4] ~@5 [d#4,g4] ~@3 [d#4,g4] ~@5 [d#4,g4,c5] ~@3 d#4@2 c5@2 d#4 ~, c5@17 ~@11 g4 ~@3", // D# Cm
  BF: "[g4,c5,d#5] ~@5 [g4,c5,d#5] ~@3 [g4,c5] ~ d5@2 c5 ~ [g4,c5,d#5] ~@5 [g4,c5,d#5] ~@3 g4 ~ [c5,d#5] ~ g4 ~, ~@5 d#5 ~@10", // Cm C5 Cm
  BG: "[g4,c5,d#5] ~@5 [g4,c5,d#5] ~@3 g4@2 d5@2 c5 ~ [g4,c5,d#5] ~@5 [g4,c5,d#5] ~@5 [c5,d#5] ~ g4 ~, ~@10 d#5 ~@21", // Cm
  BH: "[g4,a#4,d5] ~@5 [g4,a#4,d5] ~@3 g4 ~ [a#4,d5] ~@3 [g4,a#4,d5] ~@4 [g4,a#4,d5] ~@4 g4 ~ [a#4,d5] ~ g4 ~", // Gm A# Gm A#
  BI: "[g4,a#4,d5] ~@3 [g4,a#4,d5]@2 [d4,e4,f4] [g3,a3,b3,c4] [e3,f3] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~ [d4,g4,a#4] ~@15", // Gm Dm Cmaj7 Fmaj7 Gm
})).s("gm_accordion").gain(0.44)

// chords · accordion · soft notes
const accordion_soft = note(`<
  ~@2 A ~@3 A B ~ C ~@8 D ~@7 E F ~@2 G H I J K L M N ~ G H I J K L M O ~@10 P Q R S T U V W X P Q R S T U V Y Z ~ AA AB
  AC AD AE AF AG AH ~ AI ~@2
>`.pickRestart({
  A: "~@30 g#5 ~", B: "g#5@3 ~", C: "~@25 d6 ~@6", D: "d5", E: "~@28 c5 ~@3", F: "d5@23 ~@9",
  G: "~@4 f#4 ~@13 f#4 ~@5 f#4 ~@5 f#4 ~", H: "~@2 f#4 ~ f#4 ~@8 f#4 ~@18",
  I: "~@2 f#4 ~@5 f#4 ~@9 f#4 ~ f#4 ~@7 a4 ~@3", J: "g4 ~@5 g4 ~@9 g4 ~ g4 ~@13", K: "~@2 g4 ~ g4 ~@13 g4 ~@13",
  L: "e5 ~@29 g4 ~", M: "~@4 g4 ~@13 g4 ~ g4 ~@11", N: "~@2 f#4 ~ f#4 ~@6 d5 ~@20", O: "~@4 f#4 ~@27",
  P: "~@2 f#4 ~ f#4 ~@9 f#4 ~@3 f#4 ~ f#4 ~@3 f#4 ~@7", Q: "~ f#4 ~@5 f#4 ~@4 f#4 ~@11 f#4 ~@3 f#4 ~ f#4 ~",
  R: "~@2 f#4 ~ f#4 ~@15 f#4 ~@11", S: "~@4 f4 ~@3 f4 ~@5 f4 ~@13 b4 ~@3", T: "~@2 f4 ~@21 f4 ~@3 b4 ~@3",
  U: "~@6 b4 ~@23 f4 ~", V: "~@8 f4 ~@13 [g#4,d#5] ~@9", W: "~@14 f#4 ~@3 f#4 ~ f#4 ~@3 f#4 ~@5 f#4 ~",
  X: "~@2 f#4 ~ f#4 ~@11 a#4 ~ b4 ~@9 b4 ~@3", Y: "~@18 f#4 ~ f#4 ~@3 f#4 ~@5 f#4 ~", Z: "~@14 [d4,a4,d5] g4 ~@16",
  AA: "~@30 d4 ~", AB: "~@12 d4 ~@12 d4 ~@6", AC: "~@20 d4 ~@9 d4 ~", AD: "~@20 d4 ~@11", AE: "d4 ~@31",
  AF: "~@16 a4 ~@15", AG: "~@12 [d4,a#4] ~@19", AH: "~@10 d#4 ~@21", AI: "~@26 g4 ~@5",
})).s("gm_accordion").gain(0.22)

// drums · kick
const kick = s("bd").struct("<~@2 A@23 B A@3 C D@16 E D@9 F D@17 F D@12 A>".pickRestart({
  A: "x!2", B: "x ~@7 x ~@2 x ~@4", C: "x ~@14 x", D: "x!4", E: "x ~@3 x ~@3 x ~@2 x!2 ~@2 x", F: "x",
})).gain(0.72)

// drums · rim
const rim = s("rim").struct("<~@2 [~ x ~@3 x ~@2]!7 [~ x ~@3 x ~ x] [~ x ~@3 x ~@2]!19 ~@18 [~ x ~@3 x ~@2]!9 ~@32>")
  .gain(0.72)

// drums · clap
const clap = s("cp").struct("<~@2 A@7 B A@19 C D@16 E A@9 F D@8 G D@8 H D@12 ~>".pickRestart({
  A: "~@3 x ~@2 x ~@4 x ~@2 x ~", B: "~@3 x ~@2 x ~@4 x ~@4", C: "~@5 x!2 ~", D: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~",
  E: "x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2", F: "~@9 x ~ x!2 ~@3", G: "x ~@2 x ~@2 x ~ x!2 ~ x ~@2 x!2",
  H: "~@2 x ~@2 x ~ x!2 ~@2 x ~ x!2 ~",
})).gain(0.72)

// … 72 more lines

More by Renzo Arbore