Strudelify

Periferia

Zero

KeyC majorTempo128 bpm
0:00/0:00
// Periferia — Zero
// 128 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 142 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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 · synth bass 2
const bass = note(`<
  ~@30 A B ~ C D E F G H I J K L M N O P Q R S@3 T U V W X Y Z AA AB U V W X Y Z AA AC@2 ~@11 AD AE ~@2 AF AG AH@2 AI@4
  AJ AK@6 AL AM@5 AN@4 AO AP AQ@2 AR@2 AS@2 ~@6 AT@5 ~@13
>`.pickRestart({
  A: "~@2 c2 ~@5", B: "~@3 a#1 ~@4", C: "~@7 d#1", D: "g#1 ~@7", E: "~ d2 ~@6", F: "g1@8 ~ g1@3 g2@9 g2@3",
  G: "g1@8 ~ g1@3 f2@3 f#2@3 g2@6", H: "c2@8 ~ c2@3 g2@6 g1@6", I: "f1@4 ~@2 f1@12 ~@3 f1@3",
  J: "a#1@3 a#1@3 a#1@2 ~ a#1@14 ~", K: "d#2@3 f2@3 g2@3 g#2@3 a#2@3 c3@3 d#3@3 f3@2 ~",
  L: "g#2@11 ~ d#2@4 ~@2 g#2@3 d#2@3", M: "d2@3 d2@4 ~@2 d2@2 ~ d2@10 ~@2", N: "g1@5 ~ g1@6 g2@12",
  O: "g1@2 ~ g1@3 g2@6", P: "c2@9 c3@9 c2@4 ~@2", Q: "c2@8 ~ c3@9 c2@4 ~@2", R: "g1@9 g2@6 g1@2 ~ g2@2 ~ g1@3",
  S: "[c2@5 ~ c2@5 ~ c2@3 c3@3 c2@2 ~ g1@24 f2@15 f2@12]/3", T: "g2 g1", U: "c2@9 c3@13 ~@2",
  V: "c2@3 c2@5 ~ c2@6 c3@3 c2@5 ~", W: "e2@12 e2@11 ~", X: "a2@8 ~ a2@14 ~", Y: "g2@8 ~ g2@9 g2@5 ~",
  Z: "g#2@8 ~ g#2@2 ~", AA: "g2@8 ~ g2@7 ~@2 g2@5 ~", AB: "g1@7 ~@2 g1@3 g2@3 g1@8 ~",
  AC: "[g1@7 ~@2 g1@3 g1@16 ~@20]/2", AD: "~@5 c2 ~@2", AE: "~@6 a#1 ~", AF: "~@2 d#1 g#1 ~@4", AG: "~@4 d2 ~@3",
  AH: "[~@9 g1@8 ~ g1@3 g2@9 g2@3 g1@8 ~ g1@3 f2@3]/2",
  AI: "[f#2@3 g2@6 c2@8 ~ c2@3 g2@6 g1@6 f1@4 ~@2 f1@12 ~@3 f1@3 a#1@3 a#1@3 a#1@2 ~ a#1@14 ~ d#2@3 f2@3 g2@3 g#2@3 a#2@3]/4",
  AJ: "c3@3 d#3@3 f3@2 ~ g#2@11 ~ d#2@3",
  AK: "[~@3 g#2@3 d#2@3 d2@3 d2@4 ~@2 d2@2 ~ d2@10 ~@2 g1@5 ~ g1@6 g2@12 g1@4 ~@2 g1@6 g2@12 c2@9 c3@9 c2@4 ~@2 c2@8 ~ c3@9 c2@4 ~@2 g1@9 g2@6]/6",
  AL: "g1@2 ~ g2@2 ~ g1@3 c2@5 ~ c2@5 ~ c2@3",
  AM: "[c3@3 c2@2 ~ g1@24 f2@15 f2@12 g2@12 g1@12 c2@9 c3@13 ~@2 c2@3 c2@5 ~ c2@6]/5",
  AN: "[c3@3 c2@5 ~ e2@12 e2@11 ~ a2@8 ~ a2@14 ~ g2@8 ~ g2@9 g2@5 ~ g#2@15]/4", AO: "~@3 g#2@4 ~@2 g2@8 ~ g2@6",
  AP: "~@3 g2@5 ~ g1@7 ~@2 g1@3 g2@3", AQ: "[g1@8 ~ c2@9 c3@13 ~@2 c2@3 c2@5 ~ c2@6]/2",
  AR: "[c3@3 c2@5 ~ g1@12 g1@11 ~ c2@15]/2", AS: "[~ e2@16 a2@16 ~ a#2@14]/2",
  AT: "[~@13 c2@9 ~ c3@9 c2@4 ~@2 c2@8 ~ c3@9 c2@4 ~@2 g1@9 g2@6 g1@2 ~ g2@2 ~ g1@3 c2@3 c3@3 c2@2 ~ a#1@6 a#2@3 a#1@2 ~ f2@13]/5",
})).s("gm_synth_bass_2").gain(0.56)

// chords · piano
const piano = note("<A@2 B C@3 D@6 E@5 F@3 G@6 H@4 ~@40 I@5 J@7 ~@36 K@6 ~@5 L@2 M N@8 ~@2>".pickRestart({
  A: "[~@18 g4@11 ~ g4@18, ~@3 c3@5]/2", B: "~@5 g3@3 d4@4 f4@12, ~ b2@23, ~ f4@11 ~@12",
  C: "[~@7 f4@16 ~@14 c4@2 d4@2 ~@4 d#3@4 ~ g3@5 ~@5 g4@5 g3@5 c4@2, ~@7 a#2@34 g#2@31, ~@41 d#4@14 ~@17]/3",
  D: "[~@24 d#4@6 ~@6 g3@7 ~ g4@15 g4@11 g4@7 ~@4 c5@4 ~@10 d4@4 f4@3 ~@8 d5@4 ~@7 g3@4 c4@3 e4@3 ~@8 c5@4 ~, ~@3 g4@10 f3@15 ~@31 c3@29 b2@29 a#2@27, ~@8 g2@51 ~@85, ~@8 d#4@16 ~@6 d4@28 ~@30 g4@14 ~@15 g4@7 ~@20, ~@19 g#3@9 ~@64 g3@11 ~@41]/6",
  E: "[~@10 f3@4 c4@3 f4@7 ~ d#4@3 ~@8 f3@3 a#3@4 ~@3 f4@4 g#4@4 ~@14 a#3@4 d#4@4 ~@3 g4@4 ~@4 a#3@3 ~@8 c4@3 g4@4 ~@4 g4@3 ~@4 c4@4, ~@3 g#2@29 g#2@29 g2@29 g#2@29 ~, ~@3 g4@11 ~@14 f4@11 ~@15 f4@7 d#4@11 ~@4 a#4@15 ~@3 d#3@9 ~@9 d#4@7 ~, ~@57 d4@7 ~ d#3@9 ~@9 d#4@7 c4@7 ~@8 c5@15]/5",
  F: "[~@7 f4@5 g#4@5 ~@6 f3@6 ~@8 g3@6 ~@11 d#4@4 g3@14, [d2,f3]@18 g2@25 c3@29, ~@3 c4@12 ~@3 d#4@11 ~ d4@13 g4@15 ~@14]/3", // Dm
  G: "[~@4 d4@4 d#4@4 f4@3 g3@15 ~@4 e4@3 f4@4 g4@4 g3@3 c4@4 c5@4 ~@11 f3@3 c4@3 ~ f4@7 d#4@7 ~@4 f3@4 a#3@2 ~@16 d#5@2 f5@2 ~@7 a#3@4 d#4@3 ~@4 g4@8, ~ b2@29 a#2@29 g#2@29 ~ g#2@29 g2@26, ~ g4@15 ~@14 g4@9 ~@20 g4@15 ~@15 f4@7 ~@2 c4@7 g4@2 g#4@2 a#4 c5@2 d5@4 ~@2 f5@15 ~@11, ~@99 d4@4 f4@13 ~@16 a#4@12, ~@101 d#4@15 ~@28]/6",
  H: "[~@7 d#3@3 ~@4 g4@4 ~@3 g4@4 d#4@4 c4@3 ~@5 g3@4 b3@5 d#4@5 ~@6 g3@8 d4@15 ~@16, ~@3 g#2@29 g2@63 ~, ~@3 d#4@11 ~@4 c5@15 ~@63, ~@5 c4@9 ~@2 d#4@7 ~@3 f3@14 ~@8]/4",
  I: "[~@14 d#4@3 g3@15 ~@4 d4@4 d#4@3 f4@4 g3@15 ~@3 e4@4 f4@4 g4@3 g3@4 c4@4 c5@4 ~@11 f3@3 c4@3 ~ f4@7 d#4@7, ~@3 c3@29 b2@29 ~ a#2@29 g#2@29, ~@3 g4@15 ~@14 g4@15 ~@15 g4@11 ~@18 g4@15 ~@14]/5",
  J: "[~@4 f3@4 a#3@2 ~@18 f5@2 ~@8 a#3@3 d#4@4 ~@4 g4@11 ~@4 d#3@3 ~@4 g4@4 ~@3 g4@4 d#4@4 c4@3 ~@5 g3@4 b3@5 d#4@5 ~@6 g3@8 d4@30 ~@16, ~ g#2@29 g2@29 ~ g#2@29 g2@63 ~@16, ~ f4@7 ~@2 c4@6 f4 g4@2 g#4@2 a#4@2 c5@2 d5@2 d#5@2 ~ f5@15 a#4@15 ~@15 c5@15 ~@78, ~@12 d4@17 ~@38 c4@18 ~@24 f3@28 ~@31, ~@14 d#4@15 ~@31 d#4@11 ~@18 d#4@14 ~@65]/7",
  K: "[~@11 c4@4 f4@5 g4@8 ~ f4@8 ~@10 c4@5 ~@14 c4@5 g3@6 ~@12 c4@6 f4@6 ~@6 c4@6 ~@6 g4@9 ~@16, ~@2 g#2@35 g2@38 ~@2 g2@47 ~@20, ~@2 f4@10 ~@25 e4@11 ~@4 e4@9 e4@7 ~@9 f4@14 ~@10 g4@12 d4@10 ~@21, ~@6 g#3@8 ~@28 g3@9 ~@6 g4@10 ~@16 a3@8 ~@53]/6",
  L: "[~@10 c5@3 d5@4 e5@4 ~@8 g4@4 g4@8 g4@7, ~@7 b2@9, ~@7 f5@5 ~@4]/2", M: "~ f5@3 ~ f5@4 e5@4 c5@4 f4@7, ~@5 a2@19",
  N: "[~@5 c5@4 d5@4 ~@8 g4@4 e4@4 c4@4 g3@4 c4@4 ~ e4@4 [a3,d4]@26 ~ a3@63 [g3,e4]@54 ~@2, ~ f4@6 ~@6 g2@60 [c2,c4]@119, ~@13 e5@16 ~@163, ~@17 c5@12 ~@17 f4@90 ~@56]/8", // D5 C
})).s("gm_piano").gain(0.32).pan(0.9)

// chords · piano · soft notes
const piano_soft = note("<A@2 ~ B C D ~@2 E F G H@4 ~@3 I@2 ~@2 J K ~@46 L ~@2 M N ~@67>".pickRestart({
  A: "[~@11 c4@2 d#4@2 ~@9]/2", B: "~@11 g3@4 a#3@5 d4@4", C: "f4@13 ~@11", D: "~@7 c4@15 ~@2", E: "~@7 c4@2 d#4@2 ~",
  F: "~ c4@4 g4@7 g4@4 ~@8", G: "~@10 g4@7 ~ g4@3 ~@3, ~@7 g3@12 ~@5",
  H: "[~@12 g3@4 ~@7 g4@4 ~@18 c4@11 ~@11 d4@11 ~@18, ~@16 c4@11 ~@69]/4", I: "[~@23 c4@4 d4@4 ~@17]/2",
  J: "~@8 g4@3 ~@13", K: "~@3 c4@2 ~@7", L: "~@3 c4@2 d4@2 ~@5", M: "~@16 g4@3 ~@5", N: "~@7 c4@2 ~@3",
})).s("gm_piano").gain(0.16).pan(0.9)

// chords · harpsichord
const harpsichord = note("<~@30 A@2 B C D E F G ~@43 H A I J K L M F N ~@52>".pickRestart({
  A: "[d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2", // D#maj7
  B: "[c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2", // Cm
  C: "[a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2", // Gm
  D: "[g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2", // G#
  E: "[a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2", // F#dim
  F: "[c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2", // Csus2
  G: "[c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [b3,d4,g4] ~@5", // Csus2 G
  H: "~@9 [d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2", // D#maj7
  I: "[d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2 [d4,d#4,g4] ~@2 [c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2", // D#maj7 Cm
  J: "[c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2 [c4,d#4,g4] ~@2 [a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2", // Cm Gm
  K: "[a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2 [a#3,d4,g4] ~@2 [g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2", // Gm G#
  L: "[g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2 [g#3,c4,c5] ~@2 [a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2", // G# F#dim
  M: "[a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2 [a3,c4,f#4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2 [c4,d4,g4] ~@2", // F#dim Csus2
  N: "[c4,d4,g4] ~@2 [b3,d4,g4] ~@20", // Csus2 G
})).s("gm_harpsichord").gain(0.32).pan(0.4)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@30 A B ~ C D E ~@7 F G@2 H I J@4 K L@4 ~@3 M N@4 ~@16 O P ~@2 Q R ~@8 S@5 T U@2 V@2 W X Y@2 ~@2 Z AA@4 ~@8 AB@6 ~@12
>`.pickRestart({
  A: "~@6 [c3,d#4,c6] ~@17", B: "~@9 [a#2,d#4,c6] ~@14", C: "~@21 [d#2,g4,g5] ~@2", D: "[g#2,g4,g5] ~@23",
  E: "~@3 [d3,a4,f#5] ~@20", F: "~@3 g4", G: "[a4@6 c5@6 d5@31 ~@5]/2", H: "~@2 [c5,c6] [e4,e5]",
  I: "[g4,g5] [f4,f5] [d5,d6] [c5,c6]", // G F D C
  J: "[c6@6 [b4,b5]@6 ~@6 [d5,d6]@3 [g4,g5]@13 ~@2 [c4,e5]@3 [c4,g4,f5] ~@2 [c4,g4,e5] ~@2 [c4,f4,a#4,d5]@22 ~@2 c5@12 b4@2 ~ c5@2 ~ f5@3 g5@3 a5@2 ~, ~@36 g4 ~@59]/4", // B D G C Csus4 C A#
  K: "g5@3 ~", L: "[g5@5 a5 g5@3 a5 g5 a5@2 b5 a5 c6@2 d6 c6 d6@2 e6 d6 e6@7 ~@2]/4",
  M: "a4@9 b4 c5 ~ d5 e5 ~ f5 g5 ~ a5 b5 ~ c6 d6 ~",
  N: "[e6@4 ~ a5 g5@3 a5 g5 a5@2 b5 a5 c6@2 d6 c6 d6@2 e6 d6 e6@7 ~@2]/4", O: "~@15 [c3,d#4,c6] ~@8",
  P: "~@18 [a#2,d#4,c6] ~@5", Q: "~@6 [d#2,g4,g5] ~@2 [g#2,g4,g5] ~@14", R: "~@12 [d3,a4,f#5] ~@11",
  S: "[~@3 g4@6 a4@6 c5@6 d5@31 ~@17 [c5,c6]@6 [e4,e5]@6 [g4,g5]@6 [f4,f5]@6 [d5,d6]@6 [c5,c6]@6 c6@6 [b4,b5]@6 ~@3]/5", // C E G F D C B
  T: "~@3 [d5,d6]@3 [g4,g5]@13 ~@2 [c4,e5]@3, ~@21 g4 ~@2", // D G C
  U: "[[c4,g4,f5] ~@2 [c4,g4,e5] ~@2 [c4,f4,a#4,d5]@22 ~@2 [c4,c5]@12 [b3,b4]@2 ~ [c4,c5]@2 ~]/2", // Csus4 C A# C B C
  V: "[[f4,f5]@3 [g4,g5]@3 [a4,a5]@2 ~ [g4,g5]@18 ~@6 [g4,g5]@15]/2", W: "[a4,a5] [g4,g5]@3 [a4,a5] [g4,g5] [a4,a5]@2",
  X: "[b4,b5] [a4,a5] [c5,c6]@2 [d5,d6] [c5,c6] [d5,d6]@2", Y: "[[e5,e6] [d5,d6] [e5,e6]@7 ~@7]/2",
  Z: "~@9 a4@9 b4 ~ c5 d5 ~ e5",
  AA: "[f5 ~ g5 a5 ~ b5 c6 ~ d6 [e5,e6]@11 ~ [c5,c6]@6 [g4,g5]@6 [f4,f5]@23 ~ [a4,a5]@12 [g4,g5]@12 ~@15]/4", // E C G F A G
  AB: "[~@13 f4@6 ~ e4@6 c5@6 e4@6 g4@6 f4@6 d5@6 c5@6 c5@6 b4@6 e5@6 d5@6 [c4,e5,e6]@3 [c4,g4,f5,g5,f6] ~@2 [c4,g4,e5,g5,e6] ~@2 [a#3,f4,d5,f5,d6]@6 [a#3,f4,e5,f5,e6] ~@2 [a#3,f4,d5,f5,d6] ~@2 [a3,c5,c6]@35 ~@2, ~@86 [g4,g5] ~@20 [f4,f5]@7 ~@30]/6", // C Csus4 C A# Am G F
})).s("gm_string_ensemble_1").gain(0.25).pan(0.7)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@46 A ~ B ~@48 C ~ D@2 ~@17 E@6 ~@18>".pickRestart({
  A: "[f4,f5] [e4,e5] ~@2", B: "c5 ~ [e5,e6] ~", C: "~@3 [f4,f5]@2 [e4,e5]@2 ~", D: "[~@3 c5@2 ~@2 [e5,e6]@2 ~@7]/2",
  E: "[~@2 c3@123 ~@19]/6",
})).s("gm_string_ensemble_1").gain(0.15).pan(0.7)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A@2 B C@3 D@6 E@8 F@7 G@3 ~@6 H@2 I J@3 K L M@2 N@2 O@2 P@3 Q R S T@3 U V W@3 X@7 Y@6 Z@4 ~@6 AA@8 AB@6 AC@6 AD@5 AE@7
  ~@5 AF@5 AG@2 AH AI@8 ~@2
>`.pickRestart({
  A: "[~@3 c2@5]/2", B: "d2", C: "[~@7 f2@33 d#2@32]/3", D: "[~@7 g2@137]/6",
  E: "[~@2 f2@58 ~ d#2@29 g#2@29 d2@18 g2@55]/8",
  F: "[~@11 d4@16 ~@47 c4@7 d#4@7 ~@44 a#4@7 g4@7 ~ d#4@21, g3@58 ~ g#3@58 g3@51, ~@14 g4@23 ~@7 d4@22 ~@18]/7",
  G: "[~@8 f4@19 g4@27 ~@18, ~@4 g2@31 ~]/3", H: "[g3,g4]/2", I: "g5@3 f5, [a#3,c5]",
  J: "[[a3,c5] g#3 [g3,d#4], g5@71 ~, f4@2 ~, ~ a#4@2]/3", K: "c4@10 a#3@13 ~, [g#4,c5]",
  L: "a3 c4 d4 [g4,g5], d5, f#5@3 ~", M: "[[a4,a5]@6 [c5,c6]@6 [d5,d6]@31 ~@5, d4, ~@6 b4@17 ~]/2",
  N: "[[f4,f5] [e4,e5] [c5,c6] [e4,e5] [g4,g5] [f4,f5] [d5,d6] [c5,c6], c3, g3 a3]/2", // F E C E G F D C
  O: "[[c5,c6]@6 [b4,b5]@6 [e5,e6]@6 [d5,d6]@3 ~@3 c4@14 ~@10, [g3,b3] ~, ~@21 [g4,g5]@13 ~@14]/2", // C B E D G
  P: "[~@7 [a3,f4]@9 ~@4 b3@4, c4@5 ~, ~@2 [g3,d4]]/3", Q: "[g3,c4,e4]", R: "[a3,f4]", S: "c4 b3, g#4",
  T: "[d4 ~ [g4,e5]@2 [g#4,f5]@2, a4 ~@2, ~ c4@5]/3", U: "[c4,g4,e5]", V: "[c4,a4] [g4,b4], d5",
  W: "[[c4,e4]@2 [a3,f4]@2 c4 [b3,d5], c5@5 ~, ~@2 g#4]/3", // C Dm Bm
  X: "[d4@12 ~@12 g4@24 [g#4,f5]@24 [g4,e5]@24 a4@12 [g4,b4]@46 ~@7 c3@7, e5@2 ~@5, a4@24 ~@72 [f4,d5]@49 ~@23, ~ c4@8 ~@5]/7", // C# C G Dm
  Y: "[~@19 d4@18 ~@8 c3@22 ~@15 c4@7 d#4@7 ~@30 g3@15 [a#3,a#4]@3, ~@8 b2@29 g4@44 ~@15 d4@44 ~@4, ~@15 g3@52 [f2,g#3]@59 d#2@18]/6", // A# Fm
  Z: "[~@4 [g3,g4]@7 [g#2,d#3,c4,d#4]@29 ~ [b3,f4]@19 [d3,b3,g4]@27 ~@9, ~@41 g2@47 ~@8]/4", // G G# Bdim G
  AA: "[~@9 [g3,g4]@48 g5@18 f5@6 [a3,c5]@24 g#3@24 [g3,d#4]@24 c4@10 a#3@13 ~ a3@6 c4@6 d4@3, ~@57 [a#3,g4,c5]@24 g5@71 ~@25 [d5,f#5]@15, ~@27 f4@16 ~@21, ~@35 a#4@16 [g#4,c5]@8 ~@5]/8", // G Am Cm C7 D G#
  AB: "[~@3 [g4,g5]@6 [a4,a5]@6 [c5,c6]@6 [d5,d6]@31 ~@5 [f4,f5]@6 [e4,e5]@6 [c5,c6]@6 [e4,e5]@6 [g4,g5]@6 [f4,f5]@6 [d5,d6]@6 [c5,c6]@6 [c5,c6]@6 [b4,b5]@6 [e5,e6]@6 [d5,d6]@3 ~@3 c4@14 ~, ~@3 d4@16 c3@16 [g3,b3]@8 ~@5, ~@21 b4@34 ~@2 g3@24 a3@25 ~@20 [g4,g5]@13 ~@5]/6", // G A C D F E C E …
  AC: "[~@10 [f4,a4]@9 e4@4 [b3,f4]@4 [c4,e4]@8 [a3,f4]@8 c4@4 b3, ~@3 c4@20 ~@20 g#4@5, ~@19 g3@16 ~@13]/6", // F Bdim C Dm
  AD: "[~@3 d4@4 ~@4 [g4,e5]@8 [g#4,f5]@8 [c4,e5,g5]@8 [c4,a4,e6]@4 [g4,b4,d6], ~@3 a4@8 c6@16 g6@13, ~@7 c4@20 ~@13]/5", // C C# C Am G
  AE: "[~@9 g3@24 a3@24 c4@12 b3@12 g4@16 g#4@15 ~ [f4,a4]@16 [e4,c5]@25 ~@14, ~@9 c5@60 b4@28 ~@71, ~@9 [c4,g4]@47 ~ g4@24 e4@33 ~@54]/7", // F C C5
  AF: "[~@13 f5@6 e5@6 c6@6 e5@6 g5@6 f5@6 d6@6 c6@6 c6@6 b5@6 e6@6 d6@6 [g4,c5,e5]@9 [a#4,d5]@12 [c5,a5]@7 ~@7, ~@13 g4@24 a4@24 b4@24 ~@9 f5@19 ~@7]/5", // C A# F
  AG: "[~@7 g3@9]/2", AH: "~@5 a3@19", AI: "[~ c4@15]/8",
})).s("gm_string_ensemble_2").gain(0.37).pan(0.3)

// other · alto sax
const alto_sax = note("<~@38 A B C D E F G@2 ~@43 H@2 I J K@5 ~@44>".pickRestart({
  A: "d#4@9 g4@2 ~", B: "a3@10 ~@2 d4@4 d#4@4 g4@3 ~", C: "g#3@10 ~@2 d4@4 d#4@4 g4@3 ~", D: "g3 ~", E: "c4", F: "d4",
  G: "g3/2", H: "[~@9 d#4@18 g4@4 ~@2 a3@10 ~@2 d4@3]/2", I: "~ d#4@4 g4@3 ~ g#3@10 ~@2 d4@3",
  J: "~ d#4@4 g4@3 ~ g3@12 ~@3", K: "[~@3 c4@8 d4@8 g3@16 ~@5]/5",
})).s("gm_alto_sax").gain(0.15).pan(0.8)

// other · acoustic guitar steel
const acoustic_guitar_steel = note("<~@39 [~@3 d5@2 ~@4 c#5 ~@5 c5@4 ~@5] ~@50 [~@12 d5@2 ~@4 c#5 ~@5] [c5 ~@5] ~@50>")
  .s("gm_acoustic_guitar_steel").gain(0.38).pan(0.3)

// other · whistle
const whistle = note("<~ A@2 B@5 C@2 ~@113 D E@2 ~@10 F G@3 ~@2>".pickRestart({
  A: "[~@11 d#5 f5 g5@28 f5 ~@2 d5 c5 a#4 ~]/2", B: "[g4@64 ~@2 c5@2 a#4@2 g4@45 ~@5, ~@65 d5@2 ~@53]/5",
  C: "[~@5 g6@15 ~@4]/2", D: "~@21 a4 a#4 [b4,c5]",
  E: "[c#5 [d5,d#5] e5 [f5,f#5] g5 g#5 a5 [a#5,b5] c6 [c#6,d6] d#6 [e6,f6] f#6 g6@25 ~@10]/2", // D#maj7 F#maj7 Bmaj7 Dmaj7 Fmaj7
  F: "~@13 d5 d#5 e5 f5 ~ f#5 g5 g#5 a5 a#5 b5", G: "[c6 ~ c#6!2 d6 d#6 e6 f6 f#6 ~ g6 g#6 a6 a#6 b6 c7@55 ~@2]/3",
})).s("gm_whistle").gain(0.13).pan(0.4)

// other · whistle · soft notes
const whistle_soft = note("<A B C D ~ E ~ F G ~@133>".pickRestart({
  A: "~@11 g4", B: "~@3 g#4 ~ a4 a#4 b4 c5 ~ d5 ~@13", C: "~@19 d#5 ~@4", D: "a4 ~@23", E: "~@22 a4 ~",
  F: "~@20 g#5 a5 a#5 ~", G: "b5 c6 c#6 d6 ~ d#6 e6 f6 f#6 ~@15",
})).s("gm_whistle").gain(0.05).pan(0.4)

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

// drums · snare
const snare = s("sd").struct("<~@37 A B@12 ~ B@18 ~@20 C D@11 ~ D@13 ~@10 E@2 F ~@14>".pickRestart({
  A: "~@6 x!2", B: "~ x", C: "~ x!2 ~@4 x", D: "~@7 x", E: "~ x ~@10", F: "~ x ~@5 x ~@4",
})).gain(0.45)

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@39 A ~ A ~ A ~@47 B ~ B ~ B ~@46>".pickRestart({
  A: "~@3 x", B: "~ x ~@6",
})).gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@38 A B A B A B ~ A ~@43 C ~ D ~ D ~ E C ~@45>".pickRestart({
  A: "~ x", B: "~@5 x ~@2", C: "~@7 x", D: "x ~@6 x", E: "x",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@49 A@2 ~ A ~@7 B ~@40 C@2 ~ D ~@6 E ~@3 C ~@11 F G ~@13>".pickRestart({
  A: "~@3 x", B: "~@5 x ~@2", C: "~ x ~@6", D: "x", E: "~@4 x ~@2 x", F: "~@20 x ~@2 x", G: "~ x ~",
})).gain(0.4)

// drums · crash
// … 21 more lines

More by Zero