Strudelify
Diamonds & Pearls cover art

Diamonds and Pearls

Diamonds & Pearls

Prince

KeyG majorTempo81 bpm
0:00/0:00
// Diamonds & Pearls — Prince
// 81 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 22, 4/4 at bar 22, 2/4 at bar 40, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(81/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 · "Diamonds."
const bass = note(`<
  A@7 B@7 C@4 D E F G@3 H I@2 H@2 J@2 K L K M N O P@2 ~ Q R S T@2 U S T@2 U S V@2 W X Y Z F AA@2 Z F AB@2 K L K L N AC
  AD@7 AE AF
>`.pickRestart({
  A: "[~@8 d3 e3 g3 a3 g3@11 ~ f2 a2 c3 e3 d3@11 ~ d2 f2 a2 c3 b2@6 g1 ~ g1@20 d3 e3 g3 a3 g3@11 ~ f2 a2 c3 e3 d3@11 ~ d2 f2 a2 c3 b2@4]/7",
  B: "[~@2 g1 ~ g1@20 d3 e3 g3 a3 g3@11 ~ f2 a2 c3 e3 d3@11 ~ d2 f2 a2 c3 b2@6 g1 ~ g1@14 ~ d2!2 e2 g2 ~ g2@2 a2@2 b2@2 c1@8 ~ c2 c2@8]/7",
  C: "[~@3 d2!2 e2 g2 ~ g2@2 a2@2 b2@2 c1@8 ~ c2 c2@10 ~ d2!2 e2 g2 ~ g2@2 a2@2 b2@2 e1@8 ~ e1 e1@3 e1 g1@4]/4",
  D: "a1@6 ~ a1 a1@7 ~", E: "a1@2 g1@5 ~", F: "f2 a2 c3 e3 d3@11 ~",
  G: "[d2 f2 a2 c3 b2@6 g1 ~@9 [f#3,c#4]@4 b3@4 ~@4 g1@3 ~@4 g2 ~ g2 ~ d2!2 e2@2 ~, ~@3 g1@5 ~@4, ~@8 e3@3 ~@5, ~@14 a3@3 ~@7]/3", // F#5
  H: "g1@3 ~@4 g2 ~ g2 ~ d2!2 e2@2 ~", I: "[g1@4 ~@3 g2 ~ d3 g1 ~ g1@19 ~]/2",
  J: "[g1@4 ~@3 g2 ~ d3 g1 ~ g1@13 ~ d2!3 e2 g2 ~]/2", K: "g2@2 a2@2 b2@2 c1@8 ~ c2", L: "c2@10 ~ d2!2 e2 g2 ~",
  M: "c2@10 ~ d2!2 ~ g2 ~, ~@13 e2@2 ~", N: "g2@2 a2@2 b2@2 e1@8 ~ e1", O: "e1@3 g1@5 a1@6 ~ a1",
  P: "[a1@7 ~ a1@4 g1@10 ~@2 [f2,f3]@4 [d#2,d#3]@2 ~@2]/2", Q: "~@12 a#2 c3 d#3 f3", R: "d#3@12 c#2 f2 g#2 c3",
  S: "a#2@10 ~@2 a#1 c#2 f2 g#2", T: "[g2@6 d#2 ~ d#2@19 ~ a#1 c2 d#2 f2]/2", U: "d#2@8 ~@4 c#2 f2 g#2 c3",
  V: "[g2@6 d#2 ~ d#2@19 ~ g2 a#2 d#3 g3]/2", W: "f3 d#3 d3 c3 d3 e3 g3 a3 g3@4 f2 a2 c3 e3",
  X: "d3@4 d2 f2 a2 c3 b2@6 g1 ~", Y: "g1@15 ~", Z: "d3 e3 g3 a3 g3@11 ~", AA: "[d2 f2 a2 c3 b2@6 g1 ~ g1@20]/2",
  AB: "[d2 f2 a2 c3 b2@6 g1 ~ g1@14 ~ d2!2 ~ g2 ~, ~@29 e2@2 ~]/2", AC: "e1@3 e1 e1@4 a1@7 a1",
  AD: "[a1@7 ~ a1@3 ~ g1@10 ~@2 g2@2 a2@2 b2@2 c1@8 ~ c2 c2@10 ~ d2!2 e2 g2 ~ g2@2 a2@2 b2@2 c1@8 ~ c2 c2@10 ~ d2!2 e2 g2 ~ g2@2 a2@2 b2@2 e1@8 ~ e1 e1@3 d2 e2@4]/7",
  AE: "a2@6 ~ a2 a2@7 ~", AF: "a2 ~@3",
})).s("gm_fretless_bass").gain(0.22)

// other · pad new age
const pad_new_age = note(`<
  A@5 B@8 C D C D ~@2 E F G@2 H F G@2 H F G@2 I J I J ~@17 K L M N H F O@2 P F G@2 I J I J ~@4 C D C D ~@3
>`.pickRestart({
  A: "[~@8 g5 a5 b5 e6 [b5,d6]@7 ~@5 f5 g5 a5 c6 [g5,b5]@8 ~@4 d5 e5 g5 a5 [b4,d5,g5]@28 g5 a5 b5 e6 [b5,d6]@4]/5", // Bm G Bm
  B: "[~@8 f5 g5 a5 c6 [g5,b5]@8 ~@4 d5 e5 g5 a5 [b4,d5,g5]@28 g5 a5 b5 e6 [b5,d6]@7 ~@5 f5 g5 a5 c6 [g5,b5]@8 ~@4 d5 e5 g5 a5 [b4,d5,g5]@28 ~@8]/8", // G Bm G
  C: "~@4 [e5,e6] ~@3 [b4,b5] ~@3 [d5,d6] ~@3", D: "[g4,g5] ~@15", E: "~@4 g5 a5 b5 e6 [b5,d6]@7 ~",
  F: "f5 g5 a5 c6 [g5,b5]@8 ~@4", G: "[d5 e5 g5 a5 [b4,d5,g5]@28]/2", H: "g5 a5 b5 e6 [b5,d6]@7 ~@5",
  I: "~@12 [e5,e6] ~@3", J: "[b4,b5] ~@3 [d5,d6] ~@3 [g4,g5] ~@7", K: "~@12 g5 a#5 d#6 g6",
  L: "f6 d#6 d6 c6 g5 a5 b5 e6 [b5,d6]@4 f5 g5 a5 c6", M: "[g5,b5]@4 d5 e5 g5 a5 [d5,e5,g5]@6 [b4,d5] ~", N: "[b4,d5]",
  O: "[d5 e5 g5 a5 ~@16 d4@4 [c#4,c#6]@4 [a3,a5]@4, ~ [b4,d5,g5]@7, ~@10 d6 ~@5]/2", // C# A G
  P: "g5 a5 b5 e6 [b5,d6]@7 ~@5, g3@7 ~", // Bm
})).s("gm_pad_new_age").gain(0.21)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@7 A@2 ~ B ~@15 C ~@7 D E F ~@3 G H I J@2 ~@3 K ~@4 L M N ~ O@2 ~@6 P Q P R@3 S ~@7
>`.pickRestart({
  A: "[~@14 [a4,d5]@11 ~@7]/2", B: "[b4,e5] [g#4,c#5] [a4,d5]@3 ~@3", C: "~@5 [g4,d5] d4@2",
  D: "~@10 [d3,d4]!3 [e3,e4] [g3,g4] ~", E: "[b3,b4]@2 [a3,a4]@2 [g3,g4] ~ e4@8 [g4,d5] [e4,b4], ~@6 e3@5 ~@5",
  F: "[d4,e4,g4] [d4,g4,a4] [b3,e4]@6 ~@8", G: "~@12 a#2 c3 d#3 f3", H: "d#3@12 c#2 f2 g#2 c3",
  I: "a#2@10 ~@2 a#2 c#3 f3 g#3", J: "[g3@6 d#3 ~ d#3@19 ~@5]/2", K: "c#5 c5 g#4 ~",
  L: "~@4 [g3,d4] [b3,e4] [d4,g4] ~ [d4,g4]@3 ~@2 [a3,d5] [c4,b4] [e4,a4], ~@7 [e4,a4]@2 ~@3 [f3,e5]@2 ~@2", // G5 E5 G5 D5 Cmaj7 A5 Fmaj7
  M: "[d4,b4]@4 [d3,a4] [f3,g4] [a3,e4] [c4,d4] [g3,e4]@6 [f#3,b3] ~", N: "[f#3,b3]",
  O: "[~@6 [d5,e5,g5,a5] [d5,g5] [d5,e5,g5,a5]!2 [e5,a5] [b4,d5,e5,g5] [a4,b4,d5,e5] [d5,g5] [b4,e5]@15 ~@3]/2", // Dsus4 G5 Dsus4 A5 Em7 Asus4 G5 E5
  P: "~@10 d3!3 e3 g3 ~", Q: "b3 a3 g3 e3@5", R: "[b3 a3 g3 e3@3 e5@6 d5@8 c5@2 b4@2]/3", S: "a4@3 [a4,b4] g4@4 ~@8",
})).s("gm_overdriven_guitar").gain(0.22).pan(0.7)

// chords · pad metallic
const pad_metallic = note(`<
  ~@3 A@2 ~@2 A@2 ~@2 B@7 C D ~ E@2 ~@2 E@2 ~@2 E@2 F@2 G@2 H I@3 ~@19 E@2 ~@2 E@2 F@2 G@2 J K@8 ~@2
>`.pickRestart({
  A: "[~@2 [g2,d3] ~ [g2,d3]@20 ~@8]/2", // G5
  B: "[~@2 [g2,d3] ~ [g2,d3]@20 ~@6 [g4,b4,d5,e5]@24 ~@8 [g4,b4,d5,e5]@22 ~@10 e5@6 g5@4 [a4,b4,d5,f#5]@8, ~@47 [b4,d5]@5 ~@4]/7", // G5 Em7 Bm7 Bm
  C: "[g4,a4,c#5,e5]@7 ~", D: "[c4,e4,g4,a4]@3 ~ [d4,g4,b4]@7 ~@5", E: "[~@10 [g2,d3] ~ [g2,d3]@20]/2",
  F: "[~@3 [g4,b4,d5,e5]@12 ~]/2", G: "[~@3 [g4,b4,d5,e5]@11 ~@2]/2", H: "~@3 e5@3 g5@2, ~@3 [b4,d5]@5",
  I: "[[a4,b4,d5,f#5]@8 [g4,a4,c#5,e5]@14 ~@2 [c4,e4,g4,a4]@3 ~ [d4,g4,b4]@7 ~@13]/3", // Bm7 A7 Am7 G
  J: "~@3 e5@3 g5@2, ~@6 [b4,d5]@9 ~", // Bm
  K: "[[a4,b4,d5,f#5]@8 [g4,a4,c#5,e5]@14 ~@2 [c4,e4,g4,a4]@3 ~ [d4,g4,b4]@7 ~@11 [g4,b4,d5,e5]@24 ~@8 [g4,b4,d5,e5]@22 ~@10 [b4,d5]@10 ~@8, ~@55 e5@3 ~@6]/8", // Bm7 A7 Am7 G Em7 Bm
})).s("gm_pad_metallic").gain(0.14)

// chords · pad metallic · soft notes · Bm7 A7 Am7
const pad_metallic_soft = note("<~@76 [~ g5 [a4,b4,d5,f#5]@2] [[g4,a4,c#5,e5]@7 ~] [[c4,e4,g4,a4]@3 ~@13]>")
  .s("gm_pad_metallic").gain(0.08)

// chords · electric guitar muted
const electric_guitar_muted = note("<~@7 A@2 ~@2 A@2 ~@10 B@3 ~ C@3 ~@15 D@2 ~@13 E@3 ~@16>".pickRestart({
  A: "[~@9 d4 c4 ~ d4@12 ~@8, ~@8 f3@2 ~ g3@12 ~@9]/2", B: "~@7 g3 ~ g3 e3 d3 g3@2 e3 d3",
  C: "~@7 [g3,d4] ~ [g3,d4] e3 d3 [g3,d4]@2 e3 d3", D: "[~@3 [a#4,d#5]@2 ~@3]/2",
  E: "~@7 [g2,d3] ~ [g2,d3] e2 d2 [g2,d3]@2 e2 d2", // G5
})).s("gm_electric_guitar_muted").gain(0.09).pan(0.2)

// chords · music box · D#
const music_box = note(`<
  ~@38
  [~@12 [g6,a#6,d#7] ~ [g6,a#6,d#7] ~]
  [[g6,a#6,d#7] ~ [g6,a#6,d#7] ~ [g6,a#6,d#7] ~ [g6,a#6,d#7] ~ [g6,a#6,d#7] ~ [g6,a#6,d#7] ~ [g6,a#6,d#7] ~ [g6,a#6,d#7] ~]!13
  [[g6,a#6,d#7] ~ [g6,a#6,d#7] ~ [g6,a#6,d#7] ~ [g6,a#6,d#7] ~ [g6,a#6,d#7] ~ [g6,a#6,d#7] ~@5]
  ~@26
>`).s("gm_music_box").gain(0.14).pan(0.8)

// other · brass section
const brass_section = note("<~@38 A B C D@7 E D@2 F G ~@26>".pickRestart({
  A: "~@12 g5 ~ g5 ~", B: "g5 ~ g5 ~ g5 ~ g5 ~ g5 ~ g5 ~ [d#5,g5]@2 [a#4,d#5,g5] [d#5,g5]",
  C: "[g5,a#5]@2 [d#5,g5] [g5,a#5] [g5,a#5,d#6] [g5,a#5] g5 ~ g5 ~ g5 ~ g5 ~ g5 ~, ~@6 [d#6,g6]@5 ~@5", // Gm D# Gm D# Gm D#
  D: "g5 ~ g5 ~ g5 ~ g5 ~ g5 ~ g5 ~ g5 ~ g5 ~", E: "g5 ~ g5 ~ g5 ~ g5 ~ g5 ~ g5 ~ g5 ~ g5 ~, c#5 c5 g#4 ~",
  F: "g5 ~ g5 ~ g5 ~ g5 ~ g5 ~ g5 ~ g5 ~ g5 [a#3,a#4]", // A#
  G: "[d#4,d#5,g5] [a#3,a#4] [d#4,d#5,g5] [g4,g5] [a#4,g5,a#5] [g4,g5] g5 ~ g5 ~ g5 ~@5, ~@3 [d#5,d#6]@3 ~@2", // D# A# D# G D# G D#
})).s("gm_brass_section").gain(0.14).pan(0.2)

// chords · tinkle bell
const tinkle_bell = note("<A B ~@10 C D ~@8 E ~@8 E ~@20 F G ~@10 E ~@6 C D ~@6>".pickRestart({
  A: "[f#8,g#8,a#8] [d#8,f8] [b7,c#8] [f#7,g#7,a#7] [d#7,f7,f#8,g#8] [d#8,f8] [b7,c#8] [g#7,a#7] [d#7,f7,f#7] [b6,c#7,a#7,c#8] [f7,f#7,g#7] [c#7,d#7] [a#6,b6] [f#6,g#6] [c#6,d#6,f6] [a#5,b5]", // F# D#sus2 Bsus2 F# Fm7 D#sus2 Bsus2 G#sus2 …
  B: "[f#5,g#5] ~@15", // F#sus2
  C: "~@8 [f#8,g#8,a#8] [d#8,f8] [b7,c#8] [f#7,g#7,a#7] [d#7,f7,f#8,g#8] [d#8,f8] [b7,c#8] [g#7,a#7]", // F# D#sus2 Bsus2 F# Fm7 D#sus2 Bsus2 G#sus2
  D: "[d#7,f7,f#7] [b6,c#7,a#7,c#8] [f7,f#7,g#7] [c#7,d#7] [a#6,b6] [f#6,g#6] f6 ~@9", // D#m F# Fm C#sus2 Bmaj7 F#sus2
  E: "[f#8,g#8,a#8] [d#8,f8] [b7,c#8] [f#7,g#7,a#7] [d#7,f7,f#8,g#8] [d#8,f8] [b7,c#8] [g#7,a#7] [d#7,f7,f#7] [b6,c#7,a#7,c#8] [f7,f#7,g#7] [c#7,d#7] [a#6,b6] [f#6,g#6] f6 ~", // F# D#sus2 Bsus2 F# Fm7 D#sus2 Bsus2 G#sus2 …
  F: "~@12 [f#8,g#8,a#8] [d#8,f8] [b7,c#8] [f#7,g#7,a#7]", // F# D#sus2 Bsus2 F#
  G: "[d#7,f7,f#8,g#8] [d#8,f8] [b7,c#8] [g#7,a#7] [d#7,f7,f#7] [b6,c#7,a#7,c#8] ~ [c#7,d#7] [a#6,b6] [f#6,g#6] f6 ~@5", // Fm7 D#sus2 Bsus2 G#sus2 D#m F# C#sus2 Bmaj7 …
})).s("gm_tinkle_bell").gain(0.05)

// chords · tinkle bell · soft notes
const tinkle_bell_soft = note("<~ A ~@11 B ~@8 C D ~@7 C D ~@20 E ~@10 C D ~@6 B ~@6>".pickRestart({
  A: "f5 [c#5,d#5] ~@14", B: "~@6 [c#6,d#6] [a#5,b5] [f5,f#5,g#5] [c#5,d#5] ~@6", C: "~@14 [c#6,d#6] [a#5,b5]",
  D: "[f5,f#5,g#5] [c#5,d#5] ~@14", E: "~@10 [c#6,d#6] [a#5,b5] [f5,f#5,g#5] [c#5,d#5] ~@2",
})).s("gm_tinkle_bell").gain(0.02)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@37 [~@14 x!2] x ~@36 [~@7 x!2 ~ x ~ x ~ x ~] [~@7 x!2 ~@6 x] [x ~@6 x ~@7 x] ~>")
  .gain(0.24)

// drums · rim
const rim = s("rim").struct("<~@22 A B@7 C ~@24 A B@3 C ~@19>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2",
})).gain(0.42)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@37 [~@14 x!2] [x!2 ~@14] ~@37 [~ x ~ x]!2 ~>").gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@12 A ~@17 B ~@7 C ~ B D B E F ~@8 G H ~@8 B ~@3 I ~ H ~ H ~@7>".pickRestart({
  A: "~@3 x ~@4", B: "~@7 x", C: "~ x!4 ~ x ~@3 x!2 ~@4", D: "~@13 x!2 ~", E: "~@6 x ~ x ~@4 x ~ x",
  F: "x ~@2 x ~@3 x ~@2 x!2 ~@4", G: "~@2 x!4 ~@7 x!2 ~", H: "~@5 x!2 ~@9", I: "~@11 x!2 ~@3",
})).gain(0.42)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@37 [~@14 x!2] x ~@36 [~@5 x!2 ~@9] ~@3>").gain(0.24)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@76 [~@6 x ~ x!8] [~ x!15] ~>").gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@12 A ~@17 B ~@7 C ~ B D E F G ~@7 H I J ~@8 E ~@3 C ~@3 J ~@3 J ~@3>".pickRestart({
  A: "~@4 x!2 ~@10", B: "~@12 x!2 ~@2", C: "~@5 x ~@2", D: "~@3 x", E: "~@13 x ~@2", F: "~@12 x ~@2 x",
  G: "~@2 x ~@2 x!5 ~ x ~@4", H: "~@13 x!2 ~", I: "~ x ~@10 x ~@3", J: "~ x ~@2",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct("<~@16 A ~@17 B ~@18 C D ~@12 B ~@3 E ~@3 A ~@3>".pickRestart({
  A: "x", B: "~ x", C: "~@5 x ~@2", D: "~ x ~@6", E: "x!2 ~@6",
})).gain(0.42)

// drums · high tom
const high_tom = s("ht").struct("<~@40 A ~ A ~ B ~@8 C ~@25>".pickRestart({
  A: "~@3 x", B: "~ x ~@2 x ~@3 x ~@7", C: "x ~@2 x",
})).gain(0.42)

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

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@12 x ~@62 [~@4 x!4] ~ x!2>").gain(0.24)
// … 18 more lines

More by Prince