Strudelify
Une meche de cheveux cover art

1994 · Ses plus belles chansons

Une meche de cheveux

Salvatore Adamo

KeyG majorTempo110 bpm
0:00/0:00
// Une meche de cheveux — Salvatore Adamo
// 110 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: The whole transcription plays 44 ms ahead of the beat; the grid follows it, so its parts stay together.
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, A@4 for four bars: edit a riff to change every repeat.

// bass · acoustic bass
const bass = note(`<
  ~@5 A B C ~@3 D@2 A ~@3 E F G H ~@2 E F G H ~@2 I J K@2 L@2 M K N O P Q R S T U ~@3 A B C ~@3 D@2 A ~@3 I J K@2 L@2 M
  K N O P Q R S T U T U T U T U T U V
>`.pickRestart({
  A: "d2@15 ~", B: "g1", C: "d2@3 ~", D: "[~@12 g1@17 ~@3, d2@7 ~@9]/2", E: "c3@3 ~ c3 ~ g2 ~ e2@4 c2@2 e2 ~",
  F: "g2@4 d2 ~ g2 ~ b2@4 g2 ~ e2 ~", G: "d2@4 a1 ~ d2 ~ e2@4 f#2@3 ~", H: "g2@15 ~", I: "c0@5 ~ c0 ~ e0@2 g0 ~ e0@4",
  J: "c2@5 ~ c2 ~ e2@2 g2 ~ e2@4", K: "g1@4 ~@2 g1 ~ b1 ~ d2 ~ b1@4", L: "d2@4 ~@2 d2 ~ f#2@2 a2 ~ f#2@4",
  M: "g1@4 ~@2 g1 ~ b1@2 d2 ~ b1@4", N: "c2@4 ~@2 c2 ~ e2 ~ g2 ~ e2@2 c2 ~", O: "c2@5 ~ c2 ~ e2 ~ g2 ~ c2@3 ~",
  P: "b1@5 ~ b1 ~ d2@2 f#2 ~ d2@2 f#2 ~", Q: "b1@5 ~ b1 ~ d2@2 f#2 ~ d2@3 ~", R: "a1@5 ~ a1 ~ c2@2 e2 ~ c2@2 a1 ~",
  S: "d2@4 ~@2 d2 ~ f#2@2 a2 ~ f#2@3 ~", T: "g1@4 ~@2 g1 ~ b1@2 d2 ~ g1@3 ~", U: "d2@5 ~ d2 ~ f#2@2 a2 ~ d2@3 ~",
  V: "g2@3 ~",
})).s("gm_acoustic_bass").gain(0.28)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@6 B@6 C@5 D E F@4 D E F@4 G H@2 I@2 J K@2 L@2 M@2 N O P Q@8 R@8 G H@2 I@2 J K@2 L@2 M@2 N O P S P S P S P S P T@2
>`.pickRestart({
  A: "[~@17 a#3@2 b3@11 ~@3 a#3@2 b3@11 ~@3 a#3@2 b3@11 ~@3 a#3@2 b3@11 ~@2 [a3,d4]@14 ~ d3, ~@15 [g2,d3]@15 g2@14 ~@2 g2@14 ~@2 g2@14 ~@4 a2@15 ~, ~@16 g3@14 ~ d3@14 ~@2 d3@14 ~@2 d3@14 ~@2 [d3,f#3]@14 ~@3, ~@16 g3@7 ~ g3@7 ~ g3@7 ~@9]/6", // D5 G5 D
  B: "[[g2,g3]@15 ~ d4@15 ~@2 a#3@2 b3@11 ~@3 a#3@2 b3@11 ~@3 a#3@2 b3@11 ~@2 [a3,d4]@14 ~ d3, [b3,d4]@13 ~@2 [d3,f#3,a3]@16 [g2,d3]@15 g2@14 ~@2 g2@14 ~@4 a2@15 ~, ~@32 g3@14 ~ d3@14 ~@2 d3@14 ~@2 [d3,f#3]@14 ~@3, ~@24 g3@7 ~ g3@7 ~@9]/6", // G D5 Bm D G5 D
  C: "[[g2,g3]@15 ~ d4@14 ~@3 a#3@2 b3@11 ~@3 a#3@2 b3@11 ~@3 a#3@2 b3@12 ~, [b3,d4]@13 ~@2 [d3,f#3,a3]@15 g2@14 ~@2 g2@14 ~@2 g2@14 ~@4, ~@31 d3@14 ~@2 d3@14 ~@2 d3@14 ~@3, ~@16 g3@7 ~ g3@7 ~ g3@7 ~]/5", // G Bm D
  D: "~@2 [g3,c4] [e3,g3,c4] e3!2 [e3,g3,c4]!2, c3@7 ~ c3@7 ~, g3 ~ g3 ~, ~ e3@2 ~@5", // C5 C
  E: "d3!2 [g3,b3] [d3,g3,b3] ~ d3 [d3,g3,b3]!2, g2@7 ~ g2@7 ~, [g3,b3] ~ [g3,b3] ~", // G
  F: "[f#3@2 f#3@2 [f#3,a3]@2 [f#3,a3]@2 [f#3,a3]@5 ~@4 a#3@2 b3@11 ~@3 a#3@2 b3@11 ~@3 a#3@2 b3@12 ~, d3@7 ~ d3@6 g2@15 ~ g2@14 ~@2 g2@14 ~@4, a3@4 d4@7 ~@4 d3@14 ~@2 d3@14 ~@2 d3@14 ~@3, ~@8 g3@7 ~ g3@7 ~ g3@7 ~]/4", // F#m
  G: "[e3,g3] [e3,g3,c4]!2 [e3,g3]!3 [e3,g3,c4] ~, c3@3 c4@2 ~@3, ~@8 c3@7 ~", // Em C Em C
  H: "[[e3,g3]!2 [e3,g3,c4] [e3,g3]!2 [g3,c4] [e3,g3,c4] [e3,g3] [g3,b3] ~ [g3,b3,d4] [g3,b3]!2 ~ [g3,b3,d4] b3, c3@3 c4@2 ~@2 c4@2 ~@2 d4@2 ~@3, ~@8 c3@7 ~ d3@7 ~ d3@7 ~]/2", // Em C Em C5 C Em G
  I: "[[g3,b3] [g3,b3,d4]!2 [g3,b3]!2 ~ [g3,b3,d4] ~ [f#3,a3] a3 [f#3,a3,d4] [f#3,a3]!2 [a3,d4] [f#3,a3,d4] ~, d3@3 d4@2 ~@2 d4@2 ~@2 d4@2 ~@3, ~@8 d3@6 ~@2 d3@7 ~ d3@7 ~]/2", // G F#m D F#m D5 D
  J: "[f#3,a3] a3 [f#3,a3,d4] [f#3,a3]!2 a3 [f#3,a3,d4] a3, d3@3 d4@2 ~@3, ~@4 d3@3 ~", // F#m D F#m D
  K: "[g3@2 b3@2 [g3,b3,d4] ~ g3@2 g3@2 b3@2 [g3,b3,d4]@2 g3@2 ~@2 b3@2 [f3,b3,d4] ~@5 b3@2 [f3,b3,d4]@2 b3@2, d3@3 [b3,d4]@2 ~@2 b3@2 ~@2 [f3,b3,d4]@2 ~@3, ~@8 [b2,d3]@7 ~ [d3,g3]@7 ~ [d3,g3]@7 ~]/2", // G Bdim Bm Bdim Bm G5
  L: "[[e3,g3] g3 [e3,g3,c4] [e3,g3]!2 [g3,c4] [e3,g3,c4] g3 [e3,g3] g3 [e3,g3,c4] [e3,g3]!2 [g3,c4] [e3,g3,c4] [g3,c4], ~@3 c4@2 ~@2 c4@2 ~@2 c4@2 ~@3, ~@4 c3@3 ~ c3@3 ~ c3@3 ~]/2", // Em C Em C5 C Em C Em …
  M: "[[d3,f#3,b3] [f#3,b3] [f#3,b3,d4] [f#3,b3] [d3,f#3,b3] [f#3,b3]!3 [d3,f#3,b3] [f#3,b3] [f#3,b3,d4] [f#3,b3] [d3,f#3,b3] [f#3,b3] [f#3,b3,d4] f#3, ~@2 d3@4 d4@5 ~ d4@6 ~@4 d4@5 ~@5]/2", // Bm B5 Bm B5 Bm B5 Bm B5 …
  N: "[e3,a3] [e3,a3,c4]!2 [e3,a3]!2 [e3,a3,c4]!2 [e3,a3], c3@3 c4@2 ~@3, ~ c3", // A5 Am A5 Am A5
  O: "[d3,f#3,a3] [f#3,a3] [f#3,a3,d4] [f#3,a3] [d3,f#3,a3] [f#3,a3]!3, ~@6 d4@5 ~ d4@4", // D F#m D F#m D F#m
  P: "[d3,g3]@2 [g3,b3]@2 [g3,b3,d4] ~ g3@2 g3@2 [g3,b3]@2 [g3,b3]@2 [g3,b3]@2, ~@6 [b3,d4]@5 ~ d4@4", // G5 G Bm
  Q: "[[d3,f#3]@2 [f#3,a3]@2 [f#3,a3,d4] ~ f#3@2 [d3,f#3]@2 [f#3,a3]@2 [f#3,a3,d4]@2 ~@2 a#3@3 b3@11 ~@3 a#3@2 b3@11 ~@2 a#3@3 b3@11 ~@2 d4@14 ~@2 [b3,d4]@13 ~@3 d4@14 ~@3 a#3@2 b3@11 ~ d3, ~@6 [a3,d4]@5 ~@3 g2@14 ~@2 g2@15 ~ g2@14 ~@3 a2@16 ~ g2@14 ~@16 g2@14 ~@2 g2@2, ~@14 [f#3,a3]@2 g3@14 ~@2 g3@14 ~@2 g3@14 ~@33 [f#3,a3]@16 ~ g3@14 ~@2, ~@15 d3@14 ~@2 d3@14 ~@2 d3@14 ~@2 [d3,f#3,a3]@14 ~@2 [d3,g3]@14 ~ d3@16 ~ d3@14 ~@3]/8", // D F#m D F#m D Bm D5 F#m …
  R: "[a#3@3 b3@11 ~@2 a#3@3 b3@11 ~@2 d4@14 ~@2 [b3,d4]@13 ~@2 [f#3,a3,d4]@15 ~@2 a#3@3 b3@11 ~@2 a#3@3 b3@11 ~@2 a#3@3 b3@12 ~, g3@14 g2@15 ~@2 a2@16 ~ g2@14 ~@16 g2@14 ~@2 g2@15 ~ g2@15 ~@3, ~@15 d3@14 ~@2 [d3,f#3,a3]@14 ~@2 [d3,g3]@14 ~ d3@16 ~ d3@14 ~@2 d3@14 ~@2 d3@14 ~@3, ~@8 g3@7 ~@25 g3@7 ~ g3@7 ~ g3@7 ~]/8", // Bm D G5
  S: "[d3,f#3]@2 [f#3,a3]@2 [f#3,a3,d4] ~ f#3@2 [d3,f#3]@2 [f#3,a3]@2 [f#3,a3,d4]@2 [f#3,a3]@2, ~@6 [a3,d4]@5 ~@5", // D F#m D F#m D F#m D5
  T: "[[d3,f#3]@2 [f#3,a3]@2 [f#3,a3,d4] ~ f#3@2 [d3,f#3]@2 [f#3,a3]@2 [f#3,a3,d4]@2 ~@2 b3@12 ~@4, ~@6 [a3,d4]@5 ~@3 [f#3,a3]@2 ~@16, ~@15 [d3,g3]@12 ~@5]/2", // D F#m D F#m D D5 F#m G5
})).s("gm_acoustic_guitar_nylon").gain(0.22).pan(0.4)

// chords · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~@7 A ~@5 A ~@3 B C ~@4 B C ~@4 D@2 E@2 F@4 G H I J K L M N ~@4 O@2 ~@4 O@2 ~@3 D@2 E@2 F@4 G H I J K L M N M N M N M
  N M N ~
>`.pickRestart({
  A: "a2@15 ~", B: "c4 ~ c4 ~, e3 ~@7", C: "~@4 d3 ~@3", D: "[~@5 c4 ~ [e3,g3] ~ c4 ~@3 e3 ~@2, ~@7 c4@2 ~@7]/2",
  E: "[~ [g3,b3,d4] ~@3 [g3,b3,d4] ~ d4@2 ~@4 [g3,b3,d4] ~ [g3,b3], ~@7 g3 ~@8]/2", // G
  F: "[~ [f#3,d4] ~@3 f#3 ~ [f#3,a3] ~ [f#3,d4] ~@3 [f#3,d4] ~ d4@2 [g3,d4] ~@3 [g3,d4] ~ d4@2 [f3,d4] ~@3 [f3,d4] ~ [f3,d4], ~@7 d4@2 ~@6 f#3 ~@16]/4", // D F#m D G5 Dm
  G: "~ [e3,c4] ~@3 e3 ~ e3, c3@7 ~@9", H: "~ [e3,c4] ~@3 e3 ~ e3", I: "~@5 d3@2 d3", J: "~ d3@2 ~@2 d3@2 [d3,b3]",
  K: "~@7 c4", L: "~ d3@3 ~ d3@2 d3", M: "~ d3@4 d3@2 d3", N: "~@2 d3@5 ~@3 d3@4 d3@2", O: "[~@15 a2@16 ~]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.11).pan(0.4)

// other · trombone
const trombone = note(`<
  ~@5 A B A C ~@2 D E F G ~@2 H I J@2 ~@2 K L M N ~@10 O N P Q ~@7 R@2 S@2 ~@2 T E U@2 ~@10 O N P Q ~@4 V@3 ~ V@3 ~@2
>`.pickRestart({
  A: "d4 f#4", B: "g4@2 a4 g4 f#4@2 e4@2", C: "g4@3 ~", D: "~@4 d4@3 f#4@6 a4@2 f#4", E: "e4@3 d4@9 g4@4",
  F: "f#4@7 g4 e4@3 f#4@4 ~", G: "g4@9 ~@7", H: "e5@3 d5 c5@2 g4@2", I: "d5@2 b4 g4", J: "[d4@15 g4@11 ~@6]/2",
  K: "~@6 d5@2 c5@7 ~", L: "~@6 b4 b4@7 ~@2, ~@7 c5 ~@8", M: "~@2 d5 f#4", N: "g4@7 ~", O: "~@4 g4 a4 g4 e4",
  P: "~@4 d4 e4 f#4 d4", Q: "b4@13 ~@3", R: "[d4@8 f#4@7 g4@4 a4@2 g4@2 ~ f#4@4 e4@4]/2", S: "[d4@8 f#4@7 g4@12 ~@5]/2",
  T: "~@4 d4@2 f#4@7 ~ f#4 ~, ~@13 a4@2 ~", U: "[f#4@7 e4@4 f#4@4 g4@9 ~@8, ~@7 g4 ~@24]/2",
  V: "[~@14 d4 d4@14 ~ g4 g4@4 f#4@2 e4@2 ~ d4@8, ~@15 e4 ~@15 a4 ~@3 a4 ~@12]/3",
})).s("gm_trombone").gain(0.22).pan(0.4)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@5 A B C ~@3 D@4 ~@8 E@4 ~@2 F@2 G@2 H@4 I J K@2 L M N O ~@3 P@2 C ~@3 Q@4 ~@2 F@2 G@2 R@4 I J K@2 L M N O N O N O N
  O N O S
>`.pickRestart({
  A: "[a3,f#4]", B: "[b3,g4]", C: "[a3,a4]@15 ~",
  D: "[~@12 c6@4 [g5,b5]@15 ~ f#5@16 ~@16, d5@27 ~@5, d6@25 ~@7, f#5@16 ~@15 b5@16 ~@17]/4", // G
  E: "[[c6,e6] [b4,b5] [a4,f#5,a5,f#6] ~, [g5,g6] ~, ~@16 d6@33 ~@15]/4", // C B D G
  F: "[~@4 g5@4 e6@4 c6@3 g6 ~@8 e4@8, g4@3 ~, ~ g6]/2", G: "[~@4 g5@4 d6@4 b5@4 g6@15 ~, [d4,g4]]/2",
  H: "[~@13 e6 e6@2 [b5,d6]@8 [a5,c6]@8 [b3,g5,b5]@12 [c4,a5,c6]@4 [d4,b5,d6]@12 ~@4, d3, c4 ~, ~@13 c6@3 ~@48]/4", // Bm Am Em F G
  I: "~@8 [c5,e5,g5]@5 [c#5,e5,a5] [d5,f5,a#5] [d#5,f#5,b5]", J: "[e5,g5,c6] ~",
  K: "[~@4 [f#4,b4,d5]@3 [a4,c5,e5,f5] [d5,f#5]@11 ~@13, ~@8 b4@9 ~@15]/2", L: "~@13 [e3,e4]@3", M: "f#4@7 ~, f#3@3 ~",
  N: "b3@9 b3@3 g3@2 d3@2", O: "c4@13 ~@3", P: "[[a3,f#4]@15 ~ b3@16, ~@15 g4@16 ~]/2",
  Q: "[~@11 c6@4 [g5,b5]@16 [f#5,b5]@16 ~@17, d5@27 ~@5, d6@25 ~@7, f#5 ~@3]/4", // G B5
  R: "[~@13 e6 e6@2 [b5,d6]@8 [a5,c6]@7 ~ [b3,g5]@12 [c4,a5,c6]@4 [d4,b5,d6]@12 ~@4, d3, c4 ~, ~@13 c6@3 ~@15 b5@13 ~@20]/4", // Bm Am Em F G
  S: "[g2,g3] ~@7, b4 ~@15", // G
})).s("gm_string_ensemble_2").gain(0.31)

// chords · string ensemble 2 · soft notes
const string_ensemble_2_soft = note(`<
  ~@5 A@3 ~@5 B@2 ~@8 C@2 D@2 ~@12 E ~ F ~@6 G@3 ~@5 B@2 ~@12 E ~ F ~@11 H
>`.pickRestart({
  A: "[a4@15 ~ b4@16 f#4@15 ~, d4@47 ~]/3", B: "[~@15 b5@8 ~@9]/2", C: "[g4, c5 ~]/2", D: "[f#4@15 g6@6 ~@11]/2",
  E: "~@7 g4 ~@8", F: "~@10 f#3 ~@5", G: "[a4@15 b4@16 ~ f#4@15 ~, d4@47 ~]/3", H: "g5 ~@7, g4 ~@15",
})).s("gm_string_ensemble_2").gain(0.16)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~@17 A B C ~@3 A B D ~@3 E@2 F@2 G@2 F H E@2 I@2 J G F G ~@15 E@2 F@2 G@2 F H E@2 I@2 J G F G F G F G F G F G ~
>`.pickRestart({
  A: "[e6,g6,c7] ~ [e6,g6,c7] ~ [e6,g6,c7] ~ [e6,g6,c7] ~ [e6,g6,c7] ~ [e6,g6,c7] ~ [e6,g6,c7] ~ [e6,g6,c7] ~", // C
  B: "[d6,g6,b6] ~ [d6,g6,b6] ~ [d6,g6,b6] ~ [d6,g6,b6] ~ [d6,g6,b6] ~ [d6,g6,b6] ~ [d6,g6,b6] ~ [d6,g6,b6] ~", // G
  C: "[d6,f#6,a6] ~ [d6,f#6,a6] ~ [d6,f#6,a6] ~ [d6,f#6,a6] ~ [d6,f#6,a6] ~ [d6,f#6,a6] ~ [d6,f#6,a6] ~ [d6,f#6,a6] ~", // D
  D: "[d6,f#6,a6] ~ [d6,f#6,a6] ~ [d6,f#6,a6] ~ [d6,f#6,a6] ~ [d6,f#6,a6] ~ [d6,f#6,a6,b6] ~ [d6,f#6,a6] ~ [d6,f#6,a6] ~", // D Bm7 D
  E: "[c6,e6,g6] ~ [c6,e6,g6] ~ [c6,e6,g6] ~ [c6,e6,g6] ~ [c6,e6,g6] ~ [c6,e6,g6] ~ [c6,e6,g6] ~ [c6,e6,g6] ~", // C
  F: "[b5,d6,g6] ~ [b5,d6,g6] ~ [b5,d6,g6] ~ [b5,d6,g6] ~ [b5,d6,g6] ~ [b5,d6,g6] ~ [b5,d6,g6] ~ [b5,d6,g6] ~", // G
  G: "[a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~ [a5,d6,f#6] ~", // D
  H: "[b5,d6,f6] ~ [b5,d6,f6] ~ [b5,d6,f6] ~ [b5,d6,f6] ~ [b5,d6,f6] ~ [b5,d6,f6] ~ [b5,d6,f6] ~ [b5,d6,f6] ~", // Bdim
  I: "[b5,d6,f#6] ~ [b5,d6,f#6] ~ [b5,d6,f#6] ~ [b5,d6,f#6] ~ [b5,d6,f#6] ~ [b5,d6,f#6] ~ [b5,d6,f#6] ~ [b5,d6,f#6] ~", // Bm
  J: "[a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~ [a5,c6,e6] ~", // Am
})).s("gm_drawbar_organ").gain(0.16).pan(0.4)

// chords · harpsichord
const harpsichord = note(`<
  ~@4 A@5 ~ B@6 ~@3 C@2 ~@4 C@2 ~@2 D E F G H I J K L M N O P Q R S ~@2 T@5 ~ U@6 ~ D E F G H I J K L M N O P Q R S V W
  X Y Z W AA AB AC
>`.pickRestart({
  A: "[~@16 [f#5,a5,d6]@13 ~@2 [g5,b5,d6]@14 ~@3 d6@12 ~@4 [g4,b5,d6]@14 ~@2, ~@15 d5@13 ~@2 d5@15 ~@18 [d5,g5]@15 ~@2, ~@16 d4@14 ~ g4@16 [d4,d5,f#5,a5]@13 ~@4 e6 ~@15]/5", // D G G5 D
  B: "[~@16 [f#5,a5,d6]@13 ~@2 [g5,b5,d6]@13 ~@4 d6@13 ~@3 [g5,b5,d6]@17 ~@15, ~@15 d5@13 ~@2 d5@13 ~@4 [d5,f#5,a5]@14 ~@2 d5@18 ~@15, ~@16 d4@14 ~ g4@16 d4@16 ~ g4@14 ~@18]/6", // D G D
  C: "[~@16 [g4,d6,g6]@15 ~, ~@15 b5@15 ~@2]/2", // G5
  D: "[e5,g5,c6] ~ [e5,g5,c6] ~ [e5,g5,c6] ~ [e5,g5,c6] ~ c6 ~ [e5,g5,c6] ~ [g5,c6] ~ [e5,g5,c6]@2", // C C5 C
  E: "~@2 [g5,c6] ~ [g5,c6] ~ [e5,g5,c6] ~ [g5,c6] ~ [e5,g5,c6]@3 ~ [g5,b5] ~", // C5 C C5 C G
  F: "[g5,b5] ~ [g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5]@4 [g5,b5] ~ [d5,g5,b5] ~", // G
  G: "~@2 [g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5]@4 [d5,g5,b5] ~@3 [d5,g5,b5] ~", // G
  H: "[f#5,a5] ~ [f#5,a5] ~ f#5 ~ [d5,f#5,a5]@3 ~ [f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~", // F#m D F#m D
  I: "~@2 [f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5]@4 [f#5,a5] ~ [f#5,a5] ~ [f#5,a5] ~", // F#m D F#m
  J: "[d5,g5,b5] ~@3 [g5,b5] ~ [d5,g5,b5]@3 ~ [g5,b5] ~ [g5,b5] ~ [d5,g5,b5] ~", // G
  K: "~@2 [d5,f5,b5] ~ [d5,f5,b5] ~ [d5,f5,b5]@3 ~ [d5,g5,b5] ~ [d5,g5,b5] ~ [d5,g5,b5] ~", // Bdim G
  L: "~@2 [e5,g5,c6] ~ [e5,g5,c6] ~ [g5,c6] ~ [g5,c6] ~ [g5,c6] ~ [g5,c6] ~ [e5,g5,c6]@2", // C C5 C
  M: "~@2 [e5,g5,c6] ~ [e5,g5,c6] ~ [e5,g5,c6] ~ c6 ~ [e5,g5,c6] ~ [e5,g5,c6] ~ [e5,g5,c6] ~", // C
  N: "[f#5,b5] ~ [f#5,b5] ~ [d5,f#5,b5] ~ [f#5,b5]@3 ~ [f#5,b5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~", // B5 Bm B5 Bm
  O: "[f#5,b5] ~ [f#5,b5] ~ [f#5,b5] ~ [d5,f#5,b5]@3 ~ [f#5,b5] ~ [d5,f#5,b5] ~ [f#5,b5] ~", // B5 Bm B5 Bm B5
  P: "[e5,a5,c6] ~ a5 ~ [a5,c6] ~ [e5,a5,c6] ~@3 [e5,a5,c6] ~ [e5,a5] ~ [e5,a5,c6] ~", // Am A5 Am
  Q: "f#5 ~ f#5 ~ [f#5,a5] ~ [d5,f#5,a5] ~@3 [d5,f#5,a5] ~ [f#5,a5]@4", // F#m D F#m
  R: "[d5,g5,b5] ~@3 [d5,g5,b5] ~ [d5,g5,b5]@4 d5 ~ g5@2 b5 ~", // G
  S: "[f#5,a5] ~ a5 ~ [f#5,a5] ~ [d5,f#5]@3 ~ [d5,f#5] ~ [d5,f#5,a5] ~@3, ~@3 a5@2 ~@3", // F#m D
  T: "[~@16 [a5,d6]@12 ~@3 [b5,d6]@13 ~@3 [d4,f#5,a5,d6]@13 ~@4 d6@14 ~@2, ~@15 [d5,f#5]@13 ~@2 [d5,g5]@15 ~ d5@13 ~@5 e6 ~@15, ~@16 d4@14 ~ g4@15 ~@17 [g4,d5,g5,b5]@15 ~@2]/5", // D5 Bm D G5 G
  U: "[~@16 [a5,d6]@12 ~@3 [g5,b5,d6]@13 ~@3 [f#5,a5,d6]@14 ~@3 [b5,d6]@17 ~@15, ~@15 [d5,f#5]@13 ~@2 d5@13 ~@3 d5@14 ~@3 [d5,g5]@18 ~@15, ~@16 d4@14 ~ g4@15 ~ d4@16 ~ g4@14 ~@18]/6", // D5 G D Bm D G5
  V: "~@6 [d5,g5,b5] ~ [g5,b5]@2 ~@2 [d5,g5,b5] ~@3, ~@8 d5 ~@7", // G
  W: "[f#5,a5,d6]@2 ~@4 [d5,f#5,a5] ~ [d5,f#5,a5]@2 ~@2 [d5,f#5,a5]@2 ~@2", // D
  X: "[d5,g5,b5]@2 ~@4 [d5,g5,b5] ~ [d5,g5] ~@3 [d5,g5,b5] ~@3, ~@4 b5 ~@3", // G G5 G
  Y: "[f#5,a5,d6] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [f#5,a5]@2 ~@2 [d5,f#5,a5] ~@3, ~@8 d5 ~@7", // D F#m D
  Z: "[d5,g5,b5] ~@5 [d5,g5,b5] ~ [g5,b5]@2 ~@2 [d5,g5] ~@3, ~@8 d5 ~@3 b5@2 ~@2", // G G5
  AA: "[d5,g5,b5]@2 ~@4 [d5,g5,b5] ~ [d5,g5,b5]@2 ~@2 [d5,g5,b5] ~@3", // G
  AB: "[f#5,a5,d6] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [d5,f#5,a5] ~ [f#5,a5]@2 ~@2 [d5,f#5,a5]@2 ~@2, ~@8 d5 ~@7", // D F#m D
  AC: "[d5,g5,b5] ~@7", // G
})).s("gm_harpsichord").gain(0.18).pan(0.7)

// chords · harpsichord · soft notes
const harpsichord_soft = note(`<
  ~@29 A B C D E F G ~ H I J K L M N O ~@15 A B C D E F G ~ H I J K L M N O ~@3 P ~@5
>`.pickRestart({
  A: "~@8 [e5,g5] ~@3 e5 ~@3", B: "~@2 e5 ~ e5 ~@3 e5 ~@5 d5 ~", C: "d5 ~ d5 ~@9 d5 ~@3",
  D: "[g5,b5] ~ d5 ~@9 [g5,b5] ~@3", E: "d5 ~ d5 ~ [d5,a5] ~@5 d5 ~@5", F: "f#5 ~ d5 ~@7 d5 ~ d5 ~ d5 ~",
  G: "~@2 [d5,g5,b5] ~ d5 ~@5 d5 ~ d5 ~@3", H: "~@6 e5 ~ e5 ~ e5 ~ e5 ~@3", I: "~@8 [e5,g5] ~@7",
  J: "d5 ~ d5 ~@3 d5@3 ~ d5 ~@5", K: "d5 ~ d5 ~ d5 ~@5 d5 ~@3 d5 ~", L: "~@2 [e5,c6] ~ e5 ~@3 a5 ~@3 c6 ~@3",
  M: "d5 ~@3 d5 ~@7 d5@3 ~", N: "~@12 d5 ~ d5 ~", O: "d5 ~ [d5,f#5] ~ d5 ~@11", P: "~@10 d5 ~@3 a5 ~",
})).s("gm_harpsichord").gain(0.09).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@29 [x!2]!16 ~@15 [x!2]!24 x>").gain(0.22)

// drums · snare
const snare = s("sd").struct("<~@29 A@8 B C B C B C B@2 ~@15 A@8 B C B C B C B@10 D>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~@2 x!3 ~ x ~ x ~ x ~ x!4", C: "~@2 x ~ x ~ x ~ x!3 ~ x ~ x!2", D: "x",
})).gain(0.27)

// drums · hihat
const hihat = s("hh").struct("<~@29 [x!8]!16 ~@15 [x!8]!24 ~>").gain(0.27)

// drums · open hat
const open_hat = s("oh").struct("<~@84 x>").gain(0.22)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@29
  [~@2 x!2 ~@2 x ~]!8
  [~@2 x ~@2 x ~ x]!8
  ~@15
  [~@2 x!2 ~@2 x ~]!8
  [~@2 x ~@2 x ~ x]!16
  ~
>`).gain(0.33)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@5 A@3 ~@3 A@3 ~@3 A@3 ~@3 A@3 ~@22 A@3 ~@3 A@3 ~@28>".pickRestart({
  A: "x!4",
})).gain(1.11)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@5 A@3 ~@3 A@3 ~@3 A@3 ~@3 A@3 ~@22 A@3 ~@3 A@3 ~@28>".pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x",
})).gain(0.28)

// drums · shaker
const shaker = s("sh").struct("<~@5 A@3 ~@3 A@3 ~@3 A@3 ~@3 A@3 ~@22 A@3 ~@3 A@3 ~@28>".pickRestart({
// … 13 more lines

More by Salvatore Adamo