Strudelify

Crunchy Granola Suite

Neil Diamond

KeyA majorTempo170 bpm
0:00/0:00
// Crunchy Granola Suite — Neil Diamond
// 170 bpm, 4/4, key A 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, 4/4 at bar 68, 3/4 at bar 125, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 4 "Strings 1" string ensemble 1 (copy of ch 5 "Strings 2" string ensemble 1)
// note: Full arrangement: all 192 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(170/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 · slap bass 1 · "Bass"
const bass = note(`<
  ~@8 A B A C A D E F G H G I G H G J K L K M K M N O P@2 Q@3 R S T U V S T U V S T U V S T U V W X W Y Z AA AB AC AB AC
  AD AE@3 AF AG AH AB AH@3 AB AI AJ@2 AK AB AL AB AL AM Q@4 R S T U V S T U V AN AO AP S AQ AR AS AN AO AT S AQ AR AS AU
  AV AW Y Z AA AB AC AB AC AD AE@3 AF AG AH AB AH@3 AB AI AJ@2 AK AB AL AB AL Q@4 R S T U V S T U V AN AO AP S AQ AR AS
  AN AO AT S AQ AR AS AU AV AW Y Z AA AB AC AB AC AB@2 AX Q AY AZ BA BB BC@5
>`.pickRestart({
  A: "e1@5 ~ e1 ~ e1@5 ~ e1 ~", B: "e1@2 ~@2 e1 ~ a1@3 ~ a1@3 ~ a1@2", C: "e1@3 ~ e1 ~ a1@2 ~@2 a1@3 ~ a1@2",
  D: "e1@3 ~ e1@2 a1@3 ~ a1@2 ~@2 a1@2", E: "e1@3 ~ e1@3 ~ e1@6 ~@2", F: "e1@5 ~ e1 ~ e1@3 ~ e1@3 ~",
  G: "d1@5 ~ d1 ~ d1@6 ~@2", H: "d1 ~ d1@3 ~ d1@4 g1@2 a1@4", I: "d1 ~ d1@3 ~ d1@3 ~ d1@5 ~",
  J: "d1@4 ~@2 d1@3 ~ d1@3 ~ d1@2", K: "a1@5 ~ a1 ~ a1@6 ~@2", L: "a1 ~ a1@3 ~ a1@4 d2@2 e2@4",
  M: "a1 ~ a1@3 ~ a1@3 ~ a1@2 d2@4", N: "a1@5 ~ a1 ~ a1@6 a1 ~", O: "~@2 a1@3 ~ a1@3 ~ a1 ~ a1@3 ~",
  P: "a1@7 ~ a1@6 ~@2", Q: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", R: "a1@3 ~@13",
  S: "a1@2 c#2@2 e2 ~ a2@2 ~@2 a2@3 ~ a2@2", T: "~@2 a2@3 ~ a2@2 g2@2 e2@2 g2@2 a2 ~",
  U: "a1@2 c#2@2 e2 ~ a2@3 ~ a2@3 ~ a2@2", V: "~@2 a2@3 ~ a2@2 g2@4 ~@4", W: "a1@4 ~@2 a1@5 ~ a1@4",
  X: "~@2 a1@5 ~ a1@3 ~ a1@3 ~", Y: "~@2 a1@4 ~@2 a1@3 ~ a1@3 ~", Z: "a1@4 ~@2 a1 ~ a1@4 ~@2 a1 ~",
  AA: "a1@3 ~ a1 ~ d2@3 ~ d2@2 ~@2 d2@2", AB: "a1@5 ~ a1 ~ a1@5 ~ a1 ~", AC: "a1@3 ~ a1 ~ d2@3 ~ d2@3 ~ d2@2",
  AD: "a1@3 ~ a1@3 ~ a1@7 ~", AE: "[a1 ~ a1 ~ a1 ~ a1@3 ~ f#1@2 g1@2 a1@27 ~@5 d2@2]/3",
  AF: "~@2 d2@3 ~ d2@2 a1@4 ~@2 d2@2", AG: "~ d2 a1@2 ~ f#1 g1 a1", AH: "a1@4 ~@2 a1 ~ a1@5 ~ a1 ~",
  AI: "d2@2 c#2@2 b1@2 a1@6 ~@2 a1 ~", AJ: "[a1@4 ~@2 a1 ~ a1@2 f#1@2 g1@2 a1@6 ~@2 a1 ~ a1@5 ~ a1 ~]/2",
  AK: "a1@5 ~ a1 ~ a1 ~ a1@5 ~", AL: "a1@5 ~ a1 ~ a1 ~ a1@6", AM: "a1@4 a1@3 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  AN: "a1@4 e2@2 d2@2 c#2@2 a1@3 ~ g1 ~", AO: "g1@5 ~ g1 ~ g1@3 ~ g1@3 ~", AP: "f#1@5 ~ d1 ~ d2 ~ f#1 ~ g1@2 a1@2",
  AQ: "~@2 a2@3 ~ a2@2 g2@2 e2 ~ g2@2 a2 ~", AR: "a1@2 c#2 ~ e2@2 a2@3 ~ a2@3 ~ a2@2", AS: "~@2 a2@2 ~@2 a2@2 g2@3 ~@5",
  AT: "d2@5 ~ d1 ~ d2 ~ f#1 ~ g1@2 a1@2", AU: "a1@5 ~ a1@5 ~ a1@4", AV: "~@2 a1@5 ~ a1@3 ~ a1@2 ~@2",
  AW: "a1@5 ~ a1@4 ~@2 a1@4", AX: "~ a1!2 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", AY: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~",
  AZ: "a1@3 ~ a1@3 ~ a1@3 ~ a1@2 ~@2", BA: "a1@3 ~@9 a1@4", BB: "~@9 a1@5 ~@2", BC: "[~ a1@4 ~@5 a1@52 a1@9 ~@9]/5",
})).s("gm_slap_bass_1").gain(0.59)

// chords · brass section · "Brass"
const brass_section = note(`<
  ~@38 A B C D A B C D E F G H G I G H J K J L M ~@31 A B C D E F G H ~@3 A B C D ~@3 E F G H J K J L M ~@30 A B C D E F
  G H ~@3 A B C D ~@3 E F G H J K J L M ~@11 N O P@5
>`.pickRestart({
  A: "a4@2 c#5@2 e5 ~ a5@2 ~@2 a5@3 ~ a5@2", B: "~@2 a5@3 ~ a5@2 g5@2 e5@2 g5@2 b5 ~",
  C: "a4@2 c#5@2 e5 ~ a5@3 ~ a5@3 ~ a5@2", D: "~@2 a5@3 ~ a5@2 g5@4 ~@4",
  E: "a4@2 c#5@2 [e5,b5] ~ [a5,c#6]@2 ~@2 [a5,c#6]@3 ~ [a5,c#6]@2, e5 ~ a5 ~@13", // E5 A
  F: "~@2 [a5,c#6]@3 ~ [a5,c#6]@2 [g5,b5]@2 e5@2 [g5,b5]@2 d6@2, ~@10 a5 ~@3 b5 ~", // A G
  G: "a4@2 c#5@2 [e5,b5] ~ [a5,c#6]@3 ~ [a5,c#6]@3 ~ [a5,c#6]@2, e5 ~ a5 ~@13", // E5 A
  H: "~@2 [a5,c#6]@3 ~ [a5,c#6]@2 [g5,b5]@4 ~@4", // A G
  I: "~@2 [a5,c#6]@3 ~ [a5,c#6]@2 [g5,b5]@2 e5@2 g5@2 d6@2, ~@10 a5 ~ b5 ~ b5 ~", // A G
  J: "[a4,e5]@5 ~ [g4,d5]@4 ~@2 [a4,e5]@4", K: "~@2 [g4,d5]@4 ~@2 [a4,e5]@4 [g4,d5] ~@3",
  L: "~@2 [g4,d5]@4 ~@2 [a4,e5]@3 ~ d5@2 ~@2, ~@12 g4 ~@3", M: "[a3,e4,a5,e6,a6] ~@3, [a4,e5] ~@7",
  N: "[a3,a5,e6,a6] ~@2 [a3,a5,e6,a6]", O: "~@9 [a3,a5,e6,a6]@6 ~",
  P: "[~ [a3,a5,e6,a6]@5 ~@4 [a3,a5,e6,a6]@58 ~@12]/5", // A5
})).s("gm_brass_section").gain(0.36).pan(0.2)

// chords · church organ · "Organ"
const church_organ = note("<A@4 B@4 C@8 D@8 E@8 F@6 ~@135 G H I@2 J@2 K@6 L ~@6>".pickRestart({
  A: "[e4@30 ~ [f4,f5]@17 [d4,a4]@16, e2@15 ~, b4@40 ~@8 d5 ~@15]/4", B: "[[e2,e4,b4]@63 ~]/4",
  C: "[[e4,b4]@22 [e4,a4]@3 ~ [e4,a4]@3 ~ a4@2 b4@22 [e4,a4]@2 ~@2 [e4,a4]@3 ~ a4@2 b4@22 [e4,a4]@3 ~ [e4,a4]@3 ~ [e4,a4]@2 [e4,b4]@32, e2@29 ~@3, ~@30 e4@23 ~@9 e4@23 ~@43]/8", // E5 A5 E5
  D: "[~@103 a4@24 ~, [d2,a3], d4@63 ~]/8", E: "[a2,e4]/8",
  F: "[a3@16 ~@32 g5@16 b5@19 ~@13, e4@83 ~@13, ~@16 b4@67 ~@13, ~@31 d5@51 ~@14]/6", G: "[a4,e5,a5]@5 ~@11",
  H: "~@6 [a4,d5] ~@3 [a4,d5] ~@5", I: "[e5@21 ~ [a4,d5] ~@3 d5 ~@5]/2", J: "[e5@21 ~ [a4,d5] ~@3 [a4,d5]@3 ~ d5 ~]/2",
  K: "[~@3 g5 b5@2, e4, a4@27 ~@5 d5@63 ~, ~@16 b4@77 ~@3, ~@48 a5 ~@47]/6", L: "[a4,e5]@5 ~@11",
})).s("gm_church_organ").gain(0.33)

// chords · church organ · "Organ" · soft notes
const church_organ_soft = note("<~@3 A ~@170 B C@4 ~@13>".pickRestart({
  A: "~ d5@7", B: "~@7 d5, ~@14 a4 ~", C: "[a4@21 ~@5 a4@2 ~@2 a4@23 ~@9 a4 ~, ~@15 d5 ~@16]/4",
})).s("gm_church_organ").gain(0.2)

// other · string ensemble 1 · "Strings 2"
const string_ensemble_1 = note("<A@8 ~@7 B@3 C@2 D@2 E@4 F@2 G@2 H@2 I J K L M N ~@141 O@6 ~@7>".pickRestart({
  A: "b6/8", B: "[~@15 a6@22 g6@4 f#6@2 d6@4 ~]/3", C: "[a5@20 ~ g5@4 ~ f#5@2 d5@4]/2",
  D: "[a4@18 ~@2 a4@2 f#5@4 g5 ~ b5@3 ~]/2",
  E: "[~ g5 ~ d5 ~@4 g4 f#4@2 d4 ~@7 a4@2 d5@4 e5@2 g5@2 ~@2 e5@21 ~@4 a5 ~ b5 ~ c#6 ~ a5 ~, a5@2 f#5@2 ~@4 a4@2 ~@5 a3@6 ~@43]/4",
  F: "[e5@21 ~ e5@4 a5 ~ b5 ~ c#6 ~]/2", G: "[e6@18 ~@2 e5@2 e6@2 ~@2 c#6 ~ b5@2 a5@2]/2", H: "[e5@29 ~@3]/2",
  I: "e5@2 e4 ~", J: "b5@2 b4 ~", K: "d6@2 d5 ~", L: "g6@8 g5@3 ~@5", M: "b6@4 b5@3 ~", N: "b6@3 ~@13",
  O: "[~@3 g5 b5@2, e4@89 ~@7, ~ b4@5, ~ d5@2]/6",
})).s("gm_string_ensemble_1").gain(0.45)

// chords · overdriven guitar · "Overdrive"
const overdriven_guitar = note(`<
  ~@38 A B C D A B C D E F G H G F G H I J I K L ~@31 A B C D E F G H ~@3 A B C D ~@3 E F G H I J I K L ~@30 A B C D E F
  G H ~@3 A B C D ~@3 E F G H I J I K L ~@11 M N O@5
>`.pickRestart({
  A: "a3@2 c#4@2 e4 ~ a4@2 ~@2 a4@3 ~ a4@2", B: "~@2 a4@3 ~ a4@2 g4@2 e4@2 g4@2 b4 ~",
  C: "a3@2 c#4@2 e4 ~ a4@3 ~ a4@3 ~ a4@2", D: "~@2 a4@3 ~ a4@2 g4@4 ~@4",
  E: "[a3,e4]@2 [c#4,a4]@2 [e4,b4] ~ [a4,c#5]@2 ~@2 [a4,c#5]@3 ~ [a4,c#5]@2", // A5 F#m E5 A
  F: "~@2 [a4,c#5]@3 ~ [a4,c#5]@2 [g4,b4]@2 e4@2 [g4,b4]@2 [b4,d5]@2, ~@10 a4 ~@5", // A G Bm
  G: "[a3,e4]@2 [c#4,a4]@2 [e4,b4] ~ [a4,c#5]@3 ~ [a4,c#5]@3 ~ [a4,c#5]@2", // A5 F#m E5 A
  H: "~@2 [a4,c#5]@3 ~ [a4,c#5]@2 [g4,b4]@4 ~@4", I: "[a3,e4]@5 ~ [g3,d4]@4 ~@2 [a3,e4]@4",
  J: "~@2 [g3,d4]@4 ~@2 [a3,e4]@4 [g3,d4] ~@3", K: "~@2 [g3,d4]@4 ~@2 [a3,e4]@3 ~ [g3,d4]@2 ~@2",
  L: "[a2,e3,a4,e5,a5] ~@3, [a3,e4] ~@7", M: "[a2,a4,e5,a5] ~@2 [a2,a4,e5,a5]", N: "~@9 [a2,a4,e5,a5]@6 ~",
  O: "[~ [a2,a4,e5,a5]@4 ~@5 [a2,a4,e5,a5]@58 ~@12]/5", // A5
})).s("gm_overdriven_guitar").gain(0.25).pan(0.8)

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

// drums · rim
const rim = s("rim").struct(`<
  ~@24 A B A B A B A B A@4 ~@22 C D@7 E F@2 G F H F H F H F I ~@38 J F@7 K D@2 L D M D M D M D ~@38 D@9 N ~@9
>`.pickRestart({
  A: "~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~ x!3", C: "~@3 x", D: "~ x ~ x", E: "~@2 x!2 ~@4", F: "x!2", G: "x ~@4 x!3",
  H: "x ~@2 x!2 ~ x!2", I: "x", J: "~ x", K: "x!2 ~@4 x ~", L: "~@3 x!4 ~", M: "~ x!2 ~ x!3 ~", N: "~ x ~@2",
})).gain(0.64)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@34 A B ~@5 C ~@36 D@3 ~@2 E F G ~@7 H ~@41 I J K ~@3 L B ~@7 M ~@41
>`.pickRestart({
  A: "~@5 x!3", B: "x!7 ~", C: "~@9 x ~ x ~@4", D: "x!2", E: "~@6 x!2", F: "x!8", G: "x", H: "~@5 x ~ x ~@8",
  I: "~@3 x", J: "~ x ~ x", K: "~ x ~@2", L: "~@4 x!4", M: "~ x ~ x ~@12",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@13 A B C ~@20 D E ~@20 E ~@26 F@3 G ~@26 A ~@26 H F@2 I ~@26 J ~@16 K L ~
>`.pickRestart({
  A: "~@3 x", B: "~@2 x ~ x ~@2 x", C: "~ x!4 ~ x ~", D: "~@2 x!6", E: "x", F: "x!8", G: "x!6 ~@2", H: "~@6 x!2",
  I: "x!4 ~@4", J: "~ x", K: "~@2 x ~ x ~@2 x ~@2 x!2 ~ x!2 ~", L: "x!2 ~@14",
})).gain(0.72)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@35 A B ~@46 C D ~@56 E F ~@46 G ~@2>".pickRestart({
  A: "~@5 x!3", B: "x!2 ~@6", C: "~@6 x!2", D: "x!8", E: "~@4 x!4", F: "x!6 ~@2", G: "~@3 x ~@2 x ~@2 x ~@6",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@7 A@9 B C@7 D@10 C E ~@22 D@25 F ~@31 G D@24 H I ~@30 J D@9 I ~@9>".pickRestart({
  A: "x!4", B: "~ x ~ x!3 ~ x", C: "x!2 ~ x!3 ~ x", D: "x!8", E: "~ x ~ x", F: "x!6 ~@2", G: "~@6 x!2", H: "x!3 ~ x!4",
  I: "x!4 ~@4", J: "~@4 x!4",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@13 A ~@19 B C ~@22 D ~@19 E ~@37 F ~@19 G ~@35 H I ~@14 J K A ~@2>".pickRestart({
  A: "x", B: "~ x!3", C: "x ~ x ~ x!4", D: "~@2 x!2 ~@2 x ~", E: "~@4 x!2 ~@2", F: "x!2 ~@2 x ~@3", G: "~@2 x!2 ~@4",
  H: "~@6 x!2", I: "~ x ~@2", J: "~@6 x!10", K: "x ~ x!6 ~ x!4 ~ x!2",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@16 [~ x ~ x]!8 ~@10 [~ x ~ x] ~@105 [~@3 x ~@4] ~@51>").gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@12 A ~@10 B ~@33 C ~@19 D ~@37 E ~@19 F ~@36 G ~@19>".pickRestart({
  A: "~ x ~@2", B: "~@5 x!3", C: "~@4 x!2 ~@2", D: "~@3 x ~@4", E: "~@2 x!2 ~@4", F: "~ x ~@6", G: "x!2 ~@6",
})).gain(0.8)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@38 A B C D A B C B A B C B A B C E ~@36 F G H I F G F J F G F G F G J F G K G F K J ~@34 L C M N L C M C O C M C M C
  M O C M P M C P Q ~@23
>`.pickRestart({
  A: "~@2 x!3 ~ x!2", B: "x ~ x!6", C: "x ~ x!3 ~ x!2", D: "x!2 ~ x ~@4", E: "x ~ x!4 ~@2", F: "x!3 ~ x!3 ~",
  G: "x!7 ~", H: "x!3 ~ x!4", I: "~ x ~@6", J: "x!6 ~@2", K: "x!4 ~@2 x ~", L: "~@6 x!2", M: "x!5 ~ x!2",
  N: "x ~ x!4 ~ x", O: "x!4 ~@2 x!2", P: "x!2 ~@2 x ~ x!2", Q: "x!4 ~@4",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@58 A B C D E F G H I J K L M@7 N O@6 ~@32 P Q R S C Q I T O F@2 U V@7 W X@5 Y ~@30 Z AA L AB AC AD AC O AE AA AF ~@9
>`.pickRestart({
// … 12 more lines

More by Neil Diamond