Strudelify

Quelque chose dans mon coeur

Elsa

KeyA minorTempo63 bpm
0:00/0:00
// Quelque chose dans mon coeur — Elsa
// 63 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(63/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D@2 ~@3 E F G H I J K L M N O P Q R S R T ~@3 U V W X Y@2 Z AA AB AC AD AE AF@2 AG AH AI AJ ~@4 J K L M J K L M
  J K L M J K L M J K L M J K L M J K L M N O P Q ~@2
>`.pickRestart({
  A: "a2@15 ~", B: "d2@15 ~", C: "g2@7 ~", D: "[c2@7 ~ e2@14 ~@10]/2", E: "~@2 d2 f2 e2@4 a1@7 ~",
  F: "e1@4 ~ e2@2 e1 a1@7 ~", G: "d2@4 ~ d2 ~ d#1 e1@7 ~", H: "a1@4 ~ a1 ~ a1 b1@7 ~", I: "e1@2 a1 b1 e2@6 ~@6",
  J: "a1@6 ~ a1 c2@5 ~ c2 ~", K: "d2@6 ~ d2 d2@3 ~ d2@3 ~", L: "g1@7 g1 g1@5 ~ a1 b1", M: "c2@6 ~ c2 e1@5 ~ e1 ~",
  N: "a1@6 ~ a1 c2@5 ~ c2@2", O: "d2@6 ~ d2 d2@6 d2 ~", P: "g1@6 ~ g1 g1@5 ~ a1 b1", Q: "c2@5 ~ e2@5 e1@5",
  R: "a1@6 ~ a1 c2@7 c2", S: "d2@6 e2@6 ~ e1 ~ e1", T: "d2@5 ~ e2@9 ~", U: "~@10 d2 f2 e2@4",
  V: "a1@7 ~ e1@4 ~ e2@2 e1", W: "a1@7 ~ d2@4 ~ d2 ~ d#1", X: "e1@7 ~ a1@4 ~ a1 ~ a1",
  Y: "[b1@7 ~ e1@2 a1 b1 e2@6 ~@6 a1@6 ~ a1]/2", Z: "c2@5 ~ c2 ~ d2@6 ~ d2", AA: "d2@3 ~ d2@3 ~ g1@7 g1",
  AB: "g1@5 ~ a1 b1 c2@6 ~ c2", AC: "e1@5 ~ e1 ~ a1@6 ~ a1", AD: "c2@5 ~ c2@2 d2@6 ~ d2", AE: "d2@6 d2 ~ g1@6 ~ g1",
  AF: "[g1@5 ~ a1 b1 c2@5 ~ e2@5 e1@5 a1@6 ~ a1]/2", AG: "e1@5 e2@2 e1 a1@7 a1", AH: "d2@4 ~ a1 ~ d2 e2@5 e1@2 ~",
  AI: "a1@6 ~ a1 b1@6 ~ b1", AJ: "e1@2 a1 b1 e2@3 ~@9",
})).s("gm_acoustic_bass").gain(0.4)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D@2 E F G H E F I@2 J K L M N O P Q@2 R S T U V W X@2 V W Y@2 Z AA AB AC AD AE AF@2 AG AH AI AJ AK AL AM AN J K
  L AO J K L M J K L AO J K L AO J K L AO J K L AO J K L AO N O P AP@3
>`.pickRestart({
  A: "a3@11 ~@4 a3, [e4,a4], c5@7 c5, ~@11 a3@2 a3@2 ~, ~@3 b4", B: "d5@13 ~@2 e5, [d3,f4,a4], ~@13 d4@3, ~@7 d5",
  C: "b4@6 ~ g4, [g3,d5], g4@7 ~, ~@3 b4", // G5
  D: "[[c3,g3,c4,e4]@8 [e2,g#3,b3,d4,e4]@11 ~@11 e3@2, ~@3 [a2,c4], ~@6 [e4,a4] [e4,a4,c5], ~@13 e3@2 ~]/2", // C E7 Am A5 Am
  E: "~@4 [d4,g#4,b4]@2 e3 ~@7 a3@2, [e2,e4,a4,c5]@7 ~ [e4,a4,c#5]@3 a3@3 ~@2, ~@2 b2@5 ~ a2@8, ~@5 e3@3, ~@3 [e4,a4,c#5,e5]", // G#dim Am A
  F: "~@3 f4 ~@3 d4, d4@5 c4@3 ~@2 b3@6, f4 d5 g#4 [g#4,e5], [d3,a4,d5]@3 [d3,a4]@5 [e2,e4,d5]@8, ~ a3@3 ~@4", // C#m D5 E7
  G: "~@4 [d4,a4,c5]@4 f#3@2 ~@2 b2@2 e4 ~, [a2,d5]@8 b2@3 d#4@4 ~, [d4,a4]@4 ~@4 [b3,e4]@7 ~, ~@2 e3@6 ~@2 f#3@5 ~", // D7 D5 E5
  H: "~@3 f4 e4@4 ~@6 e3@2, e2@4 [e4,a4] e3 [e4,a4,c5]@2, [a3,e4] g#3@3, ~ b2@15, ~ d4 e3@2 [a2,c4]@4", // A5 Am A5 Am
  I: "[~@4 [d4,a4,c5]@4 f#3@2 ~@9 b4 [e3,b3,e4,g#4,e5]@8 ~@4, [a2,d5]@8 b2@6 a3 b3 d4 e4 a4@2 ~@12, [d4,a4]@4 ~@4 e4@5 e3@7 ~@12, ~@2 e3@6 b3@3 d#4@9 ~@12, ~@5 f#3@5 ~@6]/2", // D7 E D5
  J: "~@6 c4@2 a3@3 a3@2 ~ [a3,e4]@2, [a2,c4]@5 a2@3 [c3,e4]@6 ~@2, a3@2 a3@6 ~@3 f4@5, ~ e3@7 ~@5 c3@3, ~@3 b3@5 c4@8", // A5 Am C
  K: "[f3,a3,d4]@3 ~@3 e4@2 d3@5 d3@3, d2 ~, ~@3 [f3,a3,d4]@5 [f3,a3,d4]@8, ~@5 d3@3 ~@8", // Dm
  L: "~@6 d4@2 ~@3 d3@2 ~ [g3,f4]@2, [g2,b3] g2, ~ d3@4 d3@3 ~@5 d3@3, ~ g3@3 g3@3 ~, ~@3 c4@5 ~@8", // G7 G
  M: "[g3,c4]@3 c4@2 ~ c4@2 g#3@3 ~@3 [g#3,e4]@2, e4@8 ~@5 b2@2 ~, c3@5 c3@3 [e2,b3,e4]@7 ~, ~@3 [g3,d4]@5 ~@3 [g#3,f4]@4 ~", // C5 C#m E5 G5 C#
  N: "~@6 c4@2 a3@3 ~@3 e4@2, [a2,c4]@5 a2@3 [c3,e4]@6 ~@2, a3@2 a3@6 ~@3 [a3,f4]@5, ~ e3@7 ~@5 c3@3, ~@3 b3@5 c4@8", // Am C Dm
  O: "[f3,d4]@3 ~@3 e4@2 d3@5 d3@3, [d2,a3] ~, ~@3 [f3,d4]@5 [f3,d4]@8, ~@5 d3@3 ~@8", // Dm D5 Dm
  P: "~@3 d4 ~@3 f4, b3@5 g2@3 [g2,g3]@8, g2@3 c4@5 ~@8, ~ d3@7 ~@5 d3@3, ~ g3@3 ~@4", // G
  Q: "[[c3,g3,c4,e4]@6 e4@10 ~@7 a3 ~@5 c4@2 a3, ~@6 [e2,g#3]@15 c4 a2@2 [c2,e4]@8, ~@6 b3@11 e3@7 ~ e3@7, ~@16 e4@8 ~@3 b3@5, ~@16 a2@2 a3 b3@5 ~@2 a3@5 ~]/2", // C E C
  R: "[d2,f3,a3,c4]@6 [e2,e3,g3,b3,d4]@9 ~", // Dm7 Em7
  S: "~@5 c4@2 a3 ~@5 c4@2 a3, [a2,e4] [c2,e4], ~ e3@7 ~ e3@7, ~@2 a3@5 ~@3 a3@5 ~, ~@3 b3@5 ~@3 b3@5", // A5 C
  T: "[d2,f3,a3,c4]@3 [e2,e3,g#3,b3]@5", // Dm7 E
  U: "~@6 e3@2 ~@4 [d4,g#4,b4]@2 e3 ~, [a2,c4]@8 [e2,e4,a4,c5]@7 ~, [e4,a4] [e4,a4,c5] ~@2, ~@2 e3@4 ~@4 b2@5 ~", // G#dim Am A5 Am
  V: "~@3 a3 ~@3 f4, a2@8 ~@2 a3@3 c4@3, [e4,a4,c#5]@3 a3@3 ~@2 f4@4 d5@4, ~@2 e3@6 [d3,a4,d5]@3 [d3,a4]@5, ~ [e4,a4,c#5,e5] d4@2", // A D5 A
  W: "~@3 d4 ~@2 [d4,a4,c5]@2, [e2,e4,d5] [a2,d5], g#4@2 [g#4,e5]@2 ~ e3@3, ~ b3@3 [d4,a4]@2 ~@2", // D7 E7 D5 C#m D5
  X: "[f#3@2 ~@2 b2@2 e4 ~@4 f4 e4@4 ~@6 e3@2 ~@4 [d4,g#4,b4]@2 e3 ~, [b3,e4]@7 ~ [a3,e4]@4 g#3@4 [e4,a4]@2 e3@2 [e4,a4,c5]@4 ~@8, b2@3 d#4@4 ~@2 b2@15 ~@2 b2@5 ~, ~@2 f#3@5 ~ e2@16 [e2,e4,a4,c5]@7 ~, ~@5 d4 e3@2 [a2,c4]@4 ~@4]/2", // G#dim E5 A5 Am
  Y: "[f#3@2 ~@9 b4 [e3,b3,e4,g#4,e5]@8 ~@10 c4@2, b2@6 a3 b3 d4 e4 a4@2 ~@15 b3@5, e4@5 e3@7 ~@12 [a2,c4]@5 a2@3, b3@3 d#4@9 ~@13 e3@7, ~ f#3@5 ~@6 a3 a3@3]/2", // E Am
  Z: "a3@3 a3@2 ~ [a3,e4]@2 [f3,a3,d4]@3 ~@3 e4@2, c4@8 ~@3 [f3,a3,d4]@5, [c3,e4]@5 c3@3 d2@8, ~@3 f4@5 ~@5 d3@3", // A5 Dm C
  AA: "d3@5 d3@3 ~@6 d4@2, [f3,a3,d4] [g2,b3], ~@9 d3@4 d3@3, ~@5 g3@3, ~@11 c4@5", // Dm G
  AB: "~@3 d3@2 ~ [g3,f4]@2 [g3,c4]@3 c4@2 ~ c4@2, g2@8 c3@5 c3@3, g3@5 d3@3 e4@8, ~@11 [g3,d4]@5", // G7 C5 G5
  AC: "g#3@3 ~@3 [g#3,e4] ~@7 c4@2, [e2,b3,e4]@7 ~@2 e3@7, ~@3 [g#3,f4]@4 ~ a3@2 a3@6, ~@5 b2@2 ~ [a2,c4]@5 a2@3, ~@11 b3@5", // C#m E5 C# Am
  AD: "a3@3 ~@3 e4@2 [f3,d4]@3 ~@3 e4@2, c4@8 ~@5 d3@3, [c3,e4]@5 c3@3 [d2,a3]@8, ~@3 [a3,f4]@5 ~@3 [f3,d4]@5", // Dm C D5 Dm
  AE: "d3@5 d3@3 ~@6 d4@2, [f3,d4]@8 b3@5 g2@3, ~@8 g2@3 c4@5, ~@9 d3@7, ~@5 g3@3", // Dm
  AF: "[~@6 f4@2 [c3,g3,c4,e4]@6 ~@17 e3, [g2,g3]@4 ~@3 [e2,g#3,b3,e4]@8 d4, ~@5 d3@3 ~@16 a2@8, ~@24 c4@2 a3@2 e3 a3@3, ~@25 e3@2 c4@5]/2", // C G E
  AG: "~@2 a3 ~@4 e3 ~@7 a3, e2 [a2,c#4], c4@3 b3@2 g#3@3 ~ e3@2 e4@5, ~ e3@2 ~ e3@2 b3@2 ~@2 a3@2 e3@4, ~@13 a3 f4@2", // A
  AH: "~@7 f3 ~@7 g#3, [d2,e4] e2, ~ f3@2 d4@2 a3@3 ~ g#3@2 f4@5, ~@2 a3@2 f3@2 d4@2 e4@5 b3@3, ~@5 b3 g#3 e4", // Dsus2
  AI: "~@7 c4 ~@7 f#3, [a2,d4] [b2,e4], ~ e3@2 c4@3 b3@2 ~@2 b3@3 b3@3, ~@2 a3@2 e3@4 ~ f#3@3 f#3@3 ~, ~@5 a3@3 ~@3 d#4@3 d#4@2", // D5 E5
  AJ: "~@4 e4@4 ~@7 e4, e2@4 ~ c5@2 c5, e4@3 b3@5 a4@4 a4@4, ~ e3@7 [e3,a3,c4]@8, ~@2 g#3@6 ~ e4@2 e4@2 e4@2 ~", // Am
  AK: "~@4 e5@3 ~@8 e4, [e3,g#3,b3]@7 ~ [e3,a3]@8, b4@2 g#4@5 ~@2 e4 a4@6, ~ e4@6 ~ c#4@5 e4 [c#4,e5]@2, ~@3 b4@4 ~ c#5@3 e4 c#5@4", // E A5 C#m
  AL: "~@3 d5@4 ~@8 g#4, [f3,a3,d4]@7 ~ [e3,g#3]@8, d5@2 a4@5 ~ d5@5 g#4 d5@2, ~ f4@6 ~ d4@3 g#4 [d4,e5]@4, ~@9 g#4 b4@6", // Dm E Dsus2
  AM: "~@7 e4 ~@6 b4 ~, [e3,a3]@8 [d#3,f#3,b3]@7 ~, [c4,c5]@3 b4@5 b4@3 b4@3 ~@2, ~ e4@3 [c4,c5] e4 [c4,c5]@2 ~ d#4@3 d#4@3 ~, ~@2 a4@6 ~@2 f#4@3 f#4@2 ~", // A5 B C
  AN: "~@7 b3 [e2,g#3,e4]@7 ~, a4@4 [d3,b3] e3 a3@2 ~@8, ~ [e2,g#4]@7 ~@8, ~ [a2,e4]@3 ~@4, ~@3 [b2,d4]@5 ~@8", // E G E A5 Bm
  AO: "[g3,c4]@3 c4@2 ~ c4@2 g#3@3 ~@3 [g#3,e4] ~, e4@8 ~@5 b2@2 ~, c3@5 c3@3 [e2,b3,e4]@7 ~, ~@3 [g3,d4]@5 ~@3 [g#3,f4]@4 ~", // C5 C#m E5 G5 C#
  AP: "[[c3,g3,c4,e4]@3 [e2,g#3,b3,e4]@16 ~@5]/3", // C E
})).s("gm_piano").gain(0.48)

// other · piano · "A.PIANO 2"
const piano_2 = note(`<
  A B@3 ~@9 C D E F C G E H I J I K ~@5 L M N@2 O@2 P Q R@2 S T U V W X ~@4 C D E F C D E F C D E F C D E F C D E F C D
  E F C D E F C G E H ~@2
>`.pickRestart({
  A: "e6@2 ~@10 b5@2 ~ d6, ~@7 c6",
  B: "[d6@3 ~@13 d6@3 ~@9 b5@2 ~@2 e6@2 ~@6 a4@2 ~ g#4@5, ~@14 d6@2 ~@15 d6@2 ~@15, ~@15 e6@2 ~@13 g6@2 ~@16]/3",
  C: "c5@2 ~ b4@2 ~ c5 ~ e5@2 ~ f5@2 ~ e5 ~", D: "d5@3 ~", E: "b4@2 ~ c5@2 ~ d5 ~ g4@5 ~ f5 ~",
  F: "e5@6 ~@2 e5@2 d5 f5@2 ~ e5 ~", G: "d5@11 ~@5", H: "e5@7 ~@9", I: "e5 e4 a4 b4 ~ c5 ~ a4 e5 e4 a4 b4 ~ c5 ~ a4",
  J: "c5 ~@5 d5@2 ~@5 b4 ~@2", K: "a3 d4 f4 a4 d4 f4 b4 ~@9", L: "~@8 d4 e4 f4@6", M: "e3@4 a3 b3 c4@2",
  N: "[b3@8 e3@15 ~ c5@2 ~ b4@2 ~ c5 ~]/2", O: "[e5@2 ~ f5@2 ~ e5 ~ d5@12 ~@4 b4@2 ~ c5@2 ~ d5 ~]/2",
  P: "g4@5 ~ f5 ~ e5@6 ~@2", Q: "e5@2 d5 f5@2 ~ e5 ~ c5@2 ~ b4@2 ~ c5 ~",
  R: "[e5@2 ~ f5@2 ~ e5 ~ d5@11 ~@5 b4@2 ~ c5@2 ~ d5 ~]/2", S: "g4@5 ~ f5 ~ e5@7 ~", T: "~@8 c5@3 c5@3 d5 ~",
  U: "c5@2 ~ b4@4 ~ c#5@2 ~ e5@2 ~ f5 ~", V: "e5@2 ~ d5@4 ~ d5@2 ~ f5@2 ~ e5 ~",
  W: "d5@2 ~ c5 ~ a4 b4 c5 e5@2 ~ d#5@2 ~ d#5 ~", X: "e5 ~@3",
})).s("gm_piano").gain(0.4)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@9 A B C ~ D E F G D E F H D I D J ~@8 K L M N O L M P O@2 Q R S ~@4 D E F G D E F G D E F G D E F G D E F G D E F G
  D E F G D E F H ~@2
>`.pickRestart({
  A: "e3@13 ~@3", B: "d3@13 ~@3", C: "a2@4 b2@3 ~", D: "a3!8 c4!8", E: "d4!16", F: "g3!14 a3 b3", G: "c4!8 e3!8",
  H: "c4!6 e3!10", I: "d4!8 e4!8", J: "d4!6 e3 ~@9", K: "~@8 a3!8", L: "c4!8 d4!8", M: "d4!8 g3!8",
  N: "g3!6 a3 b3 c4!8", O: "e3!8 a3!8", P: "g3!6 a3 b3 c4!6 e3!2", Q: "d4!8 e3!8", R: "a3!8 b3!8", S: "e3!5 ~@11",
})).s("gm_electric_guitar_muted").gain(0.12)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  A B C D E@2 F@2 G@2 H@3 I J K L M N O P Q@2 R@2 S T U V W T U X@5 Y@6 Z AA AB AC AD AE AF I J K L I J K L I J K L I J
  K L I J K L I J K L I J K L M N O P ~@2
>`.pickRestart({
  A: "[c5,e5]@15 ~", B: "[a4,d5,f5]@15 ~", C: "b4@15 ~", D: "[c5,e5,g5]@7 ~ [b4,e5,g#5]@8",
  E: "[~@8 [a3,a4]@8 ~@4 b4@3 ~ [a3,a4,c#5]@8, ~@2 c5@3 ~@3, ~@2 [e3,a4] ~]/2", // A A5
  F: "[[d4,a4,d5]@8 [e3,b4]@7 ~@5 c5@3 ~ e5@3 ~ d#5@3 ~, ~@2 d5@3 ~@3, ~@16 [a3,a4]@7 ~ [b3,b4]@7 ~]/2", // D5 E5 A B
  G: "[a4@4 g#4@4 [a3,a4]@8 ~@4 b4@3 ~ [a3,a4,c#5]@8, [e3,e5]@8 c5@11 ~@13, ~@2 [e3,a4] ~]/2", // A E A5
  H: "[[d4,a4,d5]@8 [e3,b4]@7 ~@5 c5@3 ~ e5@3 d#5@3 b4@6 [e3,g#4,e5]@7 ~@5, ~@2 d5@3 ~@7, ~@16 [a3,a4]@7 ~ [b3,f#4]@12 ~@12]/3", // D5 E5 E A B5
  I: "a3@7 ~ c4@8, [a4,c5]", J: "[d4,f4,a4]", K: "[g3,g4,b4]", L: "[g4,c5] [e4,b4]", M: "a3 c4, [a4,c5]", N: "[d4,f4]",
  O: "[g3,g4,b4]@15 ~", P: "[g4,c5]@3 [e4,g#4,b4]@4 ~", Q: "[a3@7 ~ c4@8 d4@6 [e4,g4,b4]@9 ~, a4@11 ~@5, c5 ~]/2",
  R: "[c5@16 [d4,f4]@5 ~ g#4@5 ~@5, a4@21 ~@11, a3@7 ~@25]/2", S: "[a3,a4]@8 ~@4 b4@3 ~, c5@3 ~, ~ [e3,a4]",
  T: "[a3,a4,c#5] [d4,a4,d5]", U: "[e3,b4]@7 ~@5 c5@3 ~, d5@3 ~, ~@8 [a3,a4]@7 ~",
  V: "e5@3 ~ d#5@3 ~ a4@4 g#4@4, [b3,b4]@7 ~ [e3,e5]@8", W: "[a3,a4]@8 ~@4 b4@3 ~, c5@11 ~@5, ~ [e3,a4]",
  X: "[e5@3 d#5@5 a4@8 g#4@7 ~ a3@7 ~ c4@8 [d4,f4,a4]@16 [g3,g4,b4]@16 [g4,c5]@8, [b3,b4]@8 [e3,e5]@15 ~ [a4,c5]@16 ~@40]/5", // Dm G C5 B E Am
  Y: "[[e4,b4]@8 a3@8 c4@8 [d4,f4]@16 [g3,g4,b4]@15 ~ [g4,c5]@6 [e4,g#4,b4]@8 ~@2 [a3,a4]@8 ~@3 b4@5 [a4,c#5]@8, ~@8 [a4,c5]@16 ~@48 c5@11 ~@13, ~@10 g#4 ~]/6", // E5 Dm G C5 E A Am
  Z: "d4 [e4,g#4], d5", AA: "a4@8 e5@3 d#5@5, d5@3 ~@13", AB: "~ [a3,a4]", AC: "[e4,e5] [a3,a4]", AD: "[d4,d5] [e4,e5]",
  AE: "[a3,a4] [b3,b4]", AF: "~@4 [e3,e4]@3 ~",
})).s("gm_pad_warm").gain(0.27)

// chords · pad warm · "WARM PAD" · soft notes
const pad_warm_soft = note(`<
  A ~ B ~@13 C ~ D ~ E ~ F G H ~@11 G I J@2 K ~ L M N O ~@7 C ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~@3 C ~ D ~ E ~@2
>`.pickRestart({
  A: "a4@15 ~", B: "[d5,g5]", C: "c4 g#4", D: "a4", E: "c4@3 ~@5", F: "f4@3 ~@5", G: "~ c4", H: "~@6 [e4,b4]@5 ~@5",
  I: "g#4 ~", J: "[~ a4@2 ~]/2", K: "~@4 c4@3 ~", L: "e4 a3", M: "a4 ~", N: "~@3 c5@5 [b3,b4]@8, a3 ~",
  O: "[e4,g#4,e5]@7 ~@9", // E
})).s("gm_pad_warm").gain(0.13)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B@3 C D@3 E D@3 F ~@4 G@8 H I@3 E I@2 J H G@3 C ~@4 D@3 E D@3 E D@3 E D@3 E D@3 E D@3 E D@3 E D@3 F ~@2
>`.pickRestart({
  A: "~ x", B: "~@7 x!2 ~@7", C: "x", D: "x ~@6 x!2 ~@5 x ~", E: "x ~@6 x!2 ~@6 x", F: "x ~@2 x ~@4",
  G: "x ~@7 x ~@6 x", H: "~@8 x ~@6 x", I: "x ~@5 x ~ x ~@6 x", J: "x ~@2 x!2 ~@2 x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@13 A@8 ~@4 A@3 B A@3 B C A@11 B ~@4 A@31 B ~@2>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<A B C D E F@3 G ~@4 H@8 ~@12 I H@11 J ~@4 H@31 K ~@2>".pickRestart({
  A: "~@5 x ~ x", B: "~@3 x ~ x ~ x", C: "~ x ~ x ~ x ~@2", D: "~ x ~@5 x", E: "~@3 x", F: "~ x ~ x", G: "~ x ~@2",
  H: "x!16", I: "~@8 x!8", J: "x!5 ~@11", K: "x!8 ~@8",
})).gain(0.2)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<A B C D E ~@20 F@3 G F@3 G E ~@50>".pickRestart({
  A: "x!10 ~ x!3 ~ x", B: "x!6 ~ x!3 ~ x!3 ~ x", C: "x!2 ~ x!3 ~ x!3 ~ x!5", D: "x!2 ~ x!6 ~ x!4 ~ x", E: "x",
  F: "x!16", G: "x!9 ~ x!6",
})).gain(0.15)

// drums · crash
const crash = s("cr").struct(`<
  A ~ A B ~@8 C A ~@3 A ~@3 A ~@7 A ~@2 D B ~@3 B ~@3 B ~@3 B ~ B ~ E A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5
>`.pickRestart({
  A: "x", B: "~ x", C: "~@2 x!2 ~@12", D: "~@10 x!2 ~@4", E: "x ~@5 x!2 ~@8",
})).gain(0.25)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@11 [~@15 x] [x!2 ~@14] ~@19 [~@7 x!3 ~@6] ~@16 [~@3 x!3 ~@10] ~@34>").gain(0.05)

// drums · ride
const ride = s("rd").struct("<~ A ~ A ~@42 B ~ B ~@35>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.25)

// drums · congas
const congas = s("conga:13").struct("<~@8 [~@3 x] [~ x ~ x]!3 [~ x ~@2] ~@16 [~ x ~ x]!4 ~@51>").gain(1.11)

// drums · congas
const congas_2 = s("conga:33").struct("<~@25 [~ x ~ x ~ x ~ x]!4 ~@55>").gain(1.11)

stack(
  bass, piano, piano_2, electric_guitar_muted, pad_warm, pad_warm_soft, kick, snare, hihat, hihat_soft, crash,
  crash_soft, ride, congas, congas_2
)