Strudelify

Unchained Melody

LeAnn Rimes

KeyB majorTempo54 bpm
0:00/0:00
// Unchained Melody — LeAnn Rimes
// 54 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 61 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(54/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.

// chords · string ensemble 1 · "strings"
const string_ensemble_1 = note("<~@9 A@4 B C@4 D@2 E@8 F@4 G@4 H@6 I@6 J@8 K@4 ~>".pickRestart({
  A: "[~@25 c#4@7 b3@24 ~ c#4@7 b3@23 ~ c#4@8 [e3,b3]@32, f#3@65 ~@63, ~@16 a#3@16 ~@32 g#3@63 ~]/4", // E5
  B: "~@2 d#4 c#4, [f#3,a#3]", // F#
  C: "[d#4@2 ~ c#4 ~@2 d#4@2 ~@4 f#4@2 a#4@2, b3@33 ~@31, ~@16 f#3@15 ~ g#3@32 [a#3,c#4]@64]/4", // A#m
  D: "[~@7 c#5, [d#4,b4]@31 ~ [c#4,a#4]@32, ~@16 f#4@47 ~]/2", // G#m F#
  E: "[[g#4,b4]@31 f#4@31 ~@24 b4@8 [c#4,a#4]@29 ~@50 b3@15 f#5 g#5 ~ f#5 g#5 f#5 ~ g#5 f#5 g#5 ~ f#5 g#5 f#5 ~ g#5!2 a#5 g#5 ~ a#5 g#5 a#5 ~ g#5 a#5 g#5 ~ a#5 g#5 a#5 ~ f#5 g#5 f#5 g#5 ~ f#5 g#5 f#5 ~ g#5 f#5 g#5 ~ f#5 g#5 e5 ~ f#5 e5 f#5 e5 ~ f#5 e5 f#5 ~ e5 f#5 e5 ~ f#5!2 g#5 ~ f#5 g#5, d#4@61 ~@2 [e4,g#4]@31 f#4@76 ~@34 [f#4,a#4]@16 ~@15 [d4,f#4]@17 ~@4, ~@31 a#4@26 ~@66 b4@82 ~@51, ~@126 d#4@62 [e4,g#4]@17 ~@15 [e4,g#4]@16 ~@15 [e4,g#4]@5]/8", // G#m F# E F# D E
  F: "[f#5 ~ g#5 f#5 g#5 f#5 ~ g#5 f#5 g#5 ~ g#5 a#5 g#5 ~ a#5 g#5 a#5 ~ g#5 a#5 g#5 a#5 ~ g#5 a#5 [d#5,f#5,d#6]@32 e5 f#5 e5 ~ f#5 e5 f#5@2 e5 f#5 e5 ~ f#5 e5 f#5 ~ g#5 a#5 g#5 a#5 ~ g#5 a#5 g#5 ~ a#5 g#5 a#5 ~ g#5 a#5 f#5 ~ g#5 f#5 g#5 f#5 ~ g#5 f#5 g#5 ~ f#5 g#5 f#5 ~ g#5 e5 f#5 ~ e5 f#5 e5 f#5 ~ e5 f#5 e5 ~ f#5 e5 f#5 ~ f#5 g#5 f#5 ~ g#5 f#5 g#5, ~@11 f#4@47 [e4,g#4]@17 ~@14 [e4,g#4]@17 ~@15 [e4,g#4]@7, ~@11 a#4@16 ~@47 [f#4,a#4]@16 ~@15 [d4,f#4]@16 ~@7]/4", // D#m E F# D
  G: "[f#5 ~ g#5 f#5 g#5 ~ f#5 g#5!2 ~ a#5 g#5 a#5 ~ g#5 a#5 g#5 ~ a#5 g#5 a#5 g#5 ~ a#5 d#6@29 ~@2 f#3@16 ~@8 f#4@8 ~@23 g#4@8 e3@8 b3@2, ~@8 f#4@71 ~@24 d#4@16 ~@9, ~@8 a#4@16 [d#5,f#5]@31 b3@63 ~@10, ~@54 b4@3 ~@14 d#4@16 g#3@41]/4", // D#m
  H: "[~@14 g#4@8 ~@8 c#4@7 d#4@8 c#4@8 ~@16 f#4@8 b4@8 ~@15 b4@8 g#4@8 ~@8 c#4@8 ~@7 c#4@9 ~@16 a#4@7 f#4@8 ~@7 d#4@6, ~@6 e4@17 f#3@46 ~@16 g#3@31 f#3@64 ~@12, ~@23 a#3@24 ~@6 b3@60 ~@3 a#3@23 ~@9 a#3@16 ~@15 b3@13, ~@61 d#4@39 ~@55 c#4@25 ~@12, ~@92 g#4@16 ~@24 f#4@23 ~@37]/6",
  I: "[~@10 b4@8 ~@24 g#4@8 ~@23 b4@8 ~@8 c#4@8 d#4@8 c#4@8 ~@23 d#5@7 ~ g#3@16 b4@16 [a#4,f#5]@16, ~@2 f#4@16 g#3@64 ~@39 d#4@23 [d#4,g#4]@33 ~@15, ~@26 b3@59 ~@20 f#4@24 ~@63, ~@34 d#4@15 ~ e3@15 g#4@16 a#3@29 ~@3 b3@45 ~@34, ~@57 e4@24 f#3@32 ~@15 b4@24 ~@40]/6", // D#m G#5
  J: "[~@15 a#5@16 c#6@15 [b4,d#6]@31 ~ f#4@15 [a#4,a#5]@16 ~ g#4@29 ~@17 f#5@16 g#5@16 [e5,b5]@15 [c#5,a#5]@16 [f#5,c#6]@16 [d#5,d#6]@12 ~ [c#5,c#6]@3 [b4,b5]@5, ~@15 f#4@31 ~@32 c#6@31 d#5@58 ~@68 f#5@21, ~@31 f#5@81 ~@28 [d#4,a#5]@32 [e4,b4]@31 f#4@31 ~@22, ~@109 b5@30 ~@117]/8", // B A# E5 F# F#5 D# C# B …
  K: "[~@3 f#4@7 [a#4,a#5]@7 [g#4,g#5]@8 ~ [g4,g5]@8 g#4@8 ~@8 c#5@9 g6@10 g6@14 [f#5,d#6,f#6]@36 ~@9, ~@2 [c#5,c#6]@8 d#5@29 ~@3 [b4,g#6]@17 e6@27 ~@42, ~@10 d#4@22 ~@2 g#5@25 g5@10 e5@12 ~@47, ~@49 c#6@10 b4@67 ~@2, ~@69 b6@39 ~@20]/4", // A# G# G D#m C# E
})).s("gm_string_ensemble_1").gain(0.2).pan(0.7)

// bass · electric bass finger · "bass"
const bass = note("<~@2 A B C D A B E D A B F D A B G D H I J@8 K@8 L M N O P Q R S T U V W X@8 Y Z@3 ~>".pickRestart({
  A: "b1@13 f#1@3 b1@8 a#1@8", B: "g#1@13 d#2@3 g#1@12 ~ g#1@3", C: "e1@12 ~ e1 ~@2 e1@8 b1@8",
  D: "f#1@12 ~ f#1@3 g#1@8 a#1@8", E: "f#1@12 ~ f#1 ~@2 f#1@13 c#2@3", F: "e1@15 ~ e1@8 g#1@8",
  G: "f#1@14 ~@2 f#1@13 c#2@3", H: "b1@13 f#1@3 b1@12 ~ b1@3", I: "f#1@13 c#2@3 f#1@12 ~ f#1@3",
  J: "[g#1@13 d#2@2 g#1@11 ~@2 g#1@3 d#1@13 a#1@3 d#1@11 ~@2 d#1@2 e1@13 ~ b1@2 e1@12 ~ e1@3 f#1@11 ~@2 f#1@3 g#1@7 a#1@8 b1@14 ~@2 b1@13 f#1@3 b1@12 ~ b1@2 c#2@8 d#1@8 e1@12 ~ e1@3 f#1@12 ~ f#1@3 e1@11 ~@2 e1@2 d2@11 ~@2 d2@3 e1@5]/8",
  K: "[~@8 e1@3 f#1@12 ~ f#1@2 b1@12 ~ b1@2 ~ c#2@8 d#1@8 e1@12 ~ e1@3 f#1@11 ~@2 f#1@2 e1@12 ~ e1@3 d2@11 ~@2 d2@3 e1@12 ~ e1@2 f#1@12 ~ f#1@2 ~ b1@16 b1@8 f#1@8 b1@15 b1@8 a#1@8 g#1@14 ~@2 g#1@7 f#1@8 e1@10]/8",
  L: "~@3 e1 ~@2 e1@12 ~ e1@3 f#1@10", M: "~@3 f#1@2 g#1@8 a#1@7 ~ b1@11", N: "~@2 f#1@3 b1@8 a#1@8 g#1@11",
  O: "~@2 d#2@2 g#1@12 ~ g#1@3 f#1@12", P: "~@4 f#1@13 c#2@2 f#1@12 ~", Q: "f#1@3 g#1@8 a#1@8 b1@13",
  R: "~@3 b1@7 a#1@8 g#1@14", S: "~@2 g#1@11 ~@2 g#1@3 e1@12 ~ e1", T: "~ e1@8 b1@8 f#1@12 ~ f#1@2",
  U: "~ g#1@8 a#1@7 b1@13 ~ f#1@2", V: "b1@8 a#1@8 g#1@13 d#2@2 ~",
  W: "g#1@12 ~ g#1@2 f#1 ~@2 f#1 ~@2 f#1 ~ f#1 ~@2 f#1 ~ f#1 ~@2 f#1",
  X: "[~@2 f#1 ~ f#1 ~@2 f#1 ~@2 f#1 ~ f#1 ~@2 f#1 ~ f#1 ~@2 f#1 ~@2 f#1 ~ f#1 ~@2 f#1@2 g#1@8 a#1@8 b1@13 f#1@3 b1@12 ~ b1@3 f#1@12 ~ c#2@2 f#1@11 f#1@2 g1@3 g#1@13 d#2@3 g#1@11 ~@2 g#1@2 d#1@13 ~ a#1@2 d#2@8 d#1@8 e1@12 ~ b1@3 e1@12 ~ e1@2 f#1@12 ~ f#1@3 g#1@8 a#1@8 b1@14 ~ b1@6]/8",
  Y: "~@2 a#1@8 g#1@13 ~@3 g#1@6",
  Z: "[~@2 f#1@8 e1@2 g#1@3 b1@3 e1@3 g#1@3 b1@3 e1@4 g1@3 b1@3 e1@5 f#1@5 g1@5 b1@25 ~@9 b1@4 ~@6]/3",
})).s("gm_electric_bass_finger").gain(0.14)

// chords · epiano2 · "piano1"
const epiano2 = note("<A@2 B C D@5 E@8 F@8 G H I@8 J K@8 L@4 ~@13>".pickRestart({
  A: "[~@61 d#4@3, ~@3 d#4@10 d#4@5 ~ d#4@10 d#4@5 ~ d#4@10 d#4@5 ~ d#4@10 ~@3, ~@5 f#4@5 ~ f#4@10 f#4@5 ~ f#4@10 f#4@5 ~ f#4@10 f#4@5 ~ f#4@5, ~ b4@2 b4@2 b4@2 b4, ~ b3 b3!2]/2",
  B: "~@29 d#4@3, b3!2, ~@3 d#4@10 d#4@5 ~ d#4@10 ~@3, ~@5 f#4@5 ~ f#4@10 f#4@5 ~ f#4@5, ~ b4@2 b4",
  C: "~@29 b3@3, g#3!2, ~@3 b3@10 b3@5 ~ b3@10 ~@3, ~@5 d#4@5 ~ d#4@10 d#4@5 ~ d#4@5, ~ g#4@2 g#4",
  D: "[~@157 a#3@3, e3@16 e3@29 c#5@6 a#3@40 c#5@29 g#4@3 b4@2 g#3@3 f#3@3 a#3@2 c#4@3 f#4@3 c#4@2 a#3@3 f#3@3 a#3@2 c#4@3 f#4@3 c#4@5, ~@3 g#3@10 g#3@5 ~ g#3@10 g#3@24 c#4@3 e5@37 f#4@24 d#4@43, ~@5 b3@5 ~ b3@10 b3@5 ~ b3@5 f#3@3 a#3@2 c#4@3 f#4@3 a#4@13 f#4@3 c#4@37 d#5@64, ~@8 e4@16 e4@21 c#4@3 [f#3,f#5]@13 f#4@3 [b3,d#5]@3 d#4@2 f#4@3 b4@3 f#4@2 d#4@3 b3@3 d#4@2 f#4@3 b4@8 [g#3,g#4]@3 b3@2 d#4@3 g#4@3 d#4@2 b3@3 g#3@3 b3@45]/5", // F# B G#
  E: "[~@253 a#3@3, a#4@24 f#4@3 c#4@37 g#3@3 b3@2 d#4@3 g#4@3 d#4@2 b3@3 g#3@5 d#4@3 g#4@3 b4@26 b3@3 e4@21 c#5@16 c#6@3 d#6@32 g#3@3 b3@2 d#4@3 g#4@3 d#4@2 b3@3 g#3@8 g#4@3 b4@2 [g#4,d#5]@3 [f#3,c#5]@3 a#3@2 c#4@3 f#4@3 c#4@2 a#3@3 f#3@3 a#3@2 c#4@3 f#4@3 c#4@5, f#3@11 c#4@8 a#3@40 d#5@2 f#4@35 [e3,g#4]@3 g#3@2 b3@3 e4@3 b3@2 g#3@3 e3@13 e5@22 a#3@37 b4@3 f#4@24 b3@45, ~@3 a#3@13 [f#3,f#5]@13 f#4@3 [b3,d#5]@3 d#4@2 f#4@3 b4@3 f#4@2 d#4@3 b3@3 d#4@2 f#4@3 b4@27 b3@10 d#4@30 g#4@18 c#4@3 [f#3,a#5]@16 b3@3 d#4@2 f#4@3 b4@3 f#4@2 d#4@3 b3@3 d#4@2 f#4@3 [f#5,c#6]@29 d#4@43, ~@5 c#4@3 f#4@13 c#4@3 e5@40 d#5@51 g#3@10 b3@3 [f#3,a#4]@3 a#3@2 c#4@3 f#4@3 a#4@10 c#4@3 f#4@3 f#5@2 c#4@32 d#4@3 [g#5,b5]@64]/8", // G#5 F#5 E F# B F# F#5 F# …
  F: "[~@253 [b3,d#5,f#5]@2 d#4, f#3@11 c#4@8 a#3@10 f#4@3 d#6@24 f#5@3 f#4@2 d#4@3 [f#3,a#5]@3 a#3@2 c#4@3 f#4@3 c#4@2 a#3@3 [f#5,c#6]@16 [g#3,g#5]@2 b3@3 d#4@2 g#4@3 d#4@3 b3@2 b5@42 d#5@26 b3@3 e4@21 c#5@8 c#4@2 f#4@3 f#5@3 [f#4,c#6]@2 [b3,f#5,d#6]@3 d#4@3 f#4@2 b4@3 f#4@2 d#4@3 b3@3 d#4@2 f#4@3 b4@2 f#4@3 d#4@5 ~, a#4@8 a#4@43 d#4@2 f#4@3 b4@27 a#3@13 d#6@21 d#4@2 g#4@29 a#3@3 d#4@23 b4@3 g#3@13 [f#3,c#5]@2 a#3@3 c#4@3 f#4@2 a#4@56, ~@3 a#3@13 [f#3,c#5,a#5]@8 [f#4,f#5]@3 c#4@5 [b3,f#5]@3 d#4@2 f#4@3 b4@3 f#4@2 d#4@3 b3@16 c#5@21 c#4@26 g#3@11 d#4@5 [d#3,d#5,a#5]@3 f#3@2 a#3@3 d#4@5 f#3@3 [d#3,f#5]@15 [e3,b4]@3 g#3@3 b3@2 e4@3 b3@3 g#3@2 [e3,g#4]@13 b3@3 a#5@16 f#5@2 a#3@48, ~@5 c#4@3 [f#4,f#5]@13 c#4@3 c#6@32 b5@24 f#3@8 f#4@2 a#5@3 f#4@18 g#5@3 b3@29 d#5@2 f#3@8 a#5@3 a#3@2 g#5@27 b4@2 e5@16 c#4@3 f#3@50]/8", // B F# F#5 G# F#5 B F#5 F# …
  G: "~@28 [e3,b4,g#5]@3 b3, ~@2 f#4@5 f#4@10 ~ f#4@8 f#5@6, ~@5 a4@15 a4@12, ~@10 d#4@5 d#4@17, ~@12 b3@11 d#5@9", // E
  H: "~@15 g#3, ~ g#4@16 c#4@3 a#4@2 c#5@3 a#5@3 [e3,b4,g#5]@4, ~@2 b4@4 [c#5,a#5] a#3@9, ~@7 e5@25, ~@9 g#5@3 f#3@20", // E F#
  I: "[~@252 d#4@3 g#4, ~ b3@15 a3@16 b3@3 g#4@16 a#4@23 b5@3 d#6@29 [f#3,c#5]@2 a#3@8 c#5@5 [e3,b4,g#5]@3 g#3@2 b3@3 g#4@3 b4@2 g#5@3 d3@16 e3@15 a#5@3 a#3@10 a#5@21 d#6@3 f#6@3 b6@2 f#6@3 d#6@2 b3@3 d#4@3 f#4@2 b4@3 f#4@3 d#4@2 b3@3 d#4@2 f#4@3 b4@3 f#4@2 d#4@3 g#3@3 b3@6, ~@3 g#4@16 f#4@5 f#5@3 e3@16 a#5@2 a#3@21 b4@3 d#5@13 [d#4,b6]@31 a#4@32 f#4@5 d5@13 f#5@3 g#5@2 [f#3,c#5]@11 g#5@21 b5@56, ~@6 b4@5 d3@16 [b4,g#5]@3 g#3@18 c#4@23 f#5@11 b5@8 [e3,b4,g#5]@2 g#3@3 b3@3 g#4@2 b4@3 g#5@3 a#5@10 b5@31 a4@11 b3@2 g#4@16 a#4@21 f#5@59, ~@9 g#5@2 [a4,f#5]@3 f#3@8 a4@15 b4@3 g#5@3 [f#3,c#5]@10 g#5@3 a#5@2 [b3,f#5,d#6]@3 d#4@3 f#4@15 f#6@32 c#4@26 [a4,f#5]@3 f#3@2 a3@11 [b4,g#5]@2 g#3@19 c#4@10 [b3,f#5,d#6]@3 d#4@2 f#4@3 b4@3 d#5@61]/8", // F#5 E G#m F#5 E D F#5 B …
  J: "~@15 e4, ~ d#4@10 ~ d#4@5 d#4@11 b3@4, ~@4 b3@5 b3@16 g#3@7, ~@7 g#3@13 g#3@2 e3@10, ~@7 g#4@9",
  K: "[~@252 g#4@3 b3, ~ b3@10 b3@5 b3@6 f#3@2 a#3@3 c#4@3 f#4@2 a#4@13 f#4@3 c#4@37 [g#3,g#4,b4]@2 b3@3 d#4@2 g#4@3 d#4@3 b3@2 g#3@13 d#4@37 f#4@3 a#4@2 c#5@3 a#4@2 f#4@3 a#4@16 b3@2 d#4@3 f#4@3 b4@2 d#5@21 [g#3,g#4]@3 b3@2 d#4@3 g#4@3 d#4@2 b3@3 g#3@3 b3@2 d#4@3 g#4@2 d#4@3 g#3@3 e3@2 g#3@3 b3@3 e4@6, ~@3 g#3@5 ~ g#3@10 g#3@24 c#4@2 e5@37 d#4@3 d#5@26 b4@36 c#4@29 f#5@34 b4@46, ~@6 e3@29 [c#4,c#5]@2 [f#3,f#5]@14 f#4@2 [b3,d#5]@3 d#4@2 f#4@3 b4@3 f#4@2 d#4@3 b3@2 d#4@3 f#4@3 c#5@29 d#4@2 g#4@26 a#3@3 c#4@3 f#4@2 c#4@3 a#3@26 c#5@3 a#5@34 f#4@48, ~@14 e4@26 a#3@37 b4@2 f#4@24 b3@13 f#3@3 a#3@2 c#4@3 f#4@2 c#4@6 f#3@34 c#5@2 f#5@3 c#6@21 f#4@3 b3@2 d#4@3 f#4@2 b4@3 c#5@51]/8", // G#m G# C# F# B
  L: "[~@106 b4@3 d#4 ~@18, ~ e3@13 b4@3 a#4@24 [f#4,f#5]@2 c#4@29 b4@3 f#4@23 b3@3 d#4@2 g#4@5 ~@20, ~@4 g#3@13 f#3@3 a#3@2 c#4@3 f#4@3 c#5@2 [c#4,f#5]@3 [f#3,a#5]@13 f#4@2 d#6@29 d#4@3 [g#3,g#4,b4]@3 b3@2 d#4@3 g#4@2 d#4@3 b3@3 g#3@13 ~@19, ~@7 b3@7 e4@24 c#4@3 c#6@23 [b3,f#5]@3 d#4@2 f#4@3 [c#5,f#5]@37 ~@19, ~@9 e4@3 g#4@21 c#5@2 a#3@13 [b3,f#5]@3 d#4@3 f#4@2 b4@3 f#4@3 d#4@2 d#5@45 ~@19]/4", // F# F#5 F# G#m B5 F#5 B5
})).s("gm_epiano2").gain(0.28).pan(0.4)

// other · brass section · "brass"
const brass_section = note("<~@47 A@8 B C D@3 ~>".pickRestart({
  A: "[~@15 f#3@15 ~ a#3@15 c#4@8 f#4@8 a#4@8 c#5@7 ~ d#5@16 b4@16 a#4@15 c#5@9 ~@2 a#4 ~ c#5 ~@2 b4@15 d#5@8 ~ b4@7 a#4@9 ~@2 a#4 ~ a#4 ~@2 f#4@9 ~ f#4 ~@2 a#4 ~@2 g#4@15 e4@8 g#4@7 ~ a#4@16 c#5@5]/8",
  B: "~@2 a#4@7 ~@2 d#5@12 c#5@3 b4@6", C: "~@2 c#5@8 a#4@7 ~ g#4 ~ g#4 ~@2 g#4 ~@2 g4@6",
  D: "[~ g#4@8 ~ g#4@9 ~@2 b4 ~@2 e5 ~@2 g5@10 e5 ~@3 g5 ~@4 b5 ~@5 b5@33 b4@3 ~@8]/3",
})).s("gm_brass_section").gain(0.14)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@5 B C D B A@5 C D E@2 F G H I J K@2 L M N O P Q R S T U V@2 W X Y Z AA AB AC E AD AE AF AG AH AI AJ AK AL AM AN
  AO AP ~
>`.pickRestart({
  A: "x ~@12 x ~@2 x ~@15", B: "~@13 x ~@2 x ~@15", C: "x ~@12 x ~@2 x ~@12 x ~@2", D: "x ~@12 x ~@2 x ~@7 x ~@7",
  E: "x!2", F: "x ~@14 x ~@15 x", G: "~@15 x ~@14 x ~", H: "~@7 x ~@7 x", I: "~@14 x ~@14 x ~@2",
  J: "~@13 x ~@15 x ~@2", K: "~@3 x ~@3 x", L: "~@11 x ~@15 x ~@4", M: "~@11 x ~@14 x ~@5", N: "~@5 x ~@7 x ~@2",
  O: "~@10 x ~@14 x ~@6", P: "~@9 x ~@15 x ~@6", Q: "~ x ~ x", R: "~@8 x ~@14 x ~@8", S: "~@7 x ~@15 x ~@8",
  T: "~@7 x ~@14 x ~@9", U: "~@3 x ~@7 x ~@4", V: "~@5 x ~@15 x ~@10", W: "~ x ~@3 x ~@2", X: "~@4 x ~@14 x ~@12",
  Y: "~@3 x ~@15 x ~@12", Z: "~@3 x ~@14 x ~@13", AA: "~ x ~@7 x ~@6", AB: "~ x ~@15 x ~@14", AC: "~ x ~@14 x ~@15",
  AD: "x ~@14 x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x", AE: "~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~",
  AF: "~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@15 x ~", AG: "~@14 x ~@12 x ~ x ~@2", AH: "~@13 x ~@12 x ~@2 x ~@2",
  AI: "~@6 x ~@6 x!2 ~", AJ: "~@12 x ~@12 x ~@2 x ~@3", AK: "~@11 x ~@12 x ~@2 x ~@4", AL: "~@11 x ~@12 x ~ x ~@5",
  AM: "~@10 x ~@12 x ~@2 x ~@5", AN: "~@10 x ~@2 x ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x",
  AO: "~@2 x ~@3 x ~@3 x ~@4 x ~@4 x ~@11", AP: "~@13 x ~@8 x ~@9",
})).gain(0.13).pan(0.2)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@7 A ~@2 A ~@7 B@2 C D E F G@2 H I J K@2 L M N O P Q@2 R S T U V W X@2 B Y ~ Z AA ~@10
>`.pickRestart({
  A: "x", B: "~@13 x ~@15 x ~@2", C: "~@13 x ~@14 x ~@3", D: "~@3 x ~@3 x", E: "~@12 x ~@14 x ~@4",
  F: "~@11 x ~@15 x ~@4", G: "~@5 x ~@7 x ~@2", H: "~@9 x ~@15 x ~@6", I: "~@9 x ~@14 x ~@7", J: "~ x ~ x",
  K: "~@7 x ~@15 x ~@8", L: "~@3 x ~@7 x ~@4", M: "~@6 x ~@14 x ~@10", N: "~@5 x ~@15 x ~@10", O: "~@5 x ~@14 x ~@11",
  P: "~ x ~@3 x ~@2", Q: "~@3 x ~@15 x ~@12", R: "~ x ~@7 x ~@6", S: "~@2 x ~@14 x ~@14", T: "~ x ~@15 x ~@14",
  U: "x!2", V: "x ~@15 x ~@14 x", W: "~@15 x ~@15 x", X: "~@7 x ~@7 x", Y: "~@13 x ~@18", Z: "~@27 x ~@4",
  AA: "~@11 x ~@20",
})).gain(0.09).pan(0.2)

// drums · rim
const rim = s("rim").struct(`<
  ~@10 A ~@7 B@2 C@2 D E F G H I@2 J K L M N O P@2 Q R S T U V@2 W X B Y ~@13
>`.pickRestart({
  A: "~ x ~@2", B: "~ x ~ x", C: "~@7 x ~@15 x ~@8", D: "~@3 x ~@7 x ~@4", E: "~@6 x ~@14 x ~@10",
  F: "~@5 x ~@15 x ~@10", G: "~@5 x ~@14 x ~@11", H: "~ x ~@3 x ~@2", I: "~@3 x ~@15 x ~@12", J: "~ x ~@7 x ~@6",
  K: "~@2 x ~@14 x ~@14", L: "~ x ~@15 x ~@14", M: "x!2", N: "x ~@15 x ~@14 x", O: "~@15 x ~@15 x", P: "~@7 x ~@7 x",
  Q: "~@13 x ~@15 x ~@2", R: "~@13 x ~@14 x ~@3", S: "~@3 x ~@3 x", T: "~@12 x ~@14 x ~@4", U: "~@11 x ~@15 x ~@4",
  V: "~@5 x ~@7 x ~@2", W: "~@9 x ~@15 x ~@6", X: "~@9 x ~@14 x ~@7", Y: "~@7 x ~@24",
})).gain(0.22).pan(0.2)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@2 [~ x ~ x]!7 [~ x ~@2] [~@3 x] [~ x ~ x]!6 [~ x ~@2] ~@43>").gain(0.11).pan(0.2)

// drums · snare
const snare = s("sd").struct("<~@26 A B@2 C D E F@2 ~@13 G H I J K L A B M C N O P ~>".pickRestart({
  A: "~ x ~@3 x ~@2", B: "~@3 x ~@15 x ~@12", C: "~ x ~@7 x ~@6", D: "~@2 x ~@14 x ~@14", E: "~ x ~@15 x ~@14",
  F: "x!2", G: "~@15 x ~@15 x", H: "~@12 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~",
  I: "~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@7 x ~@9", J: "~@6 x ~@14 x ~@10", K: "~@5 x ~@15 x ~@10", L: "~@5 x ~@14 x ~@11",
  M: "x ~@2 x ~ x ~@2 x ~@10 x ~@12", N: "~@2 x ~@7 x ~@7 x ~@8 x ~@4", O: "~@6 x ~@3 x ~@4 x ~@16",
  P: "~@15 x ~@6 x ~@9",
})).gain(0.2).pan(0.2)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@47
  [~@18 x ~@2 x ~ x ~@2 x ~ x ~@3]
  [~@2 x ~ x ~@2 x ~@2 x ~@21]
  ~@5
  [~@15 x]
  ~@6
>`).gain(0.11).pan(0.2)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@17 A ~ B C ~ D E ~ F ~@3 G ~@3 H ~@7 I ~@5 J K L ~ M N O P Q R S T U ~
>`.pickRestart({
  A: "~@16 x ~@2 x ~ x ~@2 x ~@2 x ~@2 x ~", B: "x", C: "~@31 x", D: "~@15 x", E: "~@29 x ~@2",
  F: "~@15 x!3 ~@2 x ~ x ~@2 x ~@2 x ~@3", G: "~@10 x ~@2 x!3 ~@2 x ~@13", H: "~@10 x!2 ~ x ~ x ~@2 x!3 ~@2 x!2 ~@7",
  I: "~@19 x ~@12", J: "~@16 x ~ x ~ x ~@2 x ~@2 x ~ x ~@2 x",
  K: "~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x", L: "~ x ~@2 x ~ x ~@2 x ~ x!2 ~ x ~@17",
  M: "~@10 x ~@2 x ~@18", N: "~@28 x ~@2 x", O: "x!2 ~@2 x ~ x!2 ~ x ~@2 x ~@19", P: "~@9 x ~@22",
  Q: "~@3 x ~ x ~@2 x ~@23", R: "~@5 x ~@10", S: "~@4 x ~@2 x ~ x ~@22", T: "~@10 x ~@4 x ~@12 x ~ x!2",
  U: "x!2 ~ x!5 ~ x!2 ~@2 x ~@18",
})).gain(0.11).pan(0.2)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@7 B A@7 B A C D E F G H I J K C D E F G H I J K C D E F G H I J K C L ~ M N ~@2 O ~@7
>`.pickRestart({
  A: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2",
  B: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~@4",
  C: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2",
  D: "x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x",
  E: "~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~",
  F: "~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~",
  G: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2",
  H: "x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x",
  I: "~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x",
  J: "~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~",
  K: "~ x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~", L: "x ~ x ~@2 x ~ x ~@2 x ~@2 x ~@18",
  M: "~@17 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~", N: "x ~@2 x ~@2 x ~ x ~@2 x ~@20", O: "~@17 x ~@14",
})).gain(0.09).pan(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@17 A B ~ C ~ D E F G ~@2 H I ~@2 J K ~@7 L ~@8 M N O P Q ~ R S ~ T ~>".pickRestart({
  A: "x ~ x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2", B: "~@16 x ~@2 x!3 ~@2 x ~@2 x ~ x ~@2",
  C: "~@24 x ~ x!3 ~@3", D: "~@23 x ~ x!3 ~@4", E: "~@24 x!2 ~ x ~@4", F: "~@29 x ~ x",
  G: "x ~ x ~@2 x ~ x!3 ~@2 x ~@19", H: "~@27 x ~ x!3", I: "~@2 x ~@2 x!3 ~@24", J: "~@24 x ~@2 x!3 ~@2",
  K: "x ~ x ~ x!2 ~@2 x ~@2 x!3 ~@2 x ~ x!2 ~@12", L: "~@3 x ~@2 x!3 ~@2 x ~@2 x!3 ~@15", M: "~@29 x ~@2",
  N: "x!2 ~ x ~ x ~@2 x!2 ~@22", O: "~@13 x ~ x ~ x!2 ~ x ~@2 x!3 ~@6", P: "~ x ~@6", Q: "~@3 x ~@2 x ~ x ~@2 x ~@20",
  R: "~@3 x ~ x!3 ~@24", S: "~@2 x ~ x!2 ~ x ~@24", T: "~@7 x ~@8",
})).gain(0.11).pan(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@18 [~ x] ~@37 [~@3 x ~@28] ~@4>").gain(0.11).pan(0.2)

// drums · high tom
const high_tom = s("ht").struct("<~@59 [~@7 x ~@8] ~>").gain(0.16).pan(0.2)

// drums · crash
const crash = s("cr").struct("<~@18 A ~@14 B ~@15 C@2 D ~ E F@2 G H I J ~>".pickRestart({
  A: "x", B: "~@3 x", C: "~@7 x ~@8", D: "~@13 x ~@18", E: "~@3 x ~@4", F: "~@11 x ~@20", G: "~@5 x ~@10",
  H: "~@10 x ~@16 x ~@4", I: "~@5 x ~@2", J: "~@11 x ~@4",
})).gain(0.18).pan(0.2)

// drums · ride
const ride = s("rd").struct(`<
  ~@9 A ~@3 A ~@3 A B C D E F G H I J K L M N O P Q R S T C D E F G H R S T C D E U G V R W X Y Z AA AB ~@2
>`.pickRestart({
  A: "~@29 x ~@2", B: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2",
  C: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2",
  D: "x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x",
  E: "~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~",
  F: "~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~",
  G: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2",
  H: "x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x",
  I: "~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@3", J: "~@7 x ~ x ~@2 x ~@9 x ~@2 x ~@2 x ~@3",
  K: "~@6 x ~@2 x ~ x ~@10 x ~ x ~@2 x ~@4", L: "~@5 x ~@2 x ~@2 x ~@9 x ~@2 x ~ x ~@5",
  M: "~@5 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@5", N: "~@4 x ~@2 x ~@2 x ~@9 x ~@2 x ~ x ~@6",
  O: "~@4 x ~ x ~@2 x ~@9 x ~@2 x ~@2 x ~@6", P: "~@3 x ~@2 x ~ x ~@10 x ~ x ~@2 x ~@7",
  Q: "~@3 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x",
  R: "~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x",
  S: "~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~ x ~",
  T: "~ x ~ x ~@2 x ~@2 x ~ x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~",
// … 13 more lines

More by LeAnn Rimes