Strudelify

Giorno Giovanni's Theme

Yugo Kanno

KeyD majorTempo120 bpm
0:00/0:00
// Giorno Giovanni's Theme — Yugo Kanno
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (5/4 at bar 1, 4/4 at bar 3) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5835047; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 115 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
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.

// other · trumpet
const trumpet = note(`<
  ~@32 A B C D E B C D E B C D E B C D E ~@15 A B C D E B C D F G ~@25 H I B C D E B C D E B J@2 K@2 L
>`.pickRestart({
  A: "~@12 b4 c#5 d5 e5", B: "f#5@6 f5@8 d5 e5", C: "f5@3 e5@3 d5@2 c#5@3 d5@3 e5@2", D: "f#5@3 b5@3 b4 c#5",
  E: "d5@3 e5@3 d5@2 c#5@3 a5@3 g5@2", F: "d5@3 e5@3 d5@2 c#5@3 a4@3 g4@2", G: "f#4 ~@7", H: "~@12 d5 c#5 ~ b4",
  I: "a4 b4 ~ a4 b4 ~ a4 b4 ~ a4 b4 ~ b4 c#5 d5 e5", J: "[f5@3 e5@3 ~ d5@2 c#5@3 d5@3 e5@2 ~ f#5@7 b5@7]/2",
  K: "[~ b4@2 c#5@3 d5@4 e5@5 d5@3 c#5@5 d5@5 ~ c#5@3]/2", L: "b4 ~@3",
})).s("gm_trumpet").gain(0.4)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note(`<
  ~@32 A B C D E B C D E B C D E B C D E F G H G F G H G F G H G F G H I B C D E B C D J K ~@26 L B C D E B C D E B M@2
  N@2 O
>`.pickRestart({
  A: "~@12 b3 c#4 d4 e4", B: "f#4@6 c#5@8 d4 e4", C: "f4@3 e4@3 d4@2 c#4@3 d4@3 e4@2", D: "f#4@3 d#5@3 b3 c#4",
  E: "d4@3 e4@3 d4@2 c#4@3 a4@3 g4@2", F: "b3 c#4 d4 e4 f#4 [g#4,a#4] [g#4,b4] a#4 b4 c#5 d5 f5 f#5 g#5@3",
  G: "c4 d4 e4 f4 g#4 a4 b4 c5 f4 g#4 a#4 b4 c#5 d#5 e5 f#5",
  H: "b3 c#4 d4 e4 f#4 [g#4,a#4] [g#4,b4] a#4 b4 c#5 d5 e5 f#5 g#5@3", // G#sus2 G#m
  I: "c4 d4 e4 f4 g#4 a4 b4 c5 f4 [g#4,a#4] [b4,c#5] [d#5,e5] [b3,f#5] c#4 d4 e4", J: "d4@3 e4@3 d4@2 c#4@3 a3@3 g3@2",
  K: "b3 ~@7", L: "a3 b3 ~ a3 b3 ~ a3 b3 ~ a3 b3 ~ b3 c#4 d4 e4",
  M: "[f4@3 e4@3 ~ d4@2 c#4@3 d4@3 e4@2 ~ f#4@7 d#5@7]/2", N: "[~ b3@2 c#4@3 d4@4 e4@5 d4@3 c#4@5 d4@5 ~ c#4@3]/2",
  O: "b3 ~@3",
})).s("gm_trumpet").gain(0.05)

// other · alto sax
const alto_sax = note(`<
  ~@32 A B C D E B C D E B C D E B C D E ~@15 A B C D E B C D F G ~@3 H I J K H L J M N I J K N I O K ~@7 P B C D E B C
  D E B Q@2 R@2 S
>`.pickRestart({
  A: "~@12 b3 c#4 d4 e4", B: "f#5@6 d5@8 d5 e5", C: "f5@3 e5@3 d5@2 c#5@3 d5@3 e5@2", D: "f#5@3 e5@3 b4 c#5",
  E: "d5@3 e5@3 d5@2 c#5@3 a5@3 g5@2", F: "d5@3 e5@3 d5@2 c#5@3 a4@3 g4@2", G: "d4 ~@7",
  H: "b3 c#4 d4 e4 f#4 [g#4,a4] [g#4,b4] a#4 b4 c#5 d5 f5 f#5 g5@3", // Amaj7 G#m
  I: "c4 d4 e4 f4 g#4 a4 b4 c5 f4 g#4 a#4 b4 c#5 d#5 e5 f#5",
  J: "b3 c#4 d4 e4 f#4 [g#4,a#4] [g#4,b4] a#4 b4 c#5 d5 e5 f#5 g5@3", // G#sus2 G#m
  K: "b3 c#4 d4 e4 f#4 g#4 a#4 b4 f4 g#4 a#4 b4 c#5 d#5 e5 f#5", L: "c#4 d4 e4 f#4 g#4 a4 b4 c#5",
  M: "b3 c#4 d#4 e4 f#4 g#4 a#4 b4 f4 g#4 a#4 b4 c#5 d#5 e5 f#5",
  N: "b3 c#4 d4 e4 f#4 [g#4,a#4] [g#4,b4] a#4 b4 c#5 d5 f5 f#5 g5@3", // G#sus2 G#m
  O: "b3 c#4 d4 e4 f#4 [g#4,a4] [g#4,b4] a#4 b4 c#5 d5 e5 f#5 g5@3", P: "a4 b4 ~ a4 b4 ~ a4 b4 ~ a4 b4 ~ b4 c#5 d5 e5",
  Q: "[f5@3 e5@3 ~ d5@2 c#5@3 d5@3 e5@2 ~ f#5@7 e5@7]/2", R: "[~ b4@2 c#5@3 d5@4 e5@5 d5@3 c#5@5 d5@5 ~ c#5@3]/2",
  S: "b4 ~@3",
})).s("gm_alto_sax").gain(0.05)

// other · tenor sax
const tenor_sax = note(`<
  ~@32 A B C B C B C B C B C B C B C B C ~@15 A B C B C B C B D E ~@25 F G B C B C B C B C B H@2 I@2 J
>`.pickRestart({
  A: "~@12 b3 c#4 d4 e4", B: "b3 b4 d5 g#3@2 g#4 b4@2", C: "c#4!2 g4@2 f#3 f#4 e5@2", D: "c#4!2 g4@2 f#4!2 e4@2",
  E: "b3 ~@7", F: "~@8 a4 g#4 ~ f#4 d4 c#4 ~ b3", G: "a4 b4 ~ a4 b4 ~ a4 b4 ~ a4 b4 ~ b4 c#5 d5 e5",
  H: "[c#4@2 c#4@2 g4@4 ~ f#3@2 f#4@2 e5@5 b3@2 b4@2 d5@2 ~ g#3@5 g#4@2]/2",
  I: "[~ b4@5 c#4@3 c#4@3 g4@6 f#4@3 f#4@3 ~ e4@7]/2", J: "b3 ~@3",
})).s("gm_tenor_sax").gain(0.45)

// other · tenor sax · soft notes
const tenor_sax_soft = note("<~@17 A B A B A B A B ~@90>".pickRestart({
  A: "b3@2 b3@2 b3 a3@2 b3@2 d4@2 b3@2 f#3 a3@2", B: "b3@2 b3@2 b3 a3@2 b3@2 f4@2 e4@2 d4 a3@2",
})).s("gm_tenor_sax").gain(0.25)

// chords · electric guitar jazz · "Guitar"
const electric_guitar_jazz = note(`<
  ~@33 A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B D ~@3 E B C F E G C F A B C F A B
  H F ~@6 I J A B C B A B C B A K@4 L
>`.pickRestart({
  A: "[b3,d4,f#4]@3 [g#3,b3,d4,f4]@5", B: "[c#4,e4,g#4,b4] [f#3,a#3,c#4,e4]", C: "[b3,d4,f#4]@3 [g#3,b3,d4,f#4]@5",
  D: "[b3,d4,f#4] ~@7", E: "[b3,d4,f#4,a4]@3 [g#3,b3,d4,f4]@5", F: "[b3,d4,f#4] [f#3,a#3,c#4,e4]", G: "[c#4,e4,g#4,b4]",
  H: "[b3,d4,f#4,a4]@3 [g#3,b3,d4,f#4]@5", I: "~@4 e4 d#4 ~ b3 a4 g#4 ~ f#4 d4 c#4 ~ b3",
  J: "a3 b3 ~ a3 b3 ~ a3 b3 ~ a3 b3 ~ b3 c#4 d4 e4",
  K: "[[c#4,e4,g4,b4]@9 [f#3,a#3,c#4,e4]@9 [b3,d4,f#4]@7 [g#3,b3,d4,f#4]@13 [c#4,e4,g4,b4]@12 [f#3,a#3,c#4,e4]@14]/4", // C#m7b5 F#7 Bm G#m7b5 C#m7b5 F#7
  L: "[b3,d4,f#4] ~@3", // Bm
})).s("gm_electric_guitar_jazz").gain(0.3)

// chords · piano
const piano = note(`<
  ~@13 A B A C ~@15 D E F G H E F G H E F G H E F G H I J K J I J K J I J K J I J K L E F G H E F G M N ~ A O P Q R S P
  T U V P Q R S P W X Y Z AA AB AC AD AE AF AG E F G H E F G H E AH@2 AI@2 AJ
>`.pickRestart({
  A: "b2@2 b2@2 b2 a2@2 b2@2 d3@2 b2@2 f#2 a2@2", B: "b2@2 b2@2 b2 a2@2 b2@2 f3@2 e3@2 d3 a2@2",
  C: "b2@2 b2@2 b2 a2@2 b2 ~@8", D: "~@3 e2@3 d2@2 c#2@3 ~ b4 c#5 d5 e5, ~@11 a2@3 g2@2",
  E: "[b1,b2]@2 b3@2 [d4,f#4]@2 [g#1,g#2]@4 g#3@2 d4@2 d5 [e4,e5], f#5@3 f4@3 [b3,f4]@2, f#4@2 ~ [c#4,b4,d5]@4 d4", // B D G# E Bdim G
  F: "[c#2,c#3,f4,f5] ~@2 [d4,d5] [f#1,f#2,c#4,c#5] ~ e4 [e4,e5], ~ c#3 [e3,g3,b3]@2 ~ f#3 [a#3,c#4]@2, ~@3 [e4,e5]@3 ~@5 [d4,d5]@3 ~@2", // C# D F#5 E Em A#m E D
  G: "[b1,b2] b3 [d4,f#4] [g#1,g#2]@2 g#3 b4 [c#4,c#5], f#5@3 ~@5, f#4@2 ~ [b4,d#5,e5,b5]@3 [b3,d#4,f4]@2", // B D G# C# Emaj7 Fm7b5
  H: "[c#2,c#3,d4,d5]@2 ~@4 [d4,d5]@2 [f#1,f#2,c#4,c#5]@2 ~ a4 a4@2 [g4,g5]@2, ~ c#3 [e3,g3,b3]@2 ~ f#3 [a#3,c#4,e4]@2, ~@3 [e4,e5]@3 ~@5 a5@3 ~@2", // Dmaj7 D F#5 G Em A#dim E
  I: "[b1,b2] b3 [d4,f#4] [g#1,g#2]@2 g#3 [b3,d4,f4]@2", J: "[c#2,c#3] c#3 [e3,g3,b3]@2 [f#1,f#2] f#3 [a#3,c#4,e4]@2",
  K: "[b1,b2] b3 [d4,f#4] [g#1,g#2]@2 g#3 [b3,d#4,f4]@2", // B D G# Fm7b5
  L: "[c#2,c#3]@2 c#3@2 [e3,g3,b3]@4 [f#1,f#2]@2 f#3@2 b4 c#5 d5 e5, ~@3 [a#3,c#4,e4]", // C# Em F# A#dim
  M: "[c#2,c#3,d4,d5]@2 ~@4 [d4,d5]@2 [f#2,f#3,c#4,c#5]@2 ~ a3 a3@2 [g3,g4]@2, ~ c#3 [e3,g3,b3]@2 ~ f#3 [a#3,c#4,e4]@2, ~@3 [e4,e5]@3 ~@5 a4@3 ~@2", // Dmaj7 D F#5 G Em A#dim E
  N: "[b2,d3,f#3,b3,d4,f#4] ~@7", O: "b2@2 b2@2 b2 a2@2 b2@2 f3@2 ~ b4 [d3,c#5] d5 e5, ~@11 e3@2 ~ a2@2",
  P: "b1@2 d2@2 e2 f2@2 f#2@2 ~@2 f#2 [a2,d5]@2 [a#2,a#5]@2, [b4,f#5]@8 ~ a2@2 ~@5, ~@5 b4 ~@2", // D5 A# B5
  Q: "b2@2 a#2@2 a2 f#2@2 e2@2 a1 a2@2 a1@2 [a#1,e5]@2, [b4,e5,g#5]@4 ~ f#5@2 ~", // A#dim E
  R: "b1@2 d2@2 e2 f2@2 f#2@2 a2@2 f#2 a2@2 a#2@2, [b4,d5,f#5]@15 ~", // Bm
  S: "b2@2 a#2@2 a2 f#2@2 e2@2 a1 a2@2 b4 c#5 d5 e5, [b4,d5,f#5]@6 a1 a#1", // Bm
  T: "b2@2 a#2@2 a2 ~@2 e2@2 a1 a2@2 a1@2 a#1@2, [b4,e5,g#5]@5 f#2@2 ~@9, ~@3 a5@3 b5@2", // E
  U: "[b1,g#5]@2 ~@2 e2 f2@2 f#2@2 a2@2 f#2 a2@2 a#2@2, ~ d2 ~@6, ~@3 f#5@12 ~", // E
  V: "b2@2 a#2@2 a2 f#2@2 e2@2 a1 a2@2 b4 c#5 d5 e5, f#5@11 ~ a1@2 a#1@2",
  W: "b2@2 a#2@2 a2 ~@2 e2@2 a1 a2@2 a1@2 a#1@2, b5@5 f#2@2 ~@9, ~@3 a5@3 g#5@2",
  X: "b1@2 d2@2 e2 f2@2 f#2@2 a2@2 f#2 a2@2 a#2@2, f#5@15 ~",
  Y: "b2@2 a#2@2 a2 f#2@2 e2@2 ~@3 d5 c#5 b4@2, f#5@5 [a1,a2]@3", // A
  Z: "b2 f#3 b3 d4 b3 f#3 b2 f#3 b3 d4 b3 f#3 b2 f#3 b3 f#3, a4@3 b4@3 b4@4 f#4@2 a4@2 b4@2",
  AA: "b2 f#3 b3 d4 b3 f#3 b2 f#3 b3 d4 b3 f#3 [b2,d5] [f#3,c#5] b3 f#3, c#5@3 a4@3 b4@6 ~@2 b4@2", // Bm F#5
  AB: "b2 f#3 b3 d4 b3 f#3 b2 f#3 b3 d4 b3 f#3 b2 f#3 b3 f#3, a4@3 b4@3 b4@4 f#4@2 c#5@2 d5@2",
  AC: "b2 f#3 a3 c#4 a3 f#3 b2 f#3 a3 c#4 a3 f#3 [b2,d5,d6] [f#3,c#5,c#6] a3 f#3, c#5@3 a4@3 e4@6 ~@2 [b4,b5]@2", // Bm F#5 B
  AD: "[b1,b2,a4,a5] ~@7", AE: "[b1,b2,c#5,c#6]@3 [b2,a4] [f#3,b3] ~@11, ~@3 a5@3 ~@10, ~@2 a4 ~@5",
  AF: "[b1,a4] [d2,d5] ~ [f#2,f#5] [e2,e5] [d#2,d#5] ~ [b1,b4] [a2,a5] [g#2,g#5] ~ [f#2,f#5] [d2,d5] [c#2,c#5] ~ [b1,b4]", // B7 D F# E D# B A G# …
  AG: "[a1,a2,a4,a5] [b1,b2,b4,b5] ~ [a1,a2,a4,a5] [b1,b2,b4,b5] ~ [a1,a2,a4,a5] [b1,b2,b4,b5] ~ [a1,a2,a4,a5] [b1,b2,b4,b5] ~ b4 c#5 d5 e5, ~@3 [a1,a2]", // A B A B A B A B …
  AH: "[[c#2,c#3,f4,f5]@2 ~@2 [e3,g3,b3]@3 [d4,d5]@2 [f#1,f#2,c#4,c#5]@2 ~@2 e4@2 [e4,e5]@2 ~ [b1,b2]@2 b3@2 [d4,f#4]@2 ~ [g#1,g#2]@5 g#3@2, ~@2 c#3@2 ~@7 f#3@2 [a#3,c#4]@4 ~ f#4@4 ~@3 [b4,d#5,e5,b5]@7, ~@3 [e4,e5]@3 ~@6 [d4,d5]@3 ~@3 f#5@7 ~@7]/2", // C# Em D F#5 E B D G# …
  AI: "[~ b4@2 [c#4,c#5]@3 [c#2,c#3,d4,d5]@3 ~@6 [d4,d5]@3 [f#2,f#3]@3 f#3@2 d4@2 [c#4,d4]@4 [c#4,c#5]@3, ~ [b3,d#4,f4]@5 ~@3 c#3@3 [e3,g3,b3]@6 ~@7 [a#3,e4]@7, ~@10 [e4,e5]@5 ~@3 [c#4,c#5]@5 d5@5 ~@4]/2", // C# Dmaj7 D F# Dmaj7 C# Fm7b5 Em …
  AJ: "[b2,d3,f#3,b3,d4,f#4] ~@3", // Bm
})).s("gm_piano").gain(0.4)

// chords · piano · soft notes
const piano_soft = note("<~@17 A B A B A B A B C D E ~ C D E F ~@82>".pickRestart({
  A: "[b1,b2,b4]@2 [b1,b2,b4]@2 [b1,b2,b4] [a1,a2,a4]@2 [b1,b2,b4]@2 [d2,d3,d5]@2 [b1,b2,b4]@2 [f#1,f#2,f#4] [a1,a2,a4]@2", // B A B D B F# A
  B: "[b1,b2,b4]@2 [b1,b2,b4]@2 [b1,b2,b4] [a1,a2,a4]@2 [b1,b2,b4]@2 [f2,f3,f5]@2 [e2,e3,e5]@2 [d2,d3,d5] [a1,a2,a4]@2", // B A B F E D A
  C: "f#2@6 b1@8 d2 e2", D: "f2@3 e2@3 d2@2 c#2@3 d2@3 e2@2", E: "f#2@3 b2@3 b1 c#2", F: "d2@3 ~@13",
})).s("gm_piano").gain(0.25)

// bass · acoustic bass
const bass = note(`<
  A B C D E F G F G F G F G F G F H F G F G F G F G B C D I B C D I J K L K J K L K J K L K J K L K J K L K J K L K J K
  L K J K L K J K L K J K L M F G F G N O N O N O N O N O N O N O N P Q@3 R S T U V J K L K J K L K J W@2 X@2 Y
>`.pickRestart({
  A: "~@12 b1 c#2 d2 e2", B: "f#2@6 b1@8 d2 e2", C: "f2@3 e2@3 d2@2 c#2@3 d2@3 e2@2", D: "f#2@3 b2@3 b1 c#2",
  E: "d2@3 e2@3 d2@2 c#2@3 b1@3 a1@2", F: "b1@2 b1@2 b1 a1@2 b1@2 d2@2 b1@2 f#1 a1@2",
  G: "b1@2 b1@2 b1 a1@2 b1@2 f2@2 e2@2 d2 a1@2", H: "b1@2 b1@2 b1 a1@2 b1 ~@8", I: "d2@3 e2@3 d2@2 c#2@3 a2@3 g2@2",
  J: "b1 b2 f#3 g#1@2 g#2 d3@2", K: "c#2!2 b2@2 f#1 f#2 c#3@2", L: "b1 b2 f#3 g#1@2 g#2 d#3@2",
  M: "c#2!2 b2@2 f#2!2 c#2@2", N: "b1@2 d2@2 e2 f2@2 f#2@2 a2@2 f#2 a2@2 a#2@2",
  O: "b2@2 a#2@2 a2 f#2@2 e2@2 a1 a2@2 a1@2 a#1@2", P: "b2@2 a#2@2 a2 f#2@2 e2@2 ~ [a1,a2]@6",
  Q: "b1 f#2 b2 d3 b2 f#2 b1 f#2 b2 d3 b2 f#2 b1 f#2 b2 f#2",
  R: "b1 f#2 a2 c#3 a2 f#2 b1 f#2 a2 c#3 a2 f#2 b1 f#2 a2 f#2", S: "b1 ~@7", T: "b1@3 b2 f#2 ~@11",
  U: "b1 d2 ~ f#2 e2 d#2 ~ b1 a2 g#2 ~ f#2 d2 c#2 ~ b1", V: "a1 b1 ~ a1 b1 ~ a1 b1 ~ a1 b1 ~ a1@4",
  W: "[c#2@2 c#2@2 b2@4 ~ f#1@2 f#2@2 c#3@5 b1@2 b2@2 f#3@2 ~ g#1@5 g#2@2]/2",
  X: "[~ d#3@5 c#2@3 c#2@3 b2@6 f#2@3 f#2@3 ~ c#2@7]/2", Y: "b1 ~",
})).s("gm_acoustic_bass").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@9 A@7 B A@8 C@3 ~ C@43 ~ D A@3 E@15 F ~@8 C@9 G H ~@2 D>".pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "x ~@4 x ~@2", D: "x", E: "x ~@3 x!2 ~ x ~@4 x ~ x ~", F: "x ~@3 x!2 ~ x ~@2 x ~@5",
  G: "x ~@10 x ~@4", H: "~ x ~@5 x",
})).gain(0.25)

// drums · rim
const rim = s("rim").struct("<~@25 A@3 ~ A@43 ~@29 A@9 B C D ~@2>".pickRestart({
  A: "~@3 x ~@2 x ~", B: "~@7 x ~@5 x ~@2", C: "~@9 x ~@6", D: "~ x ~@14",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@16 A B@8 ~@47 C ~@3 B D@15 E ~@7 F ~@11 G ~@2>".pickRestart({
  A: "~@7 x ~@8", B: "~ x ~ x", C: "x!2 ~ x ~@12", D: "~@4 x ~@6 x!2 ~@3", E: "~ x ~@2",
  F: "x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!4", G: "~@6 x!2 ~@2 x ~@5",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@25 A@3 ~ A@43 B ~@28 A@10 C ~ D ~>".pickRestart({
  A: "x", B: "~@12 x!2 ~ x", C: "~ x ~@6", D: "~@9 x ~ x ~ x!2 ~",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@16 A B@8 C@3 D C@4 E C@7 E C@7 E C@7 E C@7 E C@3 E C@2 ~@29 E C@7 E F G H ~@2
>`.pickRestart({
  A: "~@7 x ~@8", B: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", C: "x ~ x ~@3 x ~ x ~ x ~ x ~ x!2", D: "~@14 x!2",
  E: "~@2 x ~@3 x ~ x ~ x ~ x ~ x!2", F: "x ~ x ~@4 x ~ x ~ x ~ x ~ x", G: "x!3 ~ x ~@4 x ~ x ~@2 x ~",
  H: "~ x ~ x!3 ~@10",
})).gain(0.3)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@13 A@3 B ~@57 A C@2 D@15 E ~@22>".pickRestart({
  A: "x!16", B: "x!7 ~@9", C: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", D: "~ x ~ x", E: "~ x ~@2",
})).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@17 A@8 B@3 ~ B@43 ~@29 B@10 C ~@3>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~ x ~@2", C: "~@3 x ~@4",
})).gain(0.3)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@75 [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!2 ~@38>").gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@72 [~@8 x!2 ~ x ~@4] ~@40 [~@2 x ~ x!2 ~ x ~@8] ~>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@72 [~@4 x!2 ~ x ~@8] ~@39 [~@12 x!2 ~@2] [~ x ~@14] ~>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@33 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@18 B ~@8 A ~@7 A ~@4 A>".pickRestart({
  A: "x", B: "~@5 x ~@2",
})).gain(0.4)

// … 7 more lines

More by Yugo Kanno