Strudelify
Una Citta Per Cantare cover art

1996 · Vorrei incontrarti fra cent'anni

Una Citta Per Cantare

Ron

KeyG majorTempo80 bpm
0:00/0:00
// Una Citta Per Cantare — Ron
// 80 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 11 "Melody Doubled" pad warm (copy of ch 4 "Melody" electric guitar jazz)
// note: Full arrangement: all 73 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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.

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@2 A B C D E F G H F I J K L M N O F@2 P Q R F S T U V W X Y Z AA F M AB AC AD AE I AF AG AH AI AJ AK AL@5 AM@4 AN@6
  AO AP@2 AQ AR AS@3 AO AT@3
>`.pickRestart({
  A: "e2@5 ~ e2 ~ e2@7 b1", B: "e2@5 ~ e2 ~ e2@6 e2 ~", C: "a1@5 ~ a1 ~ a1@6 e2 ~", D: "c#2@5 ~ c#2 ~ c#2@4 c#2@3 ~",
  E: "c3@5 ~ c3 ~ c3@3 g2 c2@3 ~", F: "g2@5 ~ g2 ~ g2@5 ~ g2 ~", G: "g2@6 g2 ~ g2@5 ~ g2 ~", H: "g2@5 ~ g2 ~ g2@6 g2 ~",
  I: "g2@4 f#2@4 e2@5 ~ e2 ~", J: "c2@5 ~ c2 ~ a1@5 ~ a1 ~", K: "a1@6 a1!2 g2@6 e2 ~", L: "g2@6 f2 ~ g2@5 ~ g2 ~",
  M: "g2@6 g2 ~ g2@4 f#2@4", N: "e2@5 ~ e2 ~ c2@5 ~ c2 ~", O: "a1@5 ~ a1 ~ a1@6 a1!2", P: "g2@4 f#2@4 e2@6 e2 ~",
  Q: "c2@6 f2 ~ a1@4 ~@2 a1 ~", R: "a1@6 e1@2 g2@6 d2 ~", S: "g2@5 ~ g2 ~ g2@4 f#2@4", T: "e2@6 e2 ~ c2@5 ~ c2 ~",
  U: "a1@5 ~ a1 ~ a1@4 a1@3 ~", V: "e2@5 ~ e2 ~ a1@5 ~ a1 ~", W: "c#2@5 ~ c#2 ~ c2@5 ~ c2 ~",
  X: "c2@4 c2@3 ~ c2@4 b1@3 b1", Y: "a1@3 a1 d2@4 g2@6 ~ g2", Z: "g2 ~ g2@2 d3@2 g2!2 g2@6 ~ g2",
  AA: "g2@7 g1 g2@5 ~ g2 ~", AB: "e2@5 ~ e2 ~ c2@6 c2 ~", AC: "a1@5 ~ a1 ~ a1@6 f#2@2", AD: "g2@5 ~ g2 ~ g2@6 d2 ~",
  AE: "g2@6 d2 ~ g2@5 ~ g2 ~", AF: "c2@6 c2 ~ a2@5 ~ a2 ~", AG: "a2@3 e2 a1@3 ~ e2@5 ~ e2 ~",
  AH: "a1@5 ~ a1 ~ c#2@5 ~ c#2 ~", AI: "c2@5 ~ c2 ~ c2@7 c1", AJ: "c2@5 ~ c2 ~ c2@5 ~ c2 ~",
  AK: "c2@4 ~@2 c2 ~ c2@4 c2@4",
  AL: "[b1@4 a1@4 d2@4 g2@6 ~ g2!2 ~ g2@2 g3@2 g2@2 g2@6 ~ g2 g2@6 ~ g2 g2@6 ~ g2!2 ~ g2@2 g3@2 g2@2 g2@6 ~ g2 g2@6 ~ g2 g2@4]/5",
  AM: "[f#2@4 e2 ~ e2@2 e3@2 e2@2 c2@6 ~ c2 a1@7 a1!2 ~ a1@4 ~ e1 g2@6 ~ g2 g2@6 ~ g2 g2@7 g1 g2 ~ g2@2]/4",
  AN: "[d3@2 g2!2 g2@4 f#2@4 e2@7 e1 c2@7 c1 a1@6 ~ a1 a1@7 a1 e2@6 ~ e2 a1 ~ a1@2 e2@2 a1!2 c#2@6 ~ c#2 c2@6 ~ c2!2 ~ c2@4 c2 ~ c2@4 b1@4 a1@4]/6",
  AO: "d2@4 g2@5 ~ g2 ~ g2@4", AP: "[~@2 g2 ~ g2@5 ~ g2 ~ g2@6 g2 ~ g2@4 f#2@4 e2@4]/2", AQ: "d2@4 c2@5 ~ c2 ~ a1@4",
  AR: "~@2 a1 ~ a1@4 a1@3 ~ e2@4", AS: "[~@2 e2 ~ a1@5 ~ a1 ~ c#2@6 e1 ~ c2@5 ~ c2 ~ c2@6 g2 ~ c2@4 b1@4 a1@4]/3",
  AT: "[~@2 g2 ~ g2@6 ~ g2 g2@7 d2 g2@16 ~@12]/3",
})).s("gm_fretless_bass").gain(0.17)

// chords · epiano1 · "Piano"
const epiano1 = note(`<
  ~@2 A@2 B C D E F@2 G H I@2 G J K L M E H N@2 O P Q L R S@2 T U V U W Q B E F X Y@2 Z AA@2 AB AC@5 AD@4 AE@6 AF@3 AG@5
  AH@2 AI@2
>`.pickRestart({
  A: "[e3@5 ~ e3@7 ~@18 e3, e2@8 g3 e2@7, [d4,e4]@15 d4@5 g3@9 d4@3, g3@13 e3@3 e3@6 d4@6 e4@4, ~@7 g3 e4@5 e3@2 g3]/2", // Dsus2
  B: "~@13 a4!2 ~, [a2,c5,e5]@15 ~, a4@13 ~@3, ~@6 e4@9 ~", // Am
  C: "~@6 g4@7 ~@2 c#5, [c#3,c#5,e5], a4@7 a4, g4@6 ~@7 g4@2 ~, ~ e4@3", D: "[c4,e4,g4]@13 ~ c4 e4, g3@12 ~ g3@2 ~",
  E: "[g2,g4,b4,d5]@7 ~ [g2,g4,b4,d5]@7 ~", F: "[g4,b4,d5]@5 ~ [b4,d5]@2 g4@4 g4@2 g4 ~, g2 [g2,b4,d5], ~@5 g4@2 ~@9",
  G: "[g2,g4,b4,d5]@7 ~ [g4,b4,d5]@5 ~ [b4,d5]@2, ~ g2, ~@13 g4@2 ~", // G Bm
  H: "[g2,g4,b4,d5]@4 [f#3,f#4,b4,d5]@4 [e2,b3,e4,g4]@7 ~", // G Bm Em
  I: "[[c2,g3,c4,e4]@7 ~@7 a4@7 a4!2 c5 [g4,b4,d5]@5 ~ [b4,d5]@2, ~ [a2,c5,e5]@2 g2, ~@8 a4@6 ~@15 g4@2 ~, ~@3 e4@3 ~@2]/2", // C G Bm Am
  J: "[g2,g4,b4,d5]@7 ~ [g2,g4,b4,d5]@4 [f#3,f#4,b4,d5]@4", K: "b3@4 b3@2 b3 ~ [c2,g3,c4,e4]@7 ~, [e2,e4,g4] ~",
  L: "[c4,e4,a4]@13 ~ c4 e4, a3@12 ~ a3@2 ~", // Am
  M: "[g4,b4,d5]@5 ~ [b4,d5]@2 [g4,b4,d5]@5 ~ [b4,d5]@2, g2!2, ~@5 g4@2 ~@6 g4@2 ~", // G Bm G Bm
  N: "[[c2,g3,c4,e4]@7 ~@14 a4!2 ~ [g2,g4,b4,d5]@7 ~, ~@8 [a2,c5,e5]@15 ~@9, ~@8 a4@13 ~@11, ~@14 e4@9 ~@9]/2", // C G Am
  O: "g4@4 g4@2 g4 ~ [g2,g4,b4,d5]@7 ~, [g2,b4,d5] ~", // G
  P: "[g4,b4,d5]@5 ~ [b4,d5]@2 [g2,g4,b4,d5]@4 [f#3,f#4,b4,d5]@4, g2 ~, ~@5 g4@2 ~@9", // G Bm G Bm
  Q: "b3@4 b3@2 b3 ~ g3@4 g3@2 g3 ~, [e2,e4,g4] [c2,c4,e4]", // Em C
  R: "b3@4 b3@2 b3 ~ [g4,a4,c5,e5]@5 ~ [a4,c5,e5]@2, [e2,e4,g4] a2, ~@13 g4@2 ~", // Am7 Am Em
  S: "[[c#3,g4,a4,c#5,e5]@7 ~@7 g3@7 g3!2 c4 [c2,g3,c4,e4]@4 [b2,g4,b4,d5]@4, ~ [c2,c4,e4]@2 ~, ~@4 g3@3 ~@9, ~@3 e3@3 ~@2]/2", // A7 C G C
  T: "[a2,g4,a4,c5,e5]@4 [d2,a3,d4,f#4]@4 g4@4 g4@2 g4 ~, ~ [g2,b4,d5]", // Am7 D G
  U: "[g4,b4,d5]@5 ~ [b4,d5]@2 [g2,g4,b4,d5]@7 ~, g2 ~, ~@5 g4@2 ~@9", // G Bm G
  V: "[g2,g4,b4,d5]@7 ~ g4@4 g4@2 g4 ~, ~ [g2,b4,d5]", // G
  W: "g4@4 g4@2 g4 ~ [g2,g4,b4,d5]@4 [f#3,f#4,b4,d5]@4, [g2,b4,d5] ~", // G Bm G
  X: "[g2,g4,b4,d5]@4 [f#3,f#4,b4,d5]@4 [b3,e4,g4]@5 ~ [e4,g4]@2, ~ e2, ~@13 b3@2 ~", // G Bm Em
  Y: "[g3@4 g3@2 g3 ~ [c4,e4,a4]@13 ~ c4 e4 [e2,b3,e4,g4]@7 ~, [c2,c4,e4]@8 a3@12 ~ a3@2 ~@9]/2", // Am Em C
  Z: "[a2,g4,a4,c5,e5]@7 ~ [c#3,g4,a4,c#5,e5]@7 ~", // Am7 A7
  AA: "[~@28 e4@2 c4 g3, c2, e4@27 g3@4 ~, [g3,c4]@14 g3 c4@15 ~@2, ~@13 e3@18 ~]/2", // C5
  AB: "~@3 g3@3 [c2,g3,c4,e4]@2, [c2,c4,e4]@3 ~, g3@3 ~@5, ~ e3@2 ~", // C
  AC: "[[b2,g4,b4,d5]@4 [a2,g4,a4,c5,e5]@4 [d2,a3,d4,f#4]@4 [g2,g4,b4,d5]@7 ~ [g2,g4,b4,d5]@7 ~ [g2,g4,b4,d5]@7 ~ g4@4 g4@2 g4 ~ g4@4 g4@2 g4 ~ [g4,b4,d5]@5 ~ [b4,d5]@2 [g2,g4,b4,d5]@7 ~ [g2,g4,b4,d5]@7 ~ [g2,g4,b4,d5]@4, ~@9 [g2,b4,d5]@2 [g2,b4,d5]@2 g2@2 ~@5, ~@57 g4@2 ~@21]/5", // G Am7 D G Bm G
  AD: "[[f#3,f#4,b4,d5]@4 [b3,e4,g4]@5 ~ [e4,g4]@2 [g3,c4,e4]@5 ~ [c4,e4]@2 ~@13 a4!2 ~ [g4,b4,d5]@5 ~ [b4,d5]@2 [g2,g4,b4,d5]@7 ~ [g2,g4,b4,d5]@7 ~ [g2,g4,b4,d5]@4, ~@4 e2@8 c2@8 [a2,c5,e5]@15 ~ g2@8 ~@20, ~@9 b3@2 ~@6 g3@2 ~ a4@13 ~@8 g4@2 ~@21, ~@26 e4@9 ~@29]/4", // Bm Em C G Bm G Am
  AE: "[~@2 [b4,d5]@2 [g2,g4,b4,d5]@4 [f#3,f#4,b4,d5]@4 [e2,b3,e4,g4]@7 ~ [c2,g3,c4,e4]@7 ~@14 a4!2 ~ b3@4 b3@2 b3 ~ [a2,g4,a4,c5,e5]@7 ~ [c#3,g4,a4,c#5,e5]@7 ~@15 g3 ~ [c2,g3,c4,e4]@4 [b2,g4,b4,d5]@4 [a2,g4,a4,c5,e5]@4, ~ g4@2 ~@25 [a2,c5,e5]@15 ~ [e2,e4,g4]@8 ~@16 [c2,g3,a#3,c4]@15 ~@13, ~@28 a4@13 ~@33 c3@9 ~@13, ~@34 e4@9 ~@25 e3@13 e3@2 ~@13]/6", // Bm G Bm Em C Am7 A7 C …
  AF: "[[d2,a3,d4,f#4]@4 [g2,g4,b4,d5]@7 ~ [g2,g4,b4,d5]@7 ~ [g2,g4,b4,d5]@7 ~ [g4,b4,d5]@5 ~ [b4,d5]@2 [g2,g4,b4,d5]@4 [f#3,f#4,b4,d5]@4 [e2,b3,e4,g4]@4, ~@7 g2@2 ~@3, ~@33 g4@2 ~@13]/3", // D G Bm G Bm Em
  AG: "[[d2,g3,b3,d4,e4]@4 [g3,c4,e4]@5 ~ [c4,e4]@2 ~@6 a4@7 a4!2 c5 [b3,e4,g4]@5 ~ [e4,g4]@2 g4@4 g4@2 a4@2 [g4,a4,c#5,e5]@5 ~ [a4,c#5,e5]@2 [c4,e4,g4]@13 ~ c4 e4 [c2,g3,c4,e4]@4 [b2,g4,b4,d5]@4 [a2,g4,a4,c5,e5]@4, ~ c2@2 [a2,c5,e5]@4 e2@2 [a2,c5,e5]@2 c#3@2 ~@7, ~@9 g3@2 ~ a4@6 ~@18 a4@6 ~@7 g4@2 ~@29, ~@16 e4@12 ~@5 b3@2 ~@17 g3@12 ~ g3@2 ~@13]/5", // Em7 C Em A7 A C G Am7 …
  AH: "[[d2,a3,d4,f#4]@4 [g2,g4,b4,d5]@7 ~ [g4,b4,d5]@5 ~ [b4,d5]@2 [g3,b3,d4]@11 ~, ~@3 g2@2 ~@3, ~@17 g4@2 ~@13]/2", // D G Bm G
  AI: "[[g3,b3,d4]@3 ~ [g3,b3,d4]@15 ~@13]/2", // G
})).s("gm_epiano1").gain(0.15)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@6 B A@3 C D@4 A E A@2 C D@4 F A G H I J D@4 A@4 C D@2 A@2 K L M L M L M N O N O P L M O Q@5 R S T Q@2 O U ~
>`.pickRestart({
  A: "x ~@5 x ~ x ~@6 x", B: "x ~@2 x!2 ~@2 x!2 ~@6 x", C: "x ~@2 x!2 ~@2 x", D: "x ~@6 x!2 ~@5 x ~",
  E: "x ~@2 x!2 ~@3", F: "x ~@5 x ~ x ~@4 x ~@2", G: "x ~@5 x ~ x ~@4 x!2 ~", H: "~@7 x!2 ~@6 x",
  I: "x ~@6 x!2 ~@2 x ~@2 x ~", J: "~@7 x!2 ~@5 x ~", K: "x ~@6 x!2 ~@3 x ~@3", L: "~@3 x!2 ~@6 x!2 ~@2 x",
  M: "~@2 x ~@8 x!2 ~@3", N: "~@3 x!2 ~@2 x ~@2 x ~@5", O: "~@3 x!2 ~@6 x!2 ~@3", P: "~@3 x!2 ~@2 x ~@2 x ~ x ~@3",
  Q: "~@3 x!2 ~@5 x ~ x ~@3", R: "~@2 x ~ x ~@6 x!2 ~@3", S: "~ x!2 ~@3 x ~", T: "~ x!2 ~@2 x!2 ~", U: "~@3 x!2 ~@11",
})).gain(0.17)

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@71>").gain(0.17)

// drums · snare
const snare = s("sd").struct("<~@2 A@6 B A@9 C A@7 C A D E A@15 F G@13 H G@6 I G@3 J K ~>".pickRestart({
  A: "~ x ~ x", B: "x!2 ~@7 x ~@2 x ~@3", C: "~@4 x ~@7 x ~@2 x", D: "~ x!2 ~", E: "~ x ~@10 x ~@3",
  F: "~@4 x ~@4 x ~ x ~@4", G: "x!2", H: "x ~@7 x ~@3 x!4", I: "x ~@7 x ~@2 x ~@4", J: "x ~@7 x ~@6 x", K: "x",
})).gain(0.15)

// drums · clap
const clap = s("cp").struct("<~@2 [~ x ~ x]!43 [~ x ~@2] [x!2]!25 x ~>").gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@29 A ~ B A ~@12 C ~@23 D E ~@2>".pickRestart({
  A: "~@5 x!2 ~@9", B: "~@15 x", C: "~@7 x!2 ~@7", D: "~@11 x ~@4", E: "~ x!2 ~@13",
})).gain(0.15)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B@2 A C D E A@2 B F@2 G A@3 C A B A H I J K C A L M ~ N O A J F B@2 C@2 G A@3 B P ~@13 Q R S T U A V W X A Y ~@3
>`.pickRestart({
  A: "x!8", B: "x!3 ~ x!5 ~ x!5 ~", C: "x ~ x!5 ~ x ~ x ~ x ~ x!2", D: "x!3 ~ x!5 ~ x!4 ~@2", E: "~ x!6 ~",
  F: "x ~ x!5 ~ x!3 ~ x!4", G: "x ~ x!5 ~ x ~ x ~ x ~ x ~", H: "x ~ x ~ x ~ x ~ x ~ x!5 ~",
  I: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", J: "x ~ x ~ x ~ x ~ x!3 ~ x!4", K: "x ~ x!4 ~@2 x ~ x!5 ~",
  L: "x!3 ~ x!7 ~@2 x ~ x", M: "x", N: "~@9 x!2 ~@2 x!2 ~", O: "x!3 ~@5 x ~ x ~ x ~ x ~", P: "x!4 ~@2 x ~@9",
  Q: "~@4 x!8 ~@4", R: "~@2 x!6", S: "x ~ x ~ x!3 ~ x!5 ~ x!2", T: "x!3 ~ x ~ x!5 ~ x ~ x ~",
  U: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", V: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", W: "x!3 ~ x ~ x ~ x ~ x!3 ~ x!2",
  X: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~", Y: "x!2 ~ x ~@4",
})).gain(0.15)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2 A B@2 C D B ~ A@2 B E F G A H C D C B A I H J K D A L M ~@2 N H O F P B D@2 Q A@3 B ~@15 R S T U@2 C V W U X Y Z ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~@3 x ~@5 x ~@5 x", C: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2",
  D: "~ x ~@5 x ~ x ~ x ~ x ~@2", E: "~ x ~@5 x ~@3 x ~@4", F: "~ x ~@9 x ~@4", G: "~ x ~@7 x ~ x ~ x ~ x",
  H: "~ x ~ x ~ x ~@3 x ~ x ~ x ~ x", I: "~ x ~ x ~ x ~@3 x ~@5 x", J: "~ x ~ x ~ x ~ x ~@3 x ~@4",
  K: "~ x ~@5 x ~ x ~@5 x", L: "~@3 x ~@12", M: "~ x ~@6", N: "~@9 x ~ x ~ x ~ x", O: "~ x ~ x ~ x ~@5 x ~@4",
  P: "~@3 x ~@5 x ~@6", Q: "~ x ~@5 x ~ x ~ x ~ x ~ x", R: "~@5 x ~ x ~ x ~ x ~ x ~ x", S: "~ x ~@5 x ~@5 x ~@2",
  T: "~@5 x ~@5 x ~ x ~ x", U: "~ x ~@3 x ~ x ~ x ~ x ~ x ~ x", V: "~@3 x ~ x ~ x ~ x ~@3 x ~@2",
  W: "~@3 x ~ x ~ x ~ x ~ x ~ x ~ x", X: "~ x ~ x ~ x ~@3 x!2 ~ x!3 ~", Y: "~@4 x!12", Z: "x!4 ~@12",
})).gain(0.07)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@19 B C ~ D E ~@12 F ~@23 G ~@3>".pickRestart({
  A: "~@13 x!2 ~", B: "~@7 x", C: "~@3 x!2 ~@11", D: "~@11 x!2 ~@3", E: "~@3 x ~@12", F: "~@5 x ~@10",
  G: "~@7 x!2 ~@6 x",
})).gain(0.15)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A ~ B ~@5 C@2 ~ C A ~ A ~@2 C ~@2 D ~@3 E ~@3 C@3 A ~@24 F@2 ~ F ~@3 F ~@4
>`.pickRestart({
  A: "~@15 x", B: "~@7 x", C: "~@7 x ~@8", D: "~@3 x ~@4", E: "~ x ~@14", F: "~@3 x ~@12",
})).gain(0.15)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@19 B ~@2 C ~@13 D ~@23 E ~@3>".pickRestart({
  A: "~@4 x!2 ~@5 x ~@4", B: "~@11 x!2 ~@3", C: "~ x", D: "~@3 x ~@12", E: "~ x ~@2",
})).gain(0.17)

// drums · crash
const crash = s("cr").struct("<~@2 A ~@5 B A ~@19 C ~@2 C ~@12 D ~@14 E ~@9 F@2 ~>".pickRestart({
  A: "x", B: "~@15 x", C: "~ x", D: "~@3 x", E: "~@3 x!2 ~@11", F: "~ x ~@2",
})).gain(0.12)

// drums · ride
const ride = s("rd").struct("<~@29 A B C ~@13 D E F G F G F H I H I J G F K ~@13>".pickRestart({
  A: "~@8 x ~ x!3 ~ x!2", B: "x ~ x!7 ~ x!5 ~", C: "x!3 ~ x!4 ~@8", D: "~@12 x ~ x!2", E: "x ~ x!3 ~ x!7 ~ x!2",
  F: "x!3 ~ x ~ x ~ x!8", G: "x!13 ~ x!2", H: "x!5 ~ x!5 ~ x ~ x ~", I: "x!16", J: "x!5 ~ x!5 ~ x!4", K: "x!4 ~@12",
})).gain(0.17)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@29 A B C ~@13 D E F D F D F G ~ G ~ H D F ~@14>".pickRestart({
  A: "~@9 x ~@3 x ~@2", B: "~ x ~@7 x ~@5 x", C: "~@3 x ~@12", D: "~@13 x ~@2", E: "~ x ~@3 x ~@7 x ~@2",
  F: "~@3 x ~ x ~ x ~@8", G: "~@5 x ~@5 x ~ x ~ x", H: "~@5 x ~@5 x ~@4",
})).gain(0.1)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@2 A@10 B C@4 A@4 B C@4 A@2 B C B C@5 A@4 B C@2 A@3 D E D E D E D F D F D@2 E D F@5 E@2 D F@3 ~@2
>`.pickRestart({
  A: "~ x ~@2", B: "~ x ~ x", C: "~@3 x", D: "x!2", E: "x", F: "~ x",
})).gain(0.22)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@2 A@10 B C@4 A@4 B C@4 A@2 B C@7 A@4 B C@2 A@2 D E@2 F E@3 G@4 H E I G@5 J E@2 G@4 ~@2
>`.pickRestart({
  A: "~@2 x!2 ~@12", B: "~@2 x!2 ~@6 x!2 ~@4", C: "~@10 x!2 ~@4", D: "~@2 x!2 ~@10 x!2", E: "~@14 x!2", F: "~@15 x",
  G: "~@6 x!2 ~@8", H: "~@6 x!2 ~@7 x", I: "~@5 x ~@8 x!2", J: "~@6 x!2 ~@6 x!2",
})).gain(0.39)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@2 A@10 ~ B@4 A@4 ~ B@4 A@2 ~ C D B@5 A@4 ~ B@2 A@2 E F G H I@2 G J K@2 L M F N O L@4 P I@2 Q L@3 P ~
>`.pickRestart({
  A: "~@11 x ~ x!3", B: "~@3 x ~ x!3 ~@8", C: "~@3 x ~ x!4 ~@7", D: "x ~@2 x ~ x!4 ~@7", E: "~@11 x!2 ~@3",
  F: "~@7 x ~ x!4 ~@3", G: "~@2 x ~@4 x ~ x!4 ~@3", H: "~@4 x ~@2 x ~ x!4 ~ x ~", I: "~@7 x ~ x!3 ~@4",
  J: "~@3 x!2 ~@10 x", K: "~ x!4 ~@10 x", L: "~ x!3 ~@11 x", M: "~ x!3 ~@8 x ~ x ~", N: "~@3 x ~@3 x ~ x!3 ~@4",
  O: "~@2 x ~@12 x", P: "~ x!3 ~@12", Q: "~@15 x",
})).gain(0.39)

// drums · shaker
const shaker = s("sh").struct("<~@29 A B C ~@13 D B@13 E ~@13>".pickRestart({
  A: "~@4 x!4", B: "x!8", C: "x!4 ~@4", D: "~@6 x!2", E: "x!2 ~@6",
})).gain(0.17)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@29 A B C ~@13 D B@13 E ~@13>".pickRestart({
  A: "~@9 x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x ~@8", D: "~@13 x ~ x",
  E: "~ x ~ x ~@12",
})).gain(0.1)

stack(
// … 3 more lines

More by Ron