Strudelify

Ci vorrebbe il mare

Masini

KeyE♭ majorTempo66 bpm
0:00/0:00
// Ci vorrebbe il mare — Masini
// 66 bpm, 4/4, key D# 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, 3/4 at bar 67) 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 71 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(66/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
const bass = note("<~@36 A@3 B@2 ~@8 C D E F G H I J K L M N@2 ~@9>".pickRestart({
  A: "[~@24 c2@47 ~ f2@48 bb1@24]/3", B: "[b1 c2@2 d2]/2", C: "c2", D: "f2@13 ~ f2@2", E: "bb1 b1",
  F: "~ c2@14 ~@4 ab1@29", G: "~ eb2@24 f2@23", H: "~ g2@47", I: "g2@24 ~ b1@23", J: "~ c2@16 ~@2 ab1@29",
  K: "~ eb2@24 f2@12 bb1@11", L: "~ eb2@47", M: "~ g1@24 b1@23", N: "[~ c2@24 ab1@30 ~@41]/2",
})).s("gm_fretless_bass").gain(0.64)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@13 A@2 B@8 C@4 D@2 E@7 F@3 G@3 H@6 I J@4 K L M@2 N O P@2 ~@6 Q@4>".pickRestart({
  A: "[ab4@71 ~ [d4,bb4]@24, f4]/2", // Gm
  B: "[[bb3,eb4]@24 [b3,d4]@24 eb4@24 e4@24 ab4@72 ~ bb4@22 [bb3,eb4]@25 [b3,d4]@46 ~@2 [eb4,g4]@47 [f4,ab4]@73, g4@96 f4@97 ~@71 c4@119 ~, ~@48 c4@119 ~ d4@23 g4@69 ~@124]/8", // Eb5 Bm Eb5 Bm Eb Fm
  C: "[[b3,d4]@24 [c4,eb4]@13 ~@5 [c4,ab4]@29 ~ [bb3,eb4,g4]@23 [c4,f4,ab4]@25 [eb4,g4]@48 [f3,g3]@24, g4@37 ~@83 bb3@44 ~@4 [b3,d4] ~@23]/4", // Bm Cm Fm Eb Fm Eb Fsus2 Bm
  D: "[[b3,d4]@24 [c4,eb4]@13 ~@5 [c4,ab4]@30 [bb3,eb4,g4]@24, g4@19 ~@29]/2", // Bm Cm Fm Eb
  E: "[[c4,f4,ab4]@24 [bb3,eb4,g4]@43 ~@6 [b3,d4,g4]@47 [c4,eb4,g4]@37 ~@11 [db4,e4,g4]@48 [c4,f4,ab4]@48 [c4,f4,ab4]@48 [bb3,eb4,g4]@24]/7", // Fm Eb G Cm Dbdim Fm Eb
  F: "[[b3,d4,g4]@23 ~ [eb4,g4]@47 [f4,ab4]@73, ~@8 c4@39 ~]/3", // G Eb Fm
  G: "[[b3,d4,g4]@23 [c4,eb4,g4]@47 ~@2 [f4,c5]@24 [b4,d5]@24 c5@24, ~ ab4]/3", // G Cm F5 Bm
  H: "[~@25 c5@47 [eb4,g4,bb4]@48 [f4,ab4,c5]@23 ~ [d4,b4]@24 [eb4,c5]@48 [f4,ab4,c5]@48 [eb4,g4,bb4]@24, ~@24 [f4,ab4]@49 ~@70 g4@73 ~@72]/6", // Eb Fm G Cm Fm Eb Fm
  I: "[d4,g4,b4]@47 ~", J: "[[eb4,g4]@47 [f4,ab4]@73 [b3,d4]@24 [c4,eb4]@13 ~@6 [c4,ab4]@29, c4@119 ~ g4@38 ~@34]/4",
  K: "~ [bb3,eb4,g4]@23 [c4,f4,ab4]@24", L: "[eb4,g4], bb3@11 ~",
  M: "[[d4,f4,g4]@24 [b3,d4]@24 ~ c4@13 ~@4 [c4,ab4]@30, ~@12 g4@19 ~@17, ~@48 eb4@13 ~@35]/2", // G7 Bm Fm
  N: "~ [eb4,g4,bb4]@23 [f4,ab4,c5]@24", O: "~ [eb4,g4,bb4]@47",
  P: "[~ [b3,d4,g4]@23 [d4,b4]@24 ~ eb4@24 [eb4,ab4,b4]@23, ~@24 g4@49 ~@23, ~@2 c5 ~]/2", Q: "[~@35 eb2@111 ~@46]/4",
})).s("gm_string_ensemble_2").gain(0.16).pan(0.2)

// chords · string ensemble 2 · soft notes
const string_ensemble_2_soft = note("<~@64 A@7>".pickRestart({
  A: "[~@43 [g3,bb4]@29 [ab3,ab4]@28 [g3,bb4]@30 [ab3,ab4]@46 ~@3 [eb3,g3]@112 ~@45, ~@43 [bb3,eb4,eb5]@248 ~@45, ~@11 g4@7 ~@3]/7", // Gm Ab Gm Ab Eb Eb5
})).s("gm_string_ensemble_2").gain(0.09).pan(0.2)

// other · string ensemble 2
const string_ensemble_2_2 = note("<~@24 A B@2 ~@44>".pickRestart({
  A: "~@6 eb5 d5", B: "[eb5@12 f5@11 ~@13 eb5@5 d5@6 eb5@7 f5@5 g5@6 eb5@6 f5@20 ~@5]/2",
})).s("gm_string_ensemble_2").gain(0.27).pan(0.7)

// other · string ensemble 1
const string_ensemble_1 = note("<~@36 A@3 B@2 ~@2 C@2 D E@2 F G H I J K L M J N O P ~@11>".pickRestart({
  A: "[~@6 [g4,g5]@2 ~ [g4,g5]@2 ~ [g4,g5]@6 [f4,f5]@5 [g4,g5]@12 [eb5,eb6]@18 [eb5,eb6]@2 ~ [eb5,eb6]@2 ~ [eb5,eb6]@6 [d5,d6]@6 [c5,c6]@3 [bb4,bb5]@3 [ab4,ab5]@24 ~ [ab4,ab5]@2 [ab4,ab5]@2 ~ [ab4,ab5]@7 [g4,g5]@6 [ab4,ab5]@5 [f5,f6]@13 [eb5,eb6]@6]/3", // G F G Eb D C Bb Ab …
  B: "[[f5,f6]@6 [g5,g6]@6 [ab5,ab6]@6 [g5,g6]@6 [f5,f6]@12 [eb5,eb6]@41 ~@19]/2", // F G Ab G F Eb
  C: "[~@23 eb5@12 f5@12 g5@22 ~@15 eb5@12]/2", D: "d5 g5 eb5@2", E: "[f5@13 eb5@76 ~@7]/2",
  F: "~@42 d5 ~ eb5@2 f5@2, ~@41 c5@2 ~@5", G: "[g4,g5]@2 [eb5,eb6] [d5,d6] [eb5,eb6]@2 [g4,g5]@2",
  H: "[bb4,bb5]@23 [ab4,ab5]@23 ~@2", I: "~ [f4,f5] [eb5,eb6] [f5,f6] ~ [g4,g5] [eb5,eb6] [f5,f6]",
  J: "[c6,eb6,g6]@12 ~ [g5,c6,eb6]@2 ~@4 [g5,bb5]@28 ~, ~@18 eb5@29 ~", // Cm Gm
  K: "~@2 [eb5,eb6] [d5,d6] [eb5,eb6]@2 [f5,f6]@2", // Eb D Eb F
  L: "~@6 [bb4,bb5]@6 [eb5,eb6]@6 [d5,d6]@6 [eb5,eb6]@5 ~ [f5,f6]@6 [g5,g6]@6 [eb5,eb6]@6", // Bb Eb D Eb F G Eb
  M: "[f5,f6]@25 ~@6 [c5,c6]@6 [eb5,eb6]@6 [f5,f6]@5", // F C Eb F
  N: "~@6 [bb4,bb5]@6 [eb5,eb6]@6 [d5,d6]@7 [eb5,eb6]@11 [f5,f6]@12", // Bb Eb D Eb F
  O: "~ [bb4,bb5] [eb5,eb6] [d5,d6] [eb5,eb6] [f5,f6] [g5,g6] [eb5,eb6]", P: "[f5,f6]@13 ~@3",
})).s("gm_string_ensemble_1").gain(0.22).pan(0.7)

// chords · piano
const piano = note(`<
  A@4 B C D E F G H I J K L M N@2 O P@4 Q@2 R@2 S@2 T@2 U@4 V W@3 X@4 Y@2 Z@2 AA AB AC AD AE AF AG AH AI AJ AK AL AM AN
  AO AP@8 ~
>`.pickRestart({
  A: "[~@31 eb4@9 [f2,eb3,ab3,c4]@51 ~@24 eb4@9 [eb3,bb3,c4]@49 ~@19, ~@7 g3@9 c3@26 ~@55 d4@9 f4@6 bb2@17 ~@63, ~@10 c4@6 [ab3,eb4]@12 bb2@17 ~@55 c3@26 ~@66, ~@13 d4@7 ~@2 f4@7 ~@65 c4@19 ~@11 ab2@45 ~@23, ~@25 [bb3,d4]@17 ~@49 g3@9 [ab3,eb4]@9 [bb3,d4]@17 ~@66]/4", // Fm7 Cm7 Ab5 Bb Ab5 Bb
  B: "[c3,g3,c4,eb4]@47 ~", C: "d4", D: "[f2,ab3,c4] [bb1,ab3,c4]",
  E: "~@18 bb3@6 [b1,b2,g3,d4]@23 ~, [eb2,g3,eb4]@25 ~@23, bb3@3 ~@5, ~@6 eb3@19 ~@23, ~@12 f4@13 ~@23", // G Eb
  F: "[c3,c4,eb4]@47 ~", G: "[f2,ab3]", H: "ab3@2 ~ f3 [ab1,ab2,bb3,d4]@4, [bb1,c4,eb4] ~, f3@3 ~ f3@2 ~@2, ~ ab3 ~@2",
  I: "~@6 g2@2 [b1,b2,g3,d4,g4]@7 ~, [g1,g3,bb3,eb4]@25 ~@23, ~@6 eb3@19 ~@23, ~@12 f4@13 ~@23", J: "eb4@24 bb3@23 ~",
  K: "[c4,eb4] ~ ab4@2, f2", // Cm
  L: "~@12 eb3@11 ~ f3@12 f3@11 ~, [bb1,ab3,c4,eb4]@23 ~ [ab1,ab2,bb3,d4]@23 ~, ~@6 bb2@17 ~@25", // Ab Bb7
  M: "~@18 g2@6 [b1,b2,g3,d4,g4]@23 ~, [g1,g3,bb3,eb4]@25 ~@23, g2@3 ~@5, ~@6 eb3@19 ~@23, ~@12 f4@13 ~@23", // G Eb
  N: "[g3@6 ~ c3 [e3,bb3,c4]@4 [e3,bb3]@4 ~@10 ab3@2 ~@3 [d2,f2], [c2,c3,c4,eb4]@8 [c2,g3]@8 f2@15 ~, ~@3 g3 ~@2 c4@5 f3@4 f3, ~@4 ab3@2 [c4,eb4] [ab3,c4,eb4], ~@4 f3 eb4 ab4@2]/2", // C7 Edim Dm Cm C5 Cm Ab
  O: "[f3,ab3,c4,eb4]@2 ~ bb2 f3 ~@2 f3, bb1 [ab1,ab2], bb2@3 ~@2 f3@2 ~, ~ [f3,ab3,c4,eb4] [bb3,d4]!2", // Fm7 Ab Fm7 Bb
  P: "[eb3 ~@2 eb4 g3 ~@2 g3 [b2,g3,g4]@4 [c4,eb4]@2 ~@5 g3 [ab3,c4]@2 ~@5 f3 ~@3 [bb2,f3], [g1,g2,bb3]@24 b1@47 ~ [c2,c3]@48 f2@48 bb1@24, g3@2 g3@2 [b2,g4]@4 ~@15 f3@2 f3@2 ~ bb2@3 ~, ~@3 eb3@9 d4@6 d4@17 ~@7 [c4,eb4]@6 [c4,eb4]@6 [c4,eb4]@6 eb4@12 eb4@6 ~@9 f3@6 ~@3, ~@5 g3@2 ~@5 g3@3 g3@2 g3@2 ~@3 ab3@4 [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@2]/4", // Em Cm Ab Bb5 Gm C Em Cm …
  Q: "[g3@6 ~@12 g3@6 g3@6 g3@12 [ab1,ab2,eb3,ab3,c4,eb4]@29 ~ eb3@6 ~@6 g3@12, [b1,b2]@24 [c2,c3,c4,eb4]@19 ~@29 [eb2,bb3,eb4]@24, [d4,f4]@2 [d4,f4]@2 ~@9 eb3@2 ~, ~ g3@2 ~@9 g3@2 ~@2]/2", // Ab B Cm Eb5 Dm
  R: "[~@6 eb3@6 f3@6 f3@5 ~ [bb3,eb4]@12 ~@30 eb3@6 [f3,g3,b3,d4]@12 [f3,g3,b3,d4]@12, [f2,ab3,c4,eb4]@12 [bb1,bb2,ab3,c4,eb4]@11 ~ eb2@48 g2@24, ~@4 g3@3 g3@2 eb3@2 ~@5, ~@3 [bb3,eb4] [eb4,g4]@2 ~@2, ~@4 bb3 [g3,bb3] ~@2]/2", // Eb5 G7 Fm7 Ab Eb5 Eb Gm
  S: "[g3@6 ~@12 g3@6 [c2,c3,c4,eb4]@13 ~@5 [ab1,ab2,eb3,ab3,bb3,c4,eb4]@27 ~@3 g3@12 ~@6 eb4@6, [b1,b2] ~@2 [eb2,bb3], [d4,f4]@2 [d4,f4]@2 ~@8 eb4@3 ~, ~@2 g3@4 ~@2 g3@3 ~@13 eb3@2 ~@2 g3@4]/2", // Cm Ab B Eb5 Dm
  T: "[[f2,eb3,ab3,c4,eb4]@12 [bb1,bb2,f3,ab3,c4,eb4]@12 ~@36 [bb3,g4]@12 [b3,d4,f4,g4]@12 ~ [b3,d4,f4,g4]@11, ~ [eb2,g3]@2 g2, ~@2 bb3@3 ~@3, ~@5 eb3@2 eb3@2 eb3@3 ~@4, ~@3 eb4 [eb4,bb4]@2 ~@2]/2", // Fm7 Eb G7 Eb Eb5
  U: "[g3@3 ~@6 g3@3 ~@9 [c4,eb4]@13 ~@2 [g3,bb3,db4]@6 ~@6 db4@6 ~@3 e3@3 ~@15 ab3@3 ~@3 f3@3 ~@9 f3@3, [b1,b2,b3,d4]@6 c2@11 ~ e2@12 f2@12 [bb1,bb2]@6, ~ g3@2 ~ [c4,eb4]@3 ~@13 c4@2 eb4@6 ~ f3@2 ~, ~@2 g4@2 ~ c3@6 ~@4 e3@2 ~@4 f3@5 [ab3,c4]@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@2, ~@9 g3@8 ~@4 [g3,bb3]@3 [g3,bb3]@6 ab3@3 c4@3 ab4@6 ~@6]/4", // Cm Gdim Bm Bb Cm Ab Gm
  V: "~@6 f3@2 eb3@2 ~@5 [eb2,gb2], [ab1,ab2] [g1,g2], [bb3,d4]@2 [bb3,d4]@2 eb4@3 eb4, ~ f3@2 ~ bb3@2 bb3@2, ~@5 eb3@3", // Ebm Ab G Bb
  W: "[[b1,b2,g3,d4,g4]@22 ~@26 [c4,eb4,g4]@24 ~@24 [ab3,c4,eb4,ab4]@23 ~@13 f3@11 ~, ~@24 c2@48 f2@47 ~ [bb1,ab3,c4,eb4]@23 ~, ~@4 g3@3 g3@5 [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 ~@8, ~@2 [c4,eb4]!2 ~@8, ~@30 c3@42 ~@6 f3@12 f3@29 ~@7 bb2@17 ~]/3", // G Cm Ab Cm
  X: "[~@12 [d4,g4]@11 ~@13 g3@31 ~@5 d2@24 [g2,b3]@24 [ab2,eb3,ab3,c4]@48 [f2,f3,ab3,c4]@24, b1@23 ~ [c2,c4,eb4]@44 ~@124, [d4,g4] ~@15, ~@3 b2@20 ~@7 c3@36 ~@126, ~@6 g3@17 ~@49 ab3@48 ~@72]/4", // G5 G Ab Fm Cm G5
  Y: "[[bb1,f3,ab3,c4,eb4]@23 ~@25 g4@22 ~@2 [f3,ab3]@24, ~@12 [eb2,eb4]@23 ~@13, ~@4 bb3@3 ~@9, ~@15 eb3@20 ~@13, ~@18 f4@17 ~@13]/2", // Fm7 Fm Eb
  Z: "[[b1,b2,g3,d4]@2 ~ f4@3 [f2,f3,ab3,c4]@2, ~@24 [c2,c4,eb4]@49 ~@23]/2", // G Fm Cm
  AA: "[bb1,bb2,f3,ab3,c4,eb4]@4 eb3 ~ eb4@2, ~ [eb2,g3,bb3], ~@5 eb3@2 ~", AB: "[b1,g3,d4]@11 ~, [b2,g4]@19 ~@5",
  AC: "[c4,eb4]@2 ~@5 g3, [c2,c3], g3@3 g3@2 g3@2 ~, ~ [c4,eb4]!3", // Cm C Cm
  AD: "[ab3,c4]@2 ~@5 f3, f2, eb4@2 eb4 ~, ~ ab3@2 [ab3,c4,eb4], ~@3 f3@2 f3@2 ~", // Ab
  AE: "~@18 [bb2,f3]@6 g3@6 ~@13 g3@5, bb1 [b1,b2], bb2@3 ~@5, [ab3,c4,eb4]@12 [ab3,c4,eb4]@12 [d4,f4]@12 ~ [d4,f4]@11, ~ f3@2 ~@2 g3@2 ~", // Bb5 B Ab Dm
  AF: "~ g3@6 g3@12 [ab1,ab2,eb3,ab3,c4,eb4]@29, ~ [c2,c3,c4,eb4]@19 ~@28", // Ab Cm
  AG: "~@19 eb3@6 ~@18 eb3@5, ~ eb2@24 f2@23, ~ [g3,bb3,eb4]@12 [g3,bb3,eb4]@12 [ab3,c4,eb4]@12 [ab3,c4,eb4]@11, ~@7 eb3@12 ~@12 eb3@12 ~@5", // Eb Ab
  AH: "~@43 eb3@5, ~ g2@45 ~@2, ~ [bb3,eb4]@12 [bb3,eb4]@12 [bb3,eb4]@12 [bb3,eb4]@10 ~, ~@7 eb3@12 eb3@12 eb3@12 ~@5", // Eb5
  AI: "[f3,g3,b3,d4]@12 ~ d4@12 g3@6 ~@12 g3@5, g2@24 ~ [b1,b2]@23, ~@12 [f3,g3,b3]@12 ~ [d4,f4]@12 [d4,f4]@11, ~@31 g3@12 ~@5", // G7 B G7 Dm
  AJ: "~ [c2,c3,c4,eb4]@13 ~@5 [ab1,ab2,eb3,ab3,bb3,c4,eb4]@27 ~@2, ~ g3@9 ~@38", // Cm Ab
  AK: "~@19 eb4@6 [f2,f3,ab3,c4,eb4]@12 f3@6 f3@5, ~ [eb2,bb3]@24 ~@12 [bb1,bb2,ab3,c4,eb4]@11, ~ eb4@18 ~@29, ~ g3@12 g3@12 ~@23, ~@7 eb3@18 ~@23", // Fm7 Eb5 Ab
  AL: "~@43 eb3@5, ~ eb2@47, ~ bb3@30 eb3@12 ~@5, ~ eb4@18 eb3@6 g3@12 [g3,bb3]@11, ~ g3@6 eb3@6 g3@12 eb4@23", // Gm
  AM: "~ [b3,d4,f4,g4]@11 ~ d4@12 g3@6 ~@12 g3@5, ~ g2@23 ~ [b1,b2]@23, ~@12 [b3,f4,g4]@12 ~ [d4,g4]@12 [d4,g4]@11, ~@31 g3@12 ~@5", // G7 B G7 G5
  AN: "~ g3@6 ~@12 eb4@6 [ab1,ab2,eb3,ab3,b3,eb4]@22 ~, ~ [c2,c3,c4]@25 ~@22, ~ eb4@18 ~@29, ~@7 g3@19 ~@22, ~@13 bb3@13 ~@22", // Abm C
  AO: "~@3 [eb2,eb3,g3,bb3]@24 ~ [ab3,c4]@20, ~@9 f2@7", // Eb Ab
  AP: "[~@3 [g2,bb3,eb4]@25 [ab2,c4,eb4]@23 ~ [g3,eb4]@24 ~@20 bb1@42 ~@23 [bb3,eb4]@7 [f2,ab3,bb3,eb4]@29 ~@29 [ab2,eb4,f4]@28 ~@22 [eb2,g3]@108, ~@51 f3@24 ~@5 ab3@52 ~@252, ~@52 bb2@74 ~@13 eb2@31 ~@214]/8", // Eb Ab Cm Eb5 Fm7 Eb
})).s("gm_piano").gain(0.56).pan(0.4)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@5 A B C D E F ~ G H ~@7 I@2 ~ J K@2 L M ~@3 N O@2 ~@5 P@2 ~ Q@2 R@2 J ~@2 S ~@5 T ~@4 U@5 V@5
>`.pickRestart({
  A: "[b2,g3]", B: "[f3,eb4] [bb2,f3,eb4]", C: "~@24 g4@23 ~", D: "g3@47 ~", E: "[f3,c4,eb4]", F: "~@3 f3",
  G: "c4@24 ~@12 g3@11 ~, [c2,c3], g3@3 ~, ~@24 [c4,eb4]@23 ~", H: "~@3 ab3@5, ab3@3 ~@5, ~ f3@7, ~ [c4,eb4]@3",
  I: "[~@3 c4@2 ~@3, ~@5 f3@2 ~@9]/2", J: "~@7 eb3", K: "[~@5 eb3@4 ~@7]/2", L: "~@33 g3@4 ~@11", M: "~@5 eb3@3",
  N: "~@3 db4, ~@5 e3@2 ~", O: "[~@2 db4@2 ~@3 ab3@2 ~@7, ~ e3@2 ~@13]/2", P: "[~@24 f3@49 ~@23]/2",
  Q: "[~@21 bb3@14 ~ d2@12]/2", R: "[g4@4 ~ g3@2 ~ [bb3,g4]@4 eb4@4, ~@42 g3@31 ~@23]/2", S: "~ c4@2 ~, ~ f3@2 ~@5",
  T: "~@5 g3@2 ~@17",
  U: "[~@28 eb3@24 ~@11 eb3@13 [ab3,bb3]@24 ~@29 [c4,eb4]@52 ~@6 [bb3,eb4]@22 ~@31, ~@27 eb4@23 ~@78 f3@53 ~@6 g3@29 ~@24]/5", // Absus2 Cm Eb5
  V: "[~@5 [g2,g3,bb3,eb4]@29 [ab3,bb3]@28 ~@22 [bb2,eb3]@115 ~@41]/5", // Eb Absus2 Eb5
})).s("gm_piano").gain(0.32).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@36 A B@4 ~@8 B@3 C D@3 C D@4 ~@10>".pickRestart({
  A: "~ x", B: "x!2", C: "~ x ~@8 x ~@8 x ~@28", D: "~ x ~@23 x ~@22",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@36 A B@3 C ~@8 B@2 D E F@3 E F@3 E ~@10>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "~@12 x ~@24 x ~@10", E: "~@13 x ~@34", F: "~@13 x ~@23 x ~@10",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@36 A B@3 C ~@8 D B E F G H@2 F G H@2 I ~@10>".pickRestart({
  A: "~@5 x!3", B: "x!8", C: "x!4 ~@4", D: "~ x!7", E: "x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@6 x ~@5 x ~@4",
  F: "~ x ~@5 x ~@5 x ~@34", G: "~@7 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4",
  H: "~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4", I: "~ x ~@5 x ~@5 x ~@5 x ~@28",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@48 [~@25 x ~@11 x ~@10] ~@22>").gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@48 [~@15 x ~@18 x ~@13] ~@3 [~@31 x ~ x ~ x ~ x ~@10] ~@18>").gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@36 A ~@3 A ~@8 B ~@2 C D ~@2 C D ~@2 E ~@10>".pickRestart({
  A: "~ x", B: "x", C: "~@19 x ~@28", D: "~ x ~@46", E: "~@25 x ~@22",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@48 [~ x ~@6] ~@22>").gain(0.64)

stack(
  bass, string_ensemble_2, string_ensemble_2_soft, string_ensemble_2_2, string_ensemble_1, piano, piano_soft, kick,
  snare, hihat, low_tom, mid_tom, crash, high_tom
)

More by Masini