Strudelify
Giulietta cover art

Mango

Giulietta

Mango

KeyA♭ majorTempo90 bpm
0:00/0:00
// Giulietta — Mango
// 90 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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 · piano
const piano = note("<~@43 A B A B C D ~@39 E F G F C@2 ~@42>".pickRestart({
  A: "~@2 b3 gb4 b4 gb4 b3 ~@3 bb3 eb4 bb4 eb4 bb3 ~", B: "~@2 db4 gb4 bb4 gb4 db4 ~@3 db4 ab4 db5 ab4 db4 ~",
  C: "~@2 db4 ab4 db5 ab4 db4 ~@3 db4 ab4 db5 ab4 db4 ~", D: "~@2 db4 ab4 db5 ab4 db4 ~@9",
  E: "~@10 b3 gb4 b4 gb4 b3 ~", F: "~@2 bb3 eb4 bb4 eb4 bb3 ~@3 db4 gb4 bb4 gb4 db4 ~",
  G: "~@2 db4 ab4 db5 ab4 db4 ~@3 b3 gb4 b4 gb4 b3 ~",
})).s("gm_piano").gain(0.5)

// bass · fretless bass
const bass = note(`<
  ~@7 A B C B D B C B E B F G H B I B J@2 ~ K L K M B F G H B I N O@2 P Q@2 R S T U V@8 W@2 X@8 Y@6 Z@2 AA AB AC@4 AD@2
  AE@5 AF@4 AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD AT BE BF AZ BA BB BC BD AT BE BF AZ
  BA BB BC BD AT BE BF BG AT BH@2
>`.pickRestart({
  A: "~@6 b1 bb1", B: "ab1", C: "db2@6 gb1 g1", D: "db2@3 gb1", E: "db2@3 bb2", F: "db2@7 ~", G: "gb1@3 db3@3 gb2@2",
  H: "f2 eb2", I: "f1 eb1", J: "[db1@3 db1@2 ~@6 db1 [ab1,ab2]@20]/2", K: "ab1@15 ~", L: "db1@3 db1 ~@10 gb1@2",
  M: "db2", N: "ab1@14 eb1 f1", O: "[[gb1,gb2]@14 gb2 eb2]/2", P: "[db1,db2]@3 b2",
  Q: "[gb2@10 gb2 ab2 db3@2 ab2@2 gb2@12 ab2@4, gb1@7 ~]/2", R: "[db1,db2]@12 ~@2 ab1 bb1", S: "b1@8 eb2@5 ~ eb2@2",
  T: "gb1@5 ~ gb1@2 db2@6 ab1 bb1", U: "b1@4 eb2@3 eb2",
  V: "[gb1@5 ~ gb1 ~ db2@14 ab1 ~ db1@12 b1@4 ab1@4 ~@2 ab1@9 ~ ab1@6 ab2@6 ab1@4 db1@5 ~ db1@7 ~ db1 f1 eb1@5 ~ eb1@10 ab1@4 ~@2 ab1@9 ~ ab1@6 ab2@2]/8",
  W: "[~@4 eb1@4 db1@5 ~ db1@7 ~ db1 f1 eb1@5 ~ bb1@2]/2",
  X: "[f2@2 eb2@6 ab1@4 ~@2 ab1@9 ~ ab1@6 ab2@6 gb1@4 f1@5 ~ f1@7 ~ f1@2 db1@5 ~ db2@7 ~ db1 ab1 gb1@5 ~ gb1@7 ~ gb1@2 eb1@5 ~ eb1@7 ~ eb1@2 ab1@4 ~@2 ab1@9 ~ ab1@6 ab2@2]/8",
  Y: "[~@4 ab1@4 db1@5 ~ db1@7 ~ db1 f1 eb1@5 ~ eb1@10 ~@2 gb4@10 ~@2 db4@2 ~@2 gb3 ~ ab3@12 ~@2 gb4@12 db4@5 ~ ab3@4]/6",
  Z: "[b3@2 bb3@6 ab1@15 ~ db1@3 db1 ~@4]/2", AA: "~@3 [db1,db2] [a1,a2]@4 ab1@8", AB: "~@5 ab1!3 db1@3 db1@2 ~@3",
  AC: "[~@3 db1 db2@2 b1@2 ab1@16 ~@11 db1 ab1 db1 f1 ab1 gb1@6 db3@6 ~@2 db3 gb2 f2@8, ~@4 c2 ~@19 db2@14 ~@26]/4",
  AD: "[eb2@8 ab1@13 ~ eb2 e2 f2@8]/2", AE: "[eb2@4 ab1@6 f2 ab2 [gb1,gb2]@14 gb2 eb2 [db1,db2]@6 b2@2 b1@4]/5",
  AF: "[eb2@8 gb2@12 db2@2 ab2@2 gb2@12 bb2@4 [db1,db2]@12 ~@2 ab1 bb1 b1@8, ~@2 gb1@7 ~@7]/4", // Db
  AG: "eb2@5 ~ eb2@2 gb1@5 ~ gb1@2", AH: "db2@6 ab1 bb1 b1@8", AI: "eb2@6 eb2@2 gb1@5 ~ gb1 ~", AJ: "db2@14 ab1 ~",
  AK: "db1@3 b1", AL: "ab1@4 ~@2 ab1@3 ~ ab1@4 ~@2", AM: "ab1@4 ~@2 ab1@3 ~ ab1@2 ab1@4", AN: "db1@5 ~ db1@7 ~ db2@2",
  AO: "eb1@5 ~ eb1@4 bb1@2 f2@2 eb2@2", AP: "ab1@2 ~ ab1@4 ab2", AQ: "ab1@5 ~ ab1@2 [ab1,ab2]@2 [gb1,gb2]@6",
  AR: "[db1,db2]@5 ~ db1@7 ~ db1 f1", AS: "eb1@4 bb1 f2 eb2@2", AT: "ab1@4 ~@2 ab1@9 ~", AU: "ab1@3 ab2@3 gb1@2",
  AV: "f1@5 ~ f1@7 ~ f1@2", AW: "db1@5 ~ db2@7 ~ db1 ab1", AX: "gb1@5 ~ gb1@7 ~ gb1@2", AY: "eb1@5 ~ eb1@7 ~ eb1@2",
  AZ: "ab1@2 ~ ab1 ~ ab1@2 ~", BA: "ab1@4 ~@2 ab1@2 ~@2 ab1@5 ~", BB: "db1@2 ~ db1@3 db2@2",
  BC: "eb1@4 ~@2 eb1 f1 eb1@2 f1@2 c2@4", BD: "ab1@2 ~ ab1@4 eb2", BE: "db1@2 ~ db1@3 ~ db2",
  BF: "eb1@6 bb1 c2 db2@2 eb2 ~ c2@4", BG: "ab1@2 ~ ab1@4 ab1", BH: "ab1/2",
})).s("gm_fretless_bass").gain(0.64)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@3 A@4 ~@2 B@2 ~@25 C@2 ~ C@2 ~@40 D@2 ~@2 D@2 ~@49>".pickRestart({
  A: "[~@12 ab3@26 ~@4 gb4@19 ~@3]/4", B: "[~@6 f4 ab4@9]/2", C: "[~ [db4,gb4], ~@15 [gb3,bb3]@17]/2",
  D: "[~ [db4,gb4]@2 ~, ~@7 [gb3,bb3]@17 ~@8]/2", // Gb5 Gb
})).s("gm_electric_guitar_clean").gain(0.48).pan(0.3)

// chords · electric guitar clean
const electric_guitar_clean_2 = note(`<
  ~@4 A B@2 C@10 D E@3 ~ A B@2 C@6 D E@3 ~ A F@2 G H@2 I ~@3 J@8 K@5 ~@3 L@5 ~@3 M@6 N@4 O@4 ~ P@3 Q ~@3 R S T U V U T U
  V U W X ~@4 T U V U T U V U T U V U T U V U T U V U T U V U T Y@2 ~
>`.pickRestart({
  A: "[ab2,eb3]@15 ~", B: "[[ab2,db3]@9 ~ gb3@4 eb3@17 ~]/2", C: "[[ab2,db3]@10 gb3@4 eb3@17 ~]/2",
  D: "[ab2,db3]@5 ~@3", E: "[~@8 eb4@7 ~ [c4,eb4]@8, bb3@7 ab3@7 ~ ab3@9, ~@3 gb3@11 ~@34, ~@3 db4@5 ~@16]/3",
  F: "[ab4@29 ~@3]/2", G: "~@6 [ab3,db4,eb4]!2 [ab3,db4,eb4]@8", H: "[db4@29 ~@3]/2",
  I: "~@6 [ab3,db4,eb4]!2 db4@6 db4@2, ~ [ab3,eb4]", // Absus4 Ab5
  J: "[~@14 [db3,db4]@7 ~ [db3,db4]@2 ~@6 [db3,db4]@9 ~@13 eb4@4 ~@12 eb4@4 ~@12 eb4@4 ~@12 eb4@4 ~@12 eb4@4 ~@6 g3@2, ~@8 [ab3,ab4]@15 ~ [ab3,ab4]@15 ~ ab3@6 g3@10 f3@6 g3@10 ab3@6 db3@10 f3@6 g3@10 ab3@6 g3@10 f3@6 ~@2, ~@11 [eb3,eb4]@12 ~@4 [eb3,eb4]@12 ~@3 ab4@4 ~@4 ab4@4 ~@4 ab4@4 ~@4 ab4@4 ~@4 ab4@4 ~@4 ab4@4 ~@4 ab4@4 ~@4 ab4@4 ~@4 ab4@4 ~@4 ab4@4 ~@4 ab4@4 ~@2, ~@11 eb4 ~@3 eb4 ~@3 eb4 ~@3 eb4 ~@3 eb4 ~@3 eb4]/8", // Db Ab Eb
  K: "[~ eb4 ~@3 eb4 ~@3 eb4 ~@3 eb4 ~@3 eb4 ~@2, ~ ab4@2 ~ ab3@3 db3@5 f3@3 g3@5 ~@2 eb4@2 ~@6 eb4@2 ~@8, ~@5 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@5, ~@6 eb4@2 ~@6 eb4@2 ~@4 c4@3 c4@5 db4@3 c4@5 ~@4]/5",
  L: "[~@5 eb4 ~@3 eb4 ~@3 eb4 ~@3 eb4 ~@2, ~@4 ab3@3 g3@5 f3@3 g3@5 ab3@3 db3@5 f3@3 g3@5 ~@4, ~@5 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@2 ab4@2 ~@5, ~@3 eb4 ~@3 eb4 ~@3 eb4 ~@3 eb4 ~@4]/5",
  M: "[~@8 [ab2,eb3]@15 ~ [ab2,db3]@10 gb3@4 eb3@17 ~ [ab2,db3]@10 gb3@4 eb3@17 ~ [ab2,db3]@8]/6", // Ab5 Db5
  N: "[~@12 eb4@7 ~ [c4,eb4]@8 ~@4, ~@4 bb3@7 ab3@7 ~ ab3@9 ~@4, ~@11 gb3@11 ~@42, ~@7 db4@5 ~@20]/4", // Cm
  O: "[~@8 [ab2,eb3]@15 ~ ab4@29 ~@11]/4", P: "[~@8 db4@29 ~@9 [ab3,db4,eb4]!2]/3", Q: "db4@3 db4 ~@4, [ab3,eb4] ~",
  R: "~@6 [db3,db4]@7 ~ [db3,db4]@2, [ab3,ab4]@15 ~, ~@3 [eb3,eb4]@12 ~", // Db Ab Eb
  S: "~@6 [db3,db4]@9 ~, [ab3,ab4]@15 ~, ~@3 [eb3,eb4]@12 ~", T: "~@3 eb4, ab3@3 g3@5, ~ ab4@2 ~@2 ab4@2 ~, ~ eb4 ~@2",
  U: "~@3 eb4, f3@3 g3@5, ~ ab4@2 ~@2 ab4@2 ~, ~ eb4 ~@2", V: "~@3 eb4, ab3@3 db3@5, ~ ab4@2 ~@2 ab4@2 ~, ~ eb4 ~@2",
  W: "~@3 eb4, c4@3 c4@5, ~ ab4@2 ~@2 ab4@2 ~, ~ eb4 ~@2", X: "~@3 eb4, db4@3 c4@5, ~ ab4@2 ~@2 ab4@2 ~, ~ eb4 ~@2",
  Y: "[~@12 eb4@2 ~@3 ab2@15, f3@3 g3@5 [ab3,c4,eb4]@8, ~@2 ab4@4 ~@4 ab4@4 ~ ab4@16 ~, ~ eb4 ~@6]/2", // Ab
})).s("gm_electric_guitar_clean").gain(0.42).pan(0.7)

// chords · pad poly
const pad_poly = note("<~@20 A@4 ~@112>".pickRestart({
  A: "[~ [c4,ab4,eb5,ab5]@11 ~@4]/2", // Ab
})).s("gm_pad_poly").gain(0)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@48 A@8 B@8 C@7 ~@23 D@2 E F D@2 E F D@2 G H I J D@2 E F D@2 E F D@2 E F D@2 E F D@2 E F D@2 E F D@2 K@2
>`.pickRestart({
  A: "[~@4 [c5,eb5]@16 [f4,db5]@8 [g4,bb4]@3 [ab4,c5]@3 [bb4,db5]@2 [c5,eb5]@16 [f4,db5]@8 [g4,bb4]@3 [ab4,c5]]/8", // Cm Db Gm Ab Bbm Cm Db Gm …
  B: "[~ [bb4,db5] [c5,eb5]@8 [f4,c5,ab5]@4 [f4,db5,ab5]@4 [gb4,db5,bb5]@4 [ab4,eb5,bb5]@4 [c5,eb5]@6]/8", // Bbm Cm Fm Db Gb Absus2 Cm
  C: "[~@4 [f4,db5]@8 [g4,bb4]@3 [ab4,c5]@3 [bb4,db5]@2 [ab2,ab3,c4,eb4,ab4]@32 ~@4]/7", D: "[c5,eb5]/2", E: "[f4,db5]",
  F: "[g4,bb4]@3 [ab4,c5]@3 [bb4,db5]@2", G: "[f4,c5,ab5]", H: "[f4,db5,ab5]", I: "[gb4,db5,bb5]", J: "[ab4,eb5,bb5]",
  K: "[c4,eb4]/2", // Cm
})).s("gm_string_ensemble_2").gain(0.35)

// chords · electric guitar clean
const electric_guitar_clean_3 = note(`<
  ~@7 A@2 B C A@2 B C B C ~ D E F E ~ B C A@2 B C B C ~ D E F E ~ D ~ G D ~ G H I J K@2 L@6 M@5 ~@3 N@5 ~@3 O ~ P@4 Q@5
  R@2 S@2 T@2 S@2 U V W X ~ Y@2 Z AA Y@2 Z AA Y@2 ~@4 Y@2 Z AA Y@2 Z AA Y@2 Z AA Y@2 Z AA Y@2 Z AA Y@2 Z AA Y@2 ~@2
>`.pickRestart({
  A: "[~@3 [bb3,db4,gb4]@3 ~@2]/2", B: "~@3 [gb2,db3]", C: "[ab2,eb3]@3 ~", D: "[gb2,db3]", E: "f2@8 eb2@7 ~, c3@15 ~",
  F: "[ab2,eb3]", G: "[db3,ab3]", H: "[b2,gb3]@8 [bb2,eb3]@5 ~ [bb2,eb3]@2",
  I: "[gb2,db3]@5 ~ [gb2,db3]@2 [ab2,db3]@6 ~@2", J: "[b2,gb3]@4 [eb3,bb3]@3 [eb3,bb3]",
  K: "[[gb2,db3]@5 ~ [gb2,db3] ~ [db3,ab3]@14 ~@10]/2", // Gb5 Db5
  L: "[~@8 [ab2,eb3]@29 ~@3 [ab2,db3]@14 ~@2 [bb2,eb3]@16 [ab2,eb3]@24]/6", // Ab5 Db5 Eb5 Ab5
  M: "[~@8 [ab2,db3]@14 ~@2 [bb2,eb3]@16 [ab2,eb3]@29 ~@11]/5", // Db5 Eb5 Ab5
  N: "[~@8 [ab2,eb3]@29 ~@3 [ab2,db3]@14 ~@2 [bb2,eb3]@16 ~@8]/5", O: "~ [bb3,db4,gb4]@3",
  P: "[~ [gb2,db3] [ab2,eb3]@3 ~@3]/2", // Gb5 Ab5
  Q: "[~@8 [gb2,db3]@16 f2@8 eb2@7 ~ [ab2,eb3]@16 f2@8 eb2@7 ~@9, ~@24 c3@15 ~@17 c3@15 ~@9]/5", // Gb5 Ab5
  R: "[~ [gb2,db3]@2 ~]/2", S: "[~ [db3,ab3]@2 [b2,gb3]]/2", T: "[[eb3,bb3] [gb2,db3]@2 ~]/2",
  U: "[bb2,eb3]@5 ~ [bb2,eb3]@2 [gb2,db3]@5 ~ [gb2,db3]@2", V: "[ab2,db3]@3 ~ [b2,gb3]@4",
  W: "[eb3,bb3]@6 [eb3,bb3]@2 [gb2,db3]@5 ~ [gb2,db3] ~", X: "[db3,ab3]@7 ~", Y: "[[ab2,eb3]@29 ~@3]/2",
  Z: "[ab2,db3]@7 ~", AA: "[bb2,eb3]",
})).s("gm_electric_guitar_clean").gain(0.48).pan(0.8)

// chords · pad warm
const pad_warm = note(`<
  ~@4 A B A B A B A B A B A B A B C D E D A B A B A B A B A B C D E D A F@2 G F@2 G H I H J@8 K@7 L@6 ~@3 M@8 N@7 O@4 P
  Q P R@2 S@2 T U S@2 T U S@2 V W C X S@2 T U S@2 T U S@2 T U S@2 T U S@2 T U S@2 T U S@2 ~@2
>`.pickRestart({
  A: "[ab2,ab3,c4,eb4]", B: "[db2,f3,db4], ab3 ~@15", C: "[gb3,bb3,db4]@15 ~", D: "f3 eb3, [ab3,c4]", E: "[eb3,ab3,c4]",
  F: "[gb2,db3,gb3,bb3]/2", G: "[db2,db3,f3,ab3]", H: "[b3,eb4,gb4] [bb3,eb4,gb4]", I: "[bb3,db4,gb4] [ab3,db4,f4]",
  J: "[[bb3,db4,gb4] [ab3,db4,f4]@4 [ab2,eb3,c4]@4 [db2,f3,db4]@2 [eb2,g3,eb4]@2 [ab2,eb3,c4]@3]/8", // Gb Db Ab Db Eb Ab
  K: "[~@8 [db2,f3,db4]@16 [eb2,g3,eb4]@16 [ab2,eb3,c4]@32 [f3,ab3,c4]@15 ~ [gb3,ab3,db4]@15 ~ [gb3,bb3,db4]@8]/7", // Db Eb Ab Fm Gbsus2 Gb
  L: "[~ [ab3,bb3,eb4]@2 [ab2,eb3,c4]@4 [db2,f3,db4]@2 [eb2,g3,eb4]@2 ~]/6", // Absus2 Ab Db Eb
  M: "[~@8 [ab2,ab3,c4,eb4]@16 [db2,f3,db4]@16 [ab2,ab3,c4,eb4]@16 [db2,f3,db4]@16 [ab2,ab3,c4,eb4]@16 [db2,f3,db4]@16 [gb3,bb3,db4]@15 ~ [f3,ab3,c4]@8, ~@24 ab3 ~@31 ab3 ~@31 ab3 ~@39]/8", // Ab Db Ab Db Ab Db Gb Fm
  N: "[eb3 [eb3,ab3,c4]@2 f3 eb3 [ab2,ab3,c4,eb4]@2 [gb2,db3,gb3,bb3]@4 [db2,db3,f3,ab3]@2 [eb3,gb3,b3], ~@3 [ab3,c4]@2 ~@9]/7", // Ab Gb Db B Ab
  O: "[[eb3,gb3,bb3] [gb2,db3,gb3,bb3]@4 [db2,db3,f3,ab3]@2 [b3,eb4,gb4]]/4", P: "[bb3,eb4,gb4] [bb3,db4,gb4]",
  Q: "[ab3,db4,f4] [b3,eb4,gb4]", R: "[ab3,db4,f4]/2", S: "[ab2,eb3,c4]/2", T: "[db2,f3,db4]", U: "[eb2,g3,eb4]",
  V: "[f3,ab3,c4]@15 ~", W: "[gb3,ab3,db4]@15 ~", X: "[ab3,bb3,eb4]",
})).s("gm_pad_warm").gain(0.35)

// chords · overdriven guitar
const overdriven_guitar = note("<~@58 A@5 ~@41 B C@2 D ~@28>".pickRestart({
  A: "[~@8 [c3,f3]@16 [db3,gb3]@15 ~ [db3,gb3]@15 ~ [eb3,bb3]@16 ~@8]/5", B: "[c3,f3]", C: "[db3,gb3]@15 ~",
  D: "[eb3,bb3]", // Eb5
})).s("gm_overdriven_guitar").gain(0.35)

// drums · kick
const kick = s("bd").struct("<[x ~ x!3 ~ x ~ x ~ x!3 ~ x ~]!93 [x ~@2 x ~@2 x ~ x ~@2 x ~@4]!39 x ~ x ~>").gain(0.8)

// drums · snare
const snare = s("sd").struct("<A@47 B A@13 B A@30 C A@8 D A@5 E A@3 D A@3 F A@3 D A@3 F A@3 D A@3 F ~@4>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@3 x ~@2 x ~@2 x ~", C: "~@2 x ~ x ~@2 x", D: "~@4 x ~@7 x ~ x!2", E: "~ x!2 ~",
  F: "~@4 x ~@7 x!2 ~@2",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@48 A ~@13 A ~@29 B ~@14 C ~@7 D ~@7 D ~@7 D ~@4>".pickRestart({
  A: "x!2 ~@14", B: "~@11 x ~@4", C: "x ~@3 x ~@2 x", D: "~@7 x",
})).gain(0.64)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@47 A ~@13 A ~@30 A B ~@13 C ~@7 D ~@7 D ~@7 D ~@4>".pickRestart({
  A: "~@6 x!2 ~ x!2 ~ x!2 ~@2", B: "~@4 x!4 ~@8", C: "~@10 x!4 ~@2", D: "~@10 x!2 ~@4",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<~@92 A B ~@3 A ~@3 C ~@9 C ~@3 B ~@3 C ~@3 B ~@3 C ~@3 B ~@4>".pickRestart({
  A: "~@15 x", B: "~ x", C: "~@3 x",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@133 [~@14 x!2] ~@2>").gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@48 A ~@3 A ~@3 A ~ A ~@3 A ~@31 B ~@3 B ~@3 B ~ B ~@2 C B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~ B ~
>`.pickRestart({
  A: "~ x", B: "x", C: "x ~@2 x ~@4",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A@5 B A B A B A@13 B A B A B A B A B A B A@2 B A B A@2 B A@2 B A B@24 C D C D C D C D C A D C D C D C D C A D C D B@42
  ~@2
>`.pickRestart({
  A: "x!8", B: "x!16", C: "x!9 ~ x ~ x ~ x ~", D: "x ~ x ~ x ~ x ~ x!8",
})).gain(0.48)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  A@5 ~ A ~ A ~ A@13 ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A@2 ~ A@2 ~ A ~@24 B C B C B C B C B A C B C B C B C B A C B C ~@44
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~@9 x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x ~@8",
})).gain(0.24)

// drums · bongos
const bongos = s("bongo:4").struct("<~@48 A B@11 C ~ A B@7 C ~@23 B@12 ~@2 B@26 ~@2>".pickRestart({
  A: "~@8 x!2 ~@4 x ~", B: "x!2 ~@4 x ~ x!2 ~@4 x ~", C: "x!2 ~@4 x ~@9",
})).gain(1.26)

// drums · bongos · soft notes
const bongos_soft = s("bongo:4").struct("<~@48 A B@11 C ~ A B@7 C ~@23 B@12 ~@2 B@26 ~@2>".pickRestart({
  A: "~@15 x", B: "~@7 x ~@7 x", C: "~@7 x ~@8",
})).gain(0.63)
// … 17 more lines

More by Mango