Strudelify

Home

Toby Fox

KeyA majorTempo63 bpm
0:00/0:00
// Home — Toby Fox
// 63 bpm, 12/8, 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, 2/4 at bar 3, 4/4 at bar 4, 2/4 at bar 9, ...) are rendered on a constant 12/8 grid of one bar per cycle
// note: pitch bends are ignored
// note: ch 1 "Flute" named as a pipe, played on flute (its distortion guitar patch is not one); ch 2 "Tin Whistle" named as a pipe, played on whistle (its guitar harmonics patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5933822; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 25 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(63/6)

// 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 · glockenspiel
const glockenspiel = note("<~@3 A B C D E F G H I J K L@2 M N O P Q R S T U>".pickRestart({
  A: "e6@3 ~ e7 ~@5 b6 ~@10 a6@3 ~@2 e7 ~@4 e6", B: "~@11 e6@3 ~ a6 ~@4 e7 ~@5 f#7 ~@5",
  C: "e7@3 ~ b6 ~@5 a6 ~@10 e6@3 ~@2 e7 ~@4 b6", D: "~@11 a6@3 ~ e7 ~@4 e6 ~@11",
  E: "e6@3 ~ a6 ~@5 e7 ~@4 f#7 ~@5 e7@3 ~@2 b6 ~@4 a6", F: "~@21 e6@3 ~@3 e7@3 ~ b6", G: "~@11 a6@3 ~@2 e7@3 ~ e6 ~@11",
  H: "e6@3 ~@2 a6@3 ~@2 e7 ~@4 f#7 ~@5 e7@3 ~@3 b6@3 ~ a6", I: "~@11 e6@3 ~@2 e7@3 ~ b6 ~@11",
  J: "a6@3 ~@2 e7@3 ~ e6 ~@10 e6@2 ~@3 a6@2 ~@2 e7 ~@2", K: "~@2 f#7 ~@5 e7@2 ~@2 b6@2 ~@2 a6 ~@9 d6@6",
  L: "[f#6 a6 ~ c#7@3 b6 e7@3 c#7 ~ b6@3 a6@3 g#6 a6 c#7@6 ~@3 d7@6 c#7 ~ b6 b6@3 a6 ~ e7@3 c#7 b6@3 a6@3 g#6 ~ b6 a6@4 ~ g#6 a6 ~]/2",
  M: "g#6 f#6@3 ~@25 e6@3", N: "~@2 e7@3 ~@2 b6@3 ~@7 a6@3 ~@2 e7@3 ~@2 e6@3 ~@2",
  O: "~@5 e6@3 ~@2 a6@3 ~@2 e7@3 ~@2 f#7@3 ~@2 e7@3 ~@2 b6@2", P: "~@3 a6@3 ~@7 e6@3 ~@3 e7@3 ~@2 b6@3 ~@5",
  Q: "~@2 a6@3 ~@2 e7@3 ~@2 e6@3 ~@7 e6@3 ~@2 a6@3 ~@2", R: "e7@3 ~@2 f#7@3 ~@2 e7@3 ~@2 b6@3 ~@2 a6@3 ~@7 e6@2",
  S: "~@3 e7@3 ~@2 b6@3 ~@7 a6@3 ~@2 e7@3 ~@2 e6@3 ~", T: "~@6 e6@3 ~@2 a6@3 ~@3 e7@3 ~@2 f#7@3 ~@2 e7@3 ~@2",
  U: "b6@3 ~@2 a6@3 ~@24",
})).s("gm_glockenspiel").gain(0.45)

// chords · flute
const flute = note("<~@5 A@2 B@2 ~@4 C D@2 E ~@2 F@6>".pickRestart({
  A: "[~@23 e3 a3@2 b3@2 e3 a3@2 b3@3 e3 ~ e4@3 e3 a3@2 ~@2 e3 a3@2 b3@3 e3 ~ b3@3 e3 a3 e3 e4@6, ~@21 a4@4 ~ e4@5 g#4@11 ~ a4@4 g#4@5 f#4@11 ~, ~@35 a3@2 ~@5 b3@3 ~@6 a3@2 ~@11]/2",
  B: "[~@2 e3 ~ b3@3 e3 a3@2 b3@2 e3 a3@2 e4@3 e3 ~@4 e3 a3@2 b3@2 d3 b3@2 a3@3 e3 a3 a2@14 ~ e3 [a2,d#3] d3@3 ~@8, a4@3 a3@2 ~@14 a3@2 c5@4 ~ b4@5 a4@16 ~@17, ~@4 e4@5 ~ g#4@5 b4@5 b3@3 ~@13 e3 ~@27]/2", // Adim
  C: "~@13 d3@3",
  D: "[f#3 a3 ~ c#4@3 b3 e4@3 c#4 ~ b3@3 a3@3 g#3 a3 c#4@6 ~@3 d4@6 c#4 ~ b3 b3@3 a3 ~ e4@3 c#4 b3@3 a3@3 g#3 ~ b3 a3@4 ~ g#3 a3 ~, ~@7 d#4 ~@35 d#4 ~@20]/2",
  E: "g#3 ~@31",
  F: "[~@15 e3@2 a3 ~@2 e3@2 a3 ~@2 e3@2 a3 e4@2 e3@2 a3 ~@2 e3@2 a3 ~@2 e3@2 a3 ~@2 e3@2 a3 e3 e4@3 ~@3 e3@2 a3 ~@4 a3 ~@4 a3 ~@4 a3 b3!2 ~@2 a3 ~@4 a3 ~@4 a3 e3 e4@3 ~@5 a3 ~@3 e3@2 a3 b3@2 e3@2 a3 e4@2 e3@2 a3 b3@2 e3@2 a3 b3@2 e3@2 a3 b3@2 e3@2 a3 e4@3 ~@4 e3@2 a3 b3@2 e3@2 a3 ~@2 e3@2 a3 ~@2 e3@2 a3 b3 ~ e3@2 a3 ~@2 d3@2 b3@2 ~ e3@2 a3 e3 a2@18 ~@4, ~@13 a4@5 b3@2 ~@3 b3@2 ~@8 b3@2 ~@3 b3@2 ~@3 b3@2 ~@13 b3@2 ~ e3@2 b3@2 ~ e3@2 e4@2 ~ e3@2 ~@3 e3@2 b3@2 ~ e3@2 b3@2 ~ e3@2 ~@8 e3@2 b3@2 ~@29 e3 ~@15 g#4@5 b4@5 c5@5 b4@5 a4@21 ~@6, ~@19 e4@5 g#4@10 a4@5 g#4@5 f#4@10 a4@5 e4@5 g#4@5 b4@5 a4@5 b4@5 c5@10 a4@5 e4@5 g#4@10 a4@5 g#4@5 f#4@10 a4@5 e4@5 b3@2 ~@3 e4@2 ~@8 b3@2 ~@4 a3@2 ~@25]/6",
})).s("gm_flute").gain(0.27)

// chords · electric guitar jazz · "Acoustic Guitar"
const electric_guitar_jazz = note("<A B C D@2 E F G@2 ~@4 H I J K@8 L>".pickRestart({
  A: "~@2 e3 ~ b3 ~@2 e3 a3@2 b3 ~ e3 a3@2 e4 ~@2 e3 ~ b3 ~@2 e3 a3@2 b3 ~ e3 a3@2 b3, a2@5 ~@6 c#3@5 ~@5 c3@5 ~@6, ~@3 a3@2 ~@14 a3@2 ~@11",
  B: "~@2 e3 a3 e4@6 ~@2 e3 a3@2 b3 ~@2 e3 ~ b3 ~@2 e3 a3@2 e4 ~ e3 a3@2 b3, ~@4 e3 ~@6 a2@5 ~@3 a3@2 c#3@5 ~@6",
  C: "~@2 e3 ~ b3 ~@2 e3 a3@2 b3 ~ e3 a3 e3 e4@12 ~@5, c3@5 ~@27, ~@3 a3@2 ~@27",
  D: "[~@2 e3 ~ b3@3 e3 a3@2 b3 ~ e3 a3@2 e4@3 e3 ~ b3 ~@2 e3 a3@2 b3@2 e3 a3@2 b3@3 e3 a3 e4@6 ~@2 e3 a3@2 b3@3 e3 ~ b3 ~@2 e3 a3@2 e4@2 e3 a3@2 b3, a2@11 c#3@11 ~@14 e3 ~@14 a3@2 c#3@11, ~@3 a3@2 ~@14 a3@2 c3@21 ~ a2@11 ~@10]/2",
  E: "~@2 e3 ~ b3@3 e3 a3@2 b3@2 e3 a3 e3 e4@4 ~@4 e3 a3@2 b3@2 e3 a3@2 b3, c3@21 a2@11, ~@3 a3@2 ~@27",
  F: "~@2 e3 ~ e4@3 e3 a3@2 b3 ~ e3 a3@2 b3@3 e3 ~ b3@3 e3 a3 e3 e4@6, c#3@11 c3@21, ~@3 a3@2 ~@14 a3@2 ~@11",
  G: "[~@2 e3 ~ b3@3 e3 a3@2 b3 ~ e3 a3@2 e4@3 e3 ~ b3 ~@2 e3 a3@2 ~@2 d3 b3@2 a3@3 e3 a3 a2@17 ~@11, a2@11 c#3@11 ~@4 b3@3 ~@7 e3 ~@27, ~@3 a3@2 ~@14 a3@2 c3@5 ~ b2@4 a2@5 ~@28]/2",
  H: "~@26 [d3,f#3,c#4]!2 ~ [d3,f#3,c#4] ~@2", // Dmaj7
  I: "~@3 [e3,g#3,b3]!2 ~ [e3,g#3,b3] ~@5 [g#3,b3,c#4,f4]!2 ~ [g#3,b3,c#4,f4] ~@4 [a3,c#4,f#4] ~ [a3,c#4,f#4]!2 ~ [a3,c#4,e4]!2 ~ [a3,c#4,e4] [d3,f#3,c#4] ~ [d3,f#3,c#4]", // E C#7 F#m A Dmaj7
  J: "[d3,f#3,c#4] ~@5 [e3,g#3,b3] ~ [e3,g#3,b3]!2 ~@5 [g#3,b3,c#4,f4] ~ [g#3,b3,c#4,f4]!2 ~@5 [a3,c#4,f#4] ~ [a3,c#4,f#4]!2 ~ [a3,c#4,e4]!2 ~", // Dmaj7 E C#7 F#m A
  K: "[[a3,c#4,e4] [a3,b3,d#4] ~ [a3,b3,d#4]!2 ~ [a3,b3,d#4] ~@5 c#4@2 [b3,c#4]@2 a3@2 ~ f3@3 f2 [a2,d3] f3@2 ~ b2@2 ~@3 a3 b3@2 ~@2 a3 ~@4 a3 e4@2 ~@2 a3 ~@4 a3 b3@2 ~@2 a3 b3@2 ~@2 a3 e3 e4@3 ~@4 e3@2 a3 b3@2 e3@2 a3 b3@2 e3@2 a3 e4@2 e3@2 a3 b3@2 e3@2 a3 b3@2 e3@2 a3 b3@2 e3@2 a3 e4@3 ~@4 e3@2 a3 b3@2 e3@2 a3 ~@2 e3@2 a3 e4@2 e3@2 a3 ~@2 e3@2 a3 b3@2 e3@2 a3 b3@2 e3@2 a3 e3 e4@3 ~@3 e3@2 a3 b3@2 ~@2 a3 ~@4 a3 e4@2 ~@2 a3 b3!2 ~@2 a3 b3@2 ~@2 a3 b3@2 ~@2 a3 e3 e4@3 ~@5 a3 b3@2 ~ e3@2 a3 b3@2 e3@2 a3 e4@2 e3@2 a3 b3@2 e3@2 a3 b3@2 e3@2 a3 b3@2 e3@2 a3 e4@3 ~@4 e3@2 a3 b3@2 e3@2 a3 ~@2 e3@2 a3 e4@2 e3@2 a3 b3 ~ e3@2 a3 b3, ~@18 f#3@2 ~@6 d3@2 ~ a2@10 c#3@10 c3@20 a2@10 ~@25 e3 ~@14 b3@2 ~@8 b3@2 ~@26 e3@2 b3@2 ~ e3@2 ~@3 e3@2 ~@3 e3@2 ~@3 e3@2 ~@3 e3@2 ~@8 e3@2 ~@6 c#3@10 c3@20 a2@10 ~ c#3@10 c3@5, ~@31 e3@2 ~@3 e3@2 b3@2 ~ e3@2 ~@3 e3@2 b3@2 ~ e3@2 ~@3 e3@2 ~@3 e3@2 ~@16 c#3@10 c3@20 a2@10 ~ c#3@10 c3@20 a2@10 c#3@10 c3@20 a2@10 ~@25 e3 ~@14 b3@2 ~@14]/8", // A B7 Bsus2 D5
  L: "~ d3@2 b3@2 ~ e3@2 a3 e3 a2@18 ~@4, b2@5 a2@5 ~@22, ~@5 a3@2 ~@25",
})).s("gm_electric_guitar_jazz").gain(0.48)

// chords · piano · "Honky Tonk Piano"
const piano = note("<~@7 A@2 B C D@2 E F@2 G@2 ~ H I J K L M>".pickRestart({
  A: "[~@21 c3@5 ~ b2@4 a2@9 ~@2 c3 ~ e3 a3@2 c#4 b3@2 a3 e3 [a2,d#3] d3@3 a3@3 d3@2 a3@3, ~@43 c#3@2 ~@19]/2", // Adim
  B: "d3@3 a3@2 d3@2 a3@3 c#3@3 a3@3 c#3@3 a3@2 c3@3 g3@3 ~ g3@4, ~@27 c3@2 ~@3",
  C: "b2@2 c#4 ~ a4 [b2,c#5]@3 [f#3,a4]@2 e5 ~ e5 [b3,c#5]@3 [e3,b4]@2 [b4,c#5] ~@2 b4@3 [c#4,c#5]@3 ~ c#5 a4@2 f4, ~@3 [f#3,e4]@3 ~@5 e3@3 ~@4 b3@2 f3@4 ~@3 [f3,e5]@2 ~@3, ~@19 a4@3 ~@6 c#4@4", // Bsus2 F#m Bsus2 E5 Bsus2 C# F#7 Fmaj7
  D: "[g#4@2 f#4 g#4@2 a4@3 e4@3 [d3,d4]@2 [f#3,a3]@3 d3@3 [f#3,a3]@2 d3@3 [f#3,a3]@3 ~ [f#3,a3]@3 c#3@3 ~ [e3,a3]@2 c#3@2 ~ [e3,a3]@2 c3@2 ~ [e3,g3]@2 c3 ~ [e3,g3]@3 b2@2 ~@2 [e4,a4] [b2,c#5]@2 ~ [e3,f#3,a4]@2 e3@2, [f#3,a3,c#4]@5 [e3,g#3,b3]@5 ~@17 d3@2 ~@25 c#4@2 ~@6 e5 ~, ~@55 [e3,f#3]@2 ~@7]/2", // D F#m A5 Em A5 Bsus2 F#m7 F#m …
  E: "e5 c#5 ~ [e3,b4] [g#3,b3]@2 a4 ~ b4@2 [g#3,c#4,c#5]@2 [f3,f5] ~ c#5 a4 f4 [f#3,a3,c#4]@3 f#4 [e3,g#3,b3]@3 e4 ~ [d3,f#3,a3]!2 ~ [d3,f#3,a3] ~@2, [g#3,b3]@2 ~@2 c#5 ~@2 f3@3 ~@4 [g#3,c#4]@3 g#4 ~@3 a4 ~@4 d4@6", // E5 G#m C#5 F F#m E D G#m …
  F: "[f#4 a4 ~ [d3,e3,g#3]!2 ~ [d3,e3,g#3,b4] e5@2 ~ c#5 ~ [c#3,f3,g#3]!2 ~ [c#3,f3,g#3] ~@2 g#4 a4 [c#3,e3,f#3,b4,c5] ~ [c#3,e3,f#3]!2 ~ [c#3,e3]!2 ~ [c#3,e3] [d3,f#3,a3] ~ [d3,f#3,a3] [d3,f#3,a3] ~@2 c#5 ~ b4 [d3,e3,g#3] ~ [d3,e3,g#3] [d3,e3,g#3,a4] ~ e5@2 ~ c#5 [c#3,f3,g#3] ~ [c#3,f3,g#3]!2 ~@2 g#4 ~ b4 [c#3,e3,f#3] ~ [c#3,e3,f#3]!2 ~ [c#3,e3,g#4] [c#3,e3,a4] ~, ~@3 c#5@3 ~ d#5 ~@4 b4@3 a4@3 ~@2 c#5@8 ~ d5@6 ~@3 b4@2 ~@3 d#5 ~@3 b4@2 ~ a4@3 ~@3 a4@4 ~@4]/2", // E7 C# F#7 C#m D E7 Dsus2 C# …
  G: "[[c#3,e3,g#4] [b2,d#3] ~ [b2,d#3]!2 ~ [b2,d#3] [f#3,b3] ~ [a3,c#4] [b3,d4]@4 [c#4,e4]@4 ~ [d4,f4]@5 [e4,g4]@5 [e4,a4,c#5]@19 ~@16, ~ [d#4,f#4]@6 ~@57]/2", // C#m B B5 A Bm C#m Dm Em …
  H: "~@15 e5 f#5 e5 a4 ~ e5 f#5 e5 a4 ~ e5 f#5 e5 a5 g#5 [e5,f#5] c#5", // Esus2
  I: "b4 a4!2 [b4,c#5] d5 e5 g#5 a5 f#5 ~ e5@2 [b4,c5] b4 ~ a4 ~ a4 [e4,f#4] f#4 c#4 a3!2 [e4,a4] g#4 f#4 a4 g#4 b4 c#5 [d5,e5] g#5", // Bsus2 Cmaj7 Esus2 A5 Dsus2
  J: "a5 g#5 f#5 [c#5,e5] a4!2 g#4 f#4 [c#4,e4] e4 f#4 e4 a4 a3 ~ f#4 e4 a4 a3 ~ f#4 e4 a4 [e4,b4] e4 c5 e4 b4 [e4,a4] e4 ~@2", // C#m E5 A5
  K: "~ e4 a4 c#5@2 ~@3 g#4@2 ~ a4 ~ a4@2 e4@2 c#4 a3 ~ f#4@2 ~ e4@2 a3@2 b3 e4@2 a3@2, a3@2 ~@5 a4@2 ~@3 b4@2 ~@9 d4 ~@4 f#4 ~@3",
  L: "~ e4@2 ~@5 a3@2 e4 c#5@2 ~@2 a4@2 g#4@2 a4 b4@2 ~ e4@2 c#4 a3 ~ e4@2 a4@2, b3@2 ~@9 a4 ~@10 a4@2 ~@3 c4@2 ~@3",
  M: "~ a4@2 g#4 e4 ~ e4@2 c#4 e4 a3@17 ~@5, b3@2 ~@3 a4@2 ~@25",
})).s("gm_piano").gain(0.44)

// chords · pad warm · "Warm Synthesizer"
const pad_warm = note("<~ A B C D E F G H ~@2 I J@4 K@5 L@3 M>".pickRestart({
  A: "~@11 a4@10 g#4@5 ~ b4@5", B: "c5 ~", C: "e4@5 e5@5 ~ b4@10 a4@5 ~ e5@5", D: "e4@11 e4@5 a4@5 e5@5 ~ f#5@5",
  E: "e5@5 b4@5 ~ a4@5 ~@5 e4@5 ~ e5@5", F: "b4@11 a4@5 e5@5 e4@11", G: "e4@5 a4@5 ~ e5@5 f#5@5 e5@5 ~ b4@5",
  H: "a4@21 ~@11", I: "~@11 [d4,e4,f#4,a4]@21",
  J: "[[c#4,e4,f#4,a4]@10 [c4,e4,f#4,a4]@10 [b3,e4,f#4,a4]@10 [e4,f#4,g#4,b4]@9 ~ [f3,f4,g#4,c#5]@9 [f#2,f#3]@4 [g#2,g#3]@4 ~ [f#4,a4,d5]!2 ~ [f#4,a4,d5] ~@5 [f#4,b4,e5]!2 ~ [f#4,b4,e5] ~@5 [f4,b4,f5]!2 ~ [f4,b4,f5] ~@4 [f#4,c#5,f#5] ~ [f#4,c#5,f#5]!2 ~ [e4,c#5,e5]!2 ~ [e4,c#5,e5] [f#4,a4,d5] ~ [f#4,a4,d5] [f#4,a4,d5] ~@5 [f#4,b4,e5] ~ [f#4,b4,e5]!2 ~@5 [f4,b4,f5] ~ [f4,b4,f5]!2 ~@5 [f#4,c#5,f#5] ~ [f#4,c#5,f#5]!2 ~ [e4,c#5,e5]!2 ~, ~@49 [a4,c#5,f#5]@9 [a2,a3]@9 [g#2,g#3]@9 [f2,f3]@8 [f#2,f#3]@9 [a2,a3]@9 [g#2,g#3]@9 [f2,f3]@9 [f#2,f#3]@8]/4", // F#m7 F#m7b5 Bsus4 E C# F# G# D …
  K: "[[e4,c#5,e5] [d#4,c#5,d#5] ~ [d#4,c#5,d#5]!2 ~ [d#4,c#5,d#5] ~@22 e4@5 e5@5 b4@10 a4@5 e5@5 e4@10 e4@5 a4@5 e5@5 f#5@5 e5@5 b4@5 a4@10 e4@5 ~ e5@5 b4@10 a4@5 e5@5 e4@10 e4@5 a4@5, ~ b2@6 ~@153]/5", // C#m D#7
  L: "[e5@5 f#5@5 e5@5 b4@5 a4@10 e4@5 e5@5 b4@10 a4@5 e5@5 e4@10 e4@5 a4@5 ~ e5@5 f#5@5 e5@5]/3", M: "b4@5 a4@23 ~@4",
})).s("gm_pad_warm").gain(0.35)

// bass · electric bass finger · "Electric Bass"
const bass = note("<~@11 A B@2 C D E@5 F@3 G>".pickRestart({
  A: "~@11 d2@21",
  B: "[c#2@10 c2@10 b1@6 ~@2 d2@2 e2@9 ~ f2@9 f#2@4 e2@3 a1 [a1,a#1,b1,c2] [c#2,d2] d2 ~ d2 ~@2, ~@27 c#2@2 ~@35]/2", // Dmaj7
  C: "~@3 e2!2 ~ e2 ~@5 f2!2 ~ f2 ~@4 f#2 ~ f#2!2 ~ e2!2 ~ e2 d2 ~ d2",
  D: "d2 ~@5 e2 ~ e2!2 ~@5 f2 ~ f2!2 ~@5 f#2 ~ f#2!2 ~ e2!2 ~",
  E: "[e2 b1 ~ f#2 c#3 ~ b2 b1 ~ c#2 d2@4 e2@5 f2@5 g2@5 a2@10 c#2@10 c2@20 a1@10 c#2@10 c2@20 a2@10 ~ c#2@10 c2@20 a1@10]/5",
  F: "[c#2@10 c2@20 a2@10 c#2@10 c2@20 a1@10 ~ c#2@10 c2@5]/3", G: "b1@5 a1@23 ~@4",
})).s("gm_electric_bass_finger").gain(0.45)

// bass · electric bass finger · "Electric Bass" · soft notes
const bass_soft = note("<~@3 A@2 B C D@2 ~@16>".pickRestart({
  A: "[a1@11 c#2@10 c2@21 ~ a1@10 c#2@11]/2", B: "c2@16 ~@5 a1@11", C: "c#2@11 c2@21",
  D: "[a1@11 c#2@10 c2@5 ~ b1@4 a1@22 ~@11]/2",
})).s("gm_electric_bass_finger").gain(0.25)

// drums · kick
const kick = s("bd").struct("<~@11 A B C D E F G H I J K L M N>".pickRestart({
  A: "~@21 x ~ x ~ x ~@6", B: "x ~@2 x ~@6 x ~ x ~ x ~@5 x ~@3 x ~@5 x ~",
  C: "x!2 ~@6 x ~@2 x ~@2 x ~@2 x!2 ~ x ~@5 x ~ x ~ x ~", D: "~@2 x!2 ~ x!5 ~ x!2 ~ x!3 ~@3 x!11 ~",
  E: "x!2 ~@4 x!2 ~ x!2 ~ x!2 ~ x ~@2 x!2 ~@4 x!8", F: "x!2 ~ x!2 ~ x ~@3 x ~@3 x ~@4 x ~@4 x ~@4 x ~@2",
  G: "~@7 x ~@3 x ~@2 x ~@2 x ~@9 x ~@3 x", H: "~@2 x ~@2 x ~@9 x ~@4 x ~ x ~@2 x ~@6",
  I: "~@3 x ~@4 x ~ x ~@2 x ~@10 x ~@3 x ~ x ~", J: "~ x ~@4 x ~ x!2 ~ x ~@4",
  K: "x ~@3 x ~@2 x ~@2 x ~@9 x ~@3 x ~@2 x ~@2 x ~", L: "~@8 x ~@4 x ~ x ~@2 x ~@9 x ~@3",
  M: "~ x ~ x ~@2 x ~@10 x ~@3 x ~ x ~@3 x ~@3 x", N: "~ x ~@2 x!2 ~@26",
})).gain(0.48)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@3 A B C B A D E@2 F ~@13>".pickRestart({
  A: "x ~@10 x ~@3 x ~@2 x ~@2 x ~@10", B: "x ~@3 x ~@2 x ~@3 x ~@9 x ~@4 x ~ x ~@3", C: "x ~@10 x ~@3 x ~@5 x ~@10",
  D: "x ~@3 x ~@2 x ~@3 x ~@3 x ~@2 x ~ x!2 ~@10", E: "x ~@10 x ~@9 x ~@10", F: "x ~@10 x ~@2 x ~@17",
})).gain(0.32)

// drums · rim
const rim = s("rim").struct("<[~@5 x ~@10 x ~ x ~@8 x ~@4] [~@5 x ~ x ~@2 x ~@5 x ~@9 x!3 ~@3] [~@5 x ~@26] ~@22>")
  .gain(0.24)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@2 [~@29 x ~ x] [~@5 x ~@10 x ~@10 x ~@4]!8 [~@5 x ~@10 x ~@15] ~@13>").gain(0.32)

// drums · clap
const clap = s("cp").struct(`<
  ~@12
  [~@5 x ~ x ~ x!2 ~ x ~ x!2 ~ x ~ x!2 ~ x ~ x!2 ~ x!2 ~ x ~]
  [x!2 ~ x!2 ~ x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!4 ~@3 x ~]
  [~@7 x ~@8 x ~@8 x ~@6]
  [~@2 x ~@8 x ~@8 x ~@8 x ~@2]
  ~@9
>`).gain(0.32)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@11 [~@11 x!2 ~ x ~ x ~ x ~ x!2 ~ x ~ x ~ x!2 ~ x ~] [x ~ x!2 ~@28] ~@12>")
  .gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@5 [~@5 x ~@2] ~@19>").gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@5 [~@18 x!2 ~@12] ~@19>").gain(0.32)

// drums · high tom
const high_tom = s("ht").struct("<~@5 [~@17 x ~@14] ~@19>").gain(0.32)

// drums · crash
const crash = s("cr").struct("<~@13 A B C D ~ E F G H ~ I E>".pickRestart({
  A: "~@19 x ~@3 x ~@2 x ~@3 x ~", B: "~@3 x ~@3 x ~@4 x ~@3 x ~@3 x ~ x ~@2 x!2 ~ x!2 ~@2",
  C: "~@2 x ~@3 x ~@4 x ~@3 x ~@4 x ~@3 x ~ x ~@2 x!2 ~", D: "x!2 ~@22 x ~@4 x ~@2", E: "~@5 x ~@26", F: "~@13 x ~@18",
  G: "~@11 x ~@4", H: "~@15 x", I: "~@3 x ~@12",
})).gain(0.64)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<[~@3 x ~@9 x ~@10 x ~@7] [~@13 x ~@10 x ~@7] [~@3 x ~@28] x ~ [~@21 x ~@10] ~@19>")
  .gain(0.24)

// drums · cowbell
const cowbell = s("cb").struct("<~@14 [~@23 x!2 ~@7] [~@27 x!5] [~@3 x ~@12] ~@8>").gain(0.64)

stack(
  glockenspiel, flute, electric_guitar_jazz, piano, pad_warm, bass, bass_soft, kick, kick_soft, rim, snare, snare_soft,
  clap, clap_soft, low_tom, mid_tom, high_tom, crash, crash_soft, cowbell
)

More by Toby Fox