Strudelify

Viaggio al centro del mondo

883

KeyC majorTempo120 bpm
0:00/0:00
// Viaggio al centro del mondo — 883
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 116 bars on a 16-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 28.
setcpm(120/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 · electric bass finger
const bass = note(`<
  ~@2 A@3 B C@3 D E F G@2 E F G H I J K L I J M N A@3 B C@3 D E F G@2 E F G H I J K L I J M N A@3 B C@3 D A@3 B C@3 D E
  F G@2 E F G H I J K L I J M N A@3 B C@3 D A@3 B C@3 D A@3 B C@3 D A@3 B C@3 D ~@2
>`.pickRestart({
  A: "[c2!6 d2 a#1@2 a#1!5 c2 f1@2 f1!3 a#1!3 c2]/3", B: "~ c2!4 g1 a#1 g1",
  C: "[c2!6 d2 a#1@2 a#1!5 c2 g#1@2 g#1!3 a#1!3 c2]/3", D: "~ c1 c2 c1 c2 e1 f1 f#1", E: "g1!4 f1!2 d1 g1",
  F: "g1!4 f1 g1 a1 f1", G: "f1!4 d#1!2 c1 f1", H: "f1!4 d#1!2 c1 a1", I: "a1!7 g1", J: "g1!7 f1", K: "f1!7 g1",
  L: "g1!5 e1 g1 a1", M: "a#1@7 ~@9", N: "f1!4 g1!4",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@18 A B C D E@2 F ~@17 A B C D G@2 F ~@25 A B H D E@2 F ~@35>".pickRestart({
  A: "~@10 c4@5 ~, ~@2 e4@4 a3@9 ~, ~ c4 e4@2", B: "~@2 g4 ~@2 g4@2 ~, g3@15 ~, ~ d4@2 ~ d4@3 ~",
  C: "~ c4 ~ a3, f3, ~@2 f4@5 ~ f4@7 ~, ~@5 c4@2 ~", D: "~@4 g4@3 ~@3 g4@5 ~, ~ c4@2 ~@5",
  E: "[~@4 c4@4 ~@2 c4@4 g4@10 ~@4 e4@3 ~, a3@7 ~@9, ~ e4@2 ~ e4@3 ~@9]/2", F: "d4@3 ~@13",
  G: "[~@4 c4@4 ~@2 c4@4 g4@10 ~@4 e4@3 ~, a3@7 ~@9, ~@4 e4@3 ~@9]/2", H: "~ a3 ~@4 a3@2, f3, ~ c4 f4@2, ~@3 a3@2 c4@3",
})).s("gm_electric_guitar_clean").gain(0.24)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@21 [~@8 c4@7 ~, g3@15 ~] ~@23 [~@8 c4@7 ~, g3@15 ~] ~@31 [~@8 c4@7 ~] ~@38>")
  .s("gm_electric_guitar_clean").gain(0.16)

// other · synth brass 1
const synth_brass_1 = note("<~ A B@8 ~@15 C D@8 ~@15 C E@8 D@8 ~@15 C E@8 D@8 F@4 G@4 D@8 ~@2>".pickRestart({
  A: "~@4 [c4,c5] [d4,d5] [e4,e5] [c5,c6]", // C D E C
  B: "[~@4 [b4,b5]@2 ~@2 [a4,a5]@2 [g4,g5] ~@3 [a#4,a#5]@4 ~@2 [a4,a5]@2 ~@2 [g4,g5]@2 [f4,f5]@2 [g4,g5]@2 [a4,a5]@9 ~ [a#4,a#5] ~ [a#4,a#5]@2 ~@2 [c5,c6]@15 ~ [c5,c6]@5 ~ [b4,b5]@2 ~@2 [a4,a5]@2 [g4,g5] ~@3 [a#4,a#5]@4 ~@2 [a4,a5]@2 ~@2 [g4,g5]@2 [f4,f5]@2 [g4,g5]@2 [g#4,g#5]@9 ~ [a#4,a#5] ~ [a#4,a#5]@2 ~@2 [c5,c6]@15 ~@3]/8", // B A G A# A G F G …
  C: "~@7 c5",
  D: "[~@4 b4@2 ~@2 a4@2 g4 ~@3 a#4@4 ~@2 a4@2 ~@2 g4@2 f4@2 g4@2 a4@9 ~ a#4 ~ a#4@2 ~@2 c5@15 ~ c5@5 ~ b4@2 ~@2 a4@2 g4 ~@3 a#4@4 ~@2 a4@2 ~@2 g4@2 f4@2 g4@2 g#4@9 ~ a#4 ~ a#4@2 ~@2 c5@15 ~@3]/8",
  E: "[~@4 b4@2 ~@2 a4@2 g4 ~@3 a#4@4 ~@2 a4@2 ~@2 g4@2 f4@2 g4@2 a4@9 ~ a#4 ~ a#4@2 ~@2 c5@15 ~ c5@5 ~ b4@2 ~@2 a4@2 g4 ~@3 a#4@4 ~@2 a4@2 ~@2 g4@2 f4@2 g4@2 g#4@9 ~ a#4 ~ a#4@2 ~@2 c5@15 ~ c5@2]/8",
  F: "[c3@7 a#2@8 f2@5 a#2@3 c3@9]/4", G: "[c3@7 a#2@8 g#2@5 a#2@3 c3@8 c5]/4",
})).s("gm_synth_brass_1").gain(0.44)

// other · brass section
const brass_section = note("<~ A B@8 ~@15 C B@8 ~@15 C D@8 B@8 ~@15 C D@8 B@8 ~@7 C B@8 ~@2>".pickRestart({
  A: "~@4 c3 d3 e3 c4",
  B: "[~@4 b3@2 ~@2 a3@2 g3 ~@3 a#3@4 ~@2 a3@2 ~@2 g3@2 f3@2 g3@2 a3@9 ~ a#3 ~ a#3@2 ~@2 c4@15 ~ c4@5 ~ b3@2 ~@2 a3@2 g3 ~@3 a#3@4 ~@2 a3@2 ~@2 g3@2 f3@2 g3@2 g#3@9 ~ a#3 ~ a#3@2 ~@2 c4@15 ~@3]/8",
  C: "~@7 c4",
  D: "[~@4 b3@2 ~@2 a3@2 g3 ~@3 a#3@4 ~@2 a3@2 ~@2 g3@2 f3@2 g3@2 a3@9 ~ a#3 ~ a#3@2 ~@2 c4@15 ~ c4@5 ~ b3@2 ~@2 a3@2 g3 ~@3 a#3@4 ~@2 a3@2 ~@2 g3@2 f3@2 g3@2 g#3@9 ~ a#3 ~ a#3@2 ~@2 c4@15 ~ c4@2]/8",
})).s("gm_brass_section").gain(0.48)

// other · electric guitar muted
const electric_guitar_muted = note("<~@81 [f2 ~ f2 ~ f2 ~ f2 ~ g2 ~ g2 ~ g2 ~ c3 ~] ~@34>")
  .s("gm_electric_guitar_muted").gain(0.44).pan(1)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@2 A@4 B@4 C D ~@2 D@2 ~@2 E F G H I J K L A@4 B@4 C D ~@2 D@2 ~@2 M@4 N@2 K L A@4 B@4 A@4 B@4 O@4 P@4 Q R G S I T K
  L A@4 B@4 A@4 B@4 U@8 A@4 B@4 ~@2
>`.pickRestart({
  A: "[c3@14 a#2@16 f2@10 a#2 ~ a#2@3 ~ c3@12 g2@2 c3@2 g2@2]/4", B: "[c3@14 a#2@16 g#2@10 a#2 ~ a#2@2 ~@2 c3@17 ~]/4",
  C: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~@7", D: "~@2 g2 ~ g2 ~ g2 ~ g2 ~@7", E: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~@5",
  F: "~@2 g2 ~ g2 ~ g2 ~ [d4,g4]@5 ~@3, [d4,g4]@4 ~@4 g2 ~@7", G: "f3@2 f2 ~ f2 ~ f2 ~ f3@4 ~@4",
  H: "~@2 g2 ~ g2 ~ g2 ~ [d4,g4]@4 ~@4, [d4,g4] ~@3", I: "a3@2 a2 ~ a2 ~ a2 ~ a3@4 ~@4, ~@8 a2 ~@7",
  J: "~@2 g2 ~ [g2,d4]@2 g2 ~ [g2,c4]@2 e4@3 ~@3, [d4,g4] ~@3, ~ c4@2 ~@5", K: "~@2 c4 ~ d4 ~ g4@2 d4@2 c4 ~ d4 ~ g4@2",
  L: "d4@2 c4 ~ d4 ~ g4@2 d4@2 c4 ~ d4@2 e4@2",
  M: "[a2 ~ a2 ~ [a2,e4,a4] ~ a2 ~ a2 ~ a2 ~@3 [d4,g4]@4 c4@2 [g2,d4]@2 g2 ~ [c4,g4]@5 ~ [f3,c4]@4 f2 ~ [f2,f3,c4]@2 f2 ~ [c4,f4]@3 ~@7 [g2,c4]@2 [g2,d4]@2 g2 ~ c4@2 d4@2 ~@4, ~@8 [e4,a4]@6 ~@4 g4@5 ~@21 d4@7 ~@5 g3@4 ~@4, ~@18 g2 ~@5 g2 ~@21 g4@6 ~@12]/4", // A5 G5 C5 F5 C5 G5 A5
  N: "[[e3,a3]@2 a2 ~ [g3,c4]@2 a2 ~ [a2,a3,e4]@2 ~@2 [e4,a4]@2 [d4,g4]@4 g2 ~ [g2,d4]@2 g2 ~ [g2,c4]@2 e4@3 ~@3, ~@4 a2 ~@13 c4@4 ~@10]/2", // A5 C5 A5 G5 C5
  O: "[[g3,d4]@5 ~@5 [g3,c4]@2 ~@2 [b3,d4]@6 ~@6 [g3,c4]@2 ~@2 [f3,c4]@6 [f3,a#3]@2 ~@2 a#3@2 a3@2 ~@2 f2@6 [f3,a#3]@2 ~@2 a#3@2 a3@3 ~@3, ~@40 f3@4 ~@12 f3@5 ~@3]/4", // G5 C5 Bm C5 F5 A#5
  P: "[[g3,d4]@5 ~@5 [g3,c4]@2 ~@2 g3@2 g3@4 ~@6 [g3,c4]@2 ~@2 [f3,c4]@6 [f3,a#3]@2 ~@2 a#3@2 a3@2 ~@2 f2@6 [f3,a#3]@2 ~@2 a#3@2 a3@3 ~@3, ~@14 d4@6 ~@20 f3@4 ~@12 f3@5 ~@3]/4", // G5 C5 F5 A#5
  Q: "~@2 a2 ~ a2 ~ a2 ~ a2 ~ a2 ~@5", R: "~@2 g2 ~ g2 ~ g2 ~ d4@2 d4@4 c4@2, [d4,g4]@4 ~@4 g4@5 ~@3, ~@8 g2 ~@7",
  S: "~@2 g2 ~ g2 ~ g2 ~ d4@2 d4@4 c4 ~, [d4,g4] ~ g4 ~", // G5
  T: "~@2 g2 ~ [g2,d4]@2 g2 ~ [g2,c4]@2 [d4,e4]@4 c4@2, [d4,g4] ~@3, ~ c4@2 ~@5", // G5 C5 Dsus2 G5
  U: "[g4@4 g4@4 ~@2 g4@3 ~ g4@5 ~ g4@4 ~@2 g4@3 ~ g4@5 ~ g4@3 ~ g4@2 g4@2 ~@2 g4@5 ~ g4@3 ~ [c4,f4]@2 d#4@2 c4@2 ~ a#3, c4@13 ~ a#3@15 ~ c4@15 ~ c4@9 ~@7 [g3,c4]@2]/4", // F5 C5
})).s("gm_overdriven_guitar").gain(0.19).pan(0.3)

// other · pad warm
const pad_warm = note(`<
  ~ A@5 B@3 C ~@15 D@5 E@3 F ~@15 D@5 E@3 G@5 E@3 F H@4 I@2 J@8 K D@5 E@3 G@5 E@3 F L@8 M@4 E@3 N ~@2
>`.pickRestart({
  A: "[~@7 [c4,e4]@8 [a#3,d4]@8 [a3,c4]@5 a#3 a#3@2 [c4,e4]@9, ~@28 d4@3 ~@9]/5", // C A# Am C
  B: "[[c4,e4]@7 [a#3,d4]@8 [g#3,c4]@5 [a#3,d4]@4]/3", C: "[c4,e4]@7 ~", D: "[~@7 c4@8 a#3@8 a3@5 a#3 a#3@2 c4@9]/5",
  E: "[c4@7 a#3@8 g#3@5 a#3@4]/3", F: "c4", G: "[c4@7 c4@8 a#3@8 a3@5 a#3 a#3@2 c4@9]/5", H: "[[g3,d4] [f3,c4]]/4",
  I: "[g3,d4]/2", J: "[c4@28 ~@2 c4@16 ~ b3@16 a3@15 g3@17 a3@16 g3@16 ~, f3 ~@3]/8", K: "a#3@3 ~@13",
  L: "[[g4,c5]@14 a#4@16 c4@10 a#4@6 [g4,c5]@32 [f4,a#4]@16 [d#4,g#4]@9 [f4,a#4]@6 [g4,c5]@19, ~@7 f4@16 ~@41]/8", // C5 A#5 G#5 A#5 C5
  M: "[c4@7 a#3@8 a3@5 a#3 a#3@2 c4@9]/4", N: "c4@7 ~",
})).s("gm_pad_warm").gain(0.22)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@2 A@4 B@4 C@5 D@8 E@2 F A@4 B@4 C@5 D@8 G@2 H A@4 B@4 A@4 B@4 C@5 D@8 I J F A@4 B@4 A@4 B@4 K@4 L@4 A@4 B@4 ~@2
>`.pickRestart({
  A: "[[c3,g3]@8 ~@2 [c3,g3] ~@3 [a#2,f3]@10 ~@2 [a#2,f3] ~@3 [f2,c3]@8 ~@2 [a#2,f3] ~ [a#2,f3]@2 ~@2 [c3,g3]@10 ~@2 [c3,g3]@2 ~@2 [c3,g3]@2]/4", // C5 A#5 F5 A#5 C5
  B: "[[c3,g3]@9 ~ [c3,g3] ~@3 [a#2,f3]@11 ~ [a#2,f3] ~@3 [g#2,d#3]@9 ~ a#2 ~ [a#2,f3]@3 ~ [c3,g3]@18]/4", // C5 A#5 G#5 A#5 C5
  C: "[[g2,d3]@4 ~@6 [c3,g3]@2 ~@2 [g2,d3]@5 ~@7 [c3,g3]@2 ~@2 [f2,c3]@5 ~ [f3,a#3]@2 ~@2 a#3@2 a3@3 ~ [f2,c3]@6 [f3,a#3]@2 ~@2 a#3@2 a3@3 ~ [g2,d3]@6 ~@6 [c3,g3,c4]@2 ~@2 [g2,d3]@2, ~@40 f3@5 ~@11 f3@5 ~@19]/5", // G5 C5 G5 C5 F5 A#5 F5 A#5 …
  D: "[~@10 [c3,g3,c4]@2 ~@2 [f2,c3]@6 [f3,a#3]@2 ~@2 a#3@2 a3@2 ~@2 [f2,c3]@6 [f3,a#3]@4 ~@2 a3@3 ~ [a2,e3]@8 ~@4 [a2,e3]@2 ~@2 [g2,d3]@7 ~@5 [g2,d3]@2 ~@2 [f2,c3]@8 ~@4 [f2,c3]@2 ~@2 [g2,d3]@6 ~@6 [g2,d3]@2 ~@2 [a2,e3]@6 ~@6 [a2,e3]@2 ~@2 [g2,d3]@2, ~@24 f3@5 ~@11 f3@5 ~@83]/8", // C5 F5 A#5 F5 A#5 A5 G5 F5 …
  E: "[~@10 [g2,d3]@3 ~ [a#2,f3]@5 ~@13]/2", F: "f2 ~ f2 ~ f2 ~ f2@2 g2@2 g2@2 g2@2 g2 ~",
  G: "[~@10 [g2,d3]@3 ~ [a#2,f3]@18]/2", H: "f2 ~ f2 ~ f2 ~ f2@2 g2@2 g2@2 g2@2 g2 ~, c3 d3", I: "~@5 [g2,d3]@3",
  J: "[a#2,f3]@5 ~@11", K: "[[c3,g3]@6 d3 [a#2,f3]@7 ~ f2@5 [a#2,f3]@3 [c3,g3]@9, ~@7 c3@3 ~@6]/4",
  L: "[[c3,g3]@6 d3 [a#2,f3]@7 ~ g#2@5 [a#2,f3]@3 [c3,g3]@9, ~@7 c3@3 ~@6]/4", // C5 A#5 C5
})).s("gm_distortion_guitar").gain(0.39).pan(0.7)

// chords · overdriven guitar
const overdriven_guitar_2 = note("<~@57 A@5 B@2 C@8 ~@17 D@8 E@8 F@3 G@6 ~@2>".pickRestart({
  A: "[~@14 c5@10 e5@2 d5@2 c5@2 d5@9 ~ e5@2 d5@2 c5 ~ c5@9 ~ g5@2 f5@2 d#5@2 g5@16 ~@2]/5",
  B: "[c5@4 d5@2 c5 d5@8 d#5]/2", C: "[~@8 f5@7 g5@113]/8",
  D: "[~@14 c5@10 e5@2 d5@2 c5@2 d5@9 ~ e5@2 d5@2 c5 ~ c5@9 ~@3 f5@2 d#5@2 ~@18 c5@8 d5@4 c5@2 d5@16 d#5@10 f5@8, ~@28 g5@3 g5@33]/8",
  E: "[~@16 g4@10 f4@2 g4@2 f4@2 g4@10 c5@2 c5@2 d#5@3 d5 c5 a#4 d5 c5 [a#4,c5] c5 a#4 c5 d#5@2 f5@2 ~@4 f5 d#5 f5@2 f5 d#5 f5@3 ~ a#3@2 a#3@2 g4@2 [a#4,c5]@2 g4@2 [a#4,c5]@2 g4@2 [a#4,c5]@2 ~@2 [f4,a#4]@2 f4 d#4 f4@2 ~ d#4 f4@2 ~ d#4 f4!2 ~ g4 ~ g4 ~ g#4!3 ~ g#4!3 ~ a#4!3 ~ a#4!3, g5@31 g5@31 g5@2, ~@8 c4@8 c4@8 ~@14 d#4@2 ~@6 [f4,a#4] ~@3 f4 ~ f4 ~ [g4,c5]!2 d5@2 d#5@2 f5@2 ~@2, ~@93 d#4@2 ~@33]/8", // A#sus2 A#5 C5
  F: "[c6@14 c5@10 e5@2 d5@2 c5@2 d5@9 ~ e5@2 d5@2 c5 ~ c5@2, g5]/3",
  G: "[~@5 f5 d#5 ~@9 c5@4 d5@2 c5 d5@8 d#5@5 f5@4 ~@8, ~@4 g5@3 g5@41]/6",
})).s("gm_overdriven_guitar").gain(0.38)

// other · overdriven guitar
const overdriven_guitar_3 = note("<~@57 A@5 B@4 ~@23 A@5 B@4 ~@7 A@5 B@4 ~@2>".pickRestart({
  A: "[~@15 e5@8 ~ f5@4 e5@2 f5@10 g5@2 f5@2 e5@10 ~@2 a#5@2 g5@2 a#5@2 c6@16 ~@2]/5",
  B: "[e5@4 f5@2 e5 f5@5 g5 f5 g5 g#5@5 a#5@3 c6@8 ~]/4",
})).s("gm_overdriven_guitar").gain(0.28).pan(1)

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

// drums · snare
const snare = s("sd").struct(`<
  A ~ A@7 B A@7 B A@6 C D A@7 E A@7 B A@7 F A@7 G A@7 E ~@7 H A@6 C D A@7 G A@7 I A@3 J A@3 K A@3 J L M@2 N ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~", C: "x", D: "~@4 x!4", E: "~ x!2 ~", F: "~@2 x ~ x ~@2 x", G: "~@2 x ~ x ~ x!2",
  H: "~@5 x!2 ~", I: "~@2 x ~ x!4", J: "~@2 x ~@2 x ~ x", K: "~@2 x ~@4 x", L: "~ x!3", M: "x!4", N: "x ~ x ~ x!4",
})).gain(0.72)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@25 A ~@7 B ~@23 C ~@7 B ~@15 A ~@7 C ~@7 D ~@15 D ~@2>".pickRestart({
  A: "x!4 ~@4", B: "~@7 x ~@4 x ~ x ~", C: "~@6 x!2 ~@8", D: "~@7 x ~@8",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@48 [x ~@3 x!2 ~ x] x ~@55 [~@7 x] ~@10>").gain(0.64)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@33 A ~@7 A ~@7 B ~@7 A ~@7 A ~@7 A ~@15 A ~@15 B ~@3 B ~@6>".pickRestart({
  A: "~@7 x", B: "~@3 x",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A ~@3 B ~@3 A ~@3 C ~@3 A ~ D ~ E ~@3 A ~@3 F ~@3 A ~@3 G ~@3 A ~ D ~ E ~@3 A ~@3 F ~@3 A ~@3 F ~ A ~ A ~ A ~ C
  ~@3 A ~ D ~ E ~@3 A ~@3 F ~@3 A ~@3 H ~@3 A ~@3 F I J@2 K L M J N ~@2
>`.pickRestart({
  A: "~@5 x ~ x", B: "~@4 x ~@2 x", C: "~ x", D: "~@7 x", E: "~@5 x!3", F: "~@5 x ~@2", G: "~@4 x!3 ~", H: "~ x!5 ~@2",
  I: "~ x!3", J: "x!4", K: "x ~ x ~ x!2 ~@2", L: "~@2 x ~ x ~ x!2", M: "x ~ x ~ x ~ x!2", N: "~@2 x ~ x!2 ~@2",
})).gain(0.48)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct(`<
  ~@106
  [~ x ~ x ~ x ~ x]!3
  [~ x ~ x ~@4]
  [~ x ~ x ~ x ~@2]!2
  [~ x ~ x ~ x ~ x]
  [~ x ~ x ~@4]
  ~@2
>`).gain(0.24)

// drums · high tom
const high_tom = s("ht").struct("<~@33 A ~@15 B ~@7 A ~@7 A ~@23 A ~@15 B ~@10>".pickRestart({
  A: "~@5 x!2 ~", B: "~@5 x ~@2",
})).gain(0.72)

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

// drums · ride
const ride = s("rd").struct("<~@98 A B@2 C A D B E ~@10>".pickRestart({
  A: "~ x ~ x!5", B: "x!8", C: "x!5 ~@3", D: "~ x!7", E: "x!6 ~@2",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@18 A@6 B@2 C D@3 C D@3 ~@8 A@6 B@2 C D@3 C D@3 C D@3 C D@3 ~@8 A@6 B@2 C D@3 C D@3 C D@3 C D@3 C D@3 C D@3 C D@3 C
  D@3 ~@2
>`.pickRestart({
// … 62 more lines

More by 883