Strudelify

Hyrule Castle

Koji Kondo

KeyB♭ majorTempo110 bpm
0:00/0:00
// Hyrule Castle — Koji Kondo
// 110 bpm, 5/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (5/4 at bar 1, 6/4 at bar 11, 5/4 at bar 12, 6/4 at bar 15, ...) are rendered on a constant 5/4 grid of one bar per cycle
// note: ch 1 "Flute" named as a pipe, played on flute (its tubular bells patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5964149; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 106 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/5)

// 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 · church organ · "Organ"
const church_organ = note(`<
  A B A C D@2 E@2 F@2 G@2 H I J@8 K@4 L@6 M N@5 O@6 P@7 ~ Q@4 R@2 S T@5 U V W@5 X@7 Y Z@5 AA@2 AB AC AD@5 AE@3 ~ AF@8 AG
>`.pickRestart({
  A: "d5@3 g4@3 d4@3 ~ bb4@3 g4@3 d4@3 c5@3 a4@3 ~ g4@3 d4@3",
  B: "d5@3 g4@3 d4@3 ~ bb4@3 g4@3 d4@3 c5@3 g4@3 ~ f4@3 c5@3",
  C: "d5@3 g4@3 d4@3 ~ bb4@3 g4@3 d4@3 c5@3 g4@3 ~ f4@3 eb5@3",
  D: "[d5@3 g4@3 d4@3 ~ bb4@3 g4@3 d4@3 c5@3 a4@3 ~ g4@3 d4@3 d5@3 g4@3 d4@3 ~ bb4@3 g4@3 d4@3 c5@3 g4@3 ~ f4@3 c5@3, [g1,d2,g2,d3]]/2", // G5
  E: "[d5@3 g4@3 d4@3 ~ bb4@3 g4@3 d4@3 c5@3 a4@3 ~ g4@3 d4@3 bb4@3 g4@3 d4@3 ~ g4@3 d4@3 bb3@3 d4@3 bb3@3 ~ [d1,g1,g2,g3]@3 [d1,a1,a2,d3]@3, [g1,d2,g2,d3]@29 ~@3]/2", // G5 D5 G5
  F: "[[d1,bb1,bb2]@26 [d1,g1,g2]@3 [f1,a1,a2]@6 [eb1,bb1,bb2]@22 ~ [a1,a2]@3 [bb1,bb2]@3, ~@29 f1@3]/2", // Gm G5 F Eb5 A Bb
  G: "[[eb1,c2,c3]@19 [d1,ab1,ab2]@10 [c1,gb1,gb2]@9 [bb0,g1,g2]@26]/2", // Cm Ddim Cdim Eb
  H: "[d1,g1,g2]@3 [f1,a1,a2]@6 ~ [d1,bb1,bb2]@22", I: "[bb1,bb2]@3 [c2,c3]@3 [d2,g2,d3]@10 [g2,g3]@16, f1@3 eb1@13",
  J: "[g3@3 [a2,a3]@3 [c1,g2,bb2,bb3]@19 ~ [c3,c4]@9 [d3,d4]@6 ~ [gb2,gb3]@3 bb1@29 a1@3 b1@29 bb1@3 [d2,d5]@29 [db2,db5]@3 [e2,e5]@25 [g3,g4]@3 ~ [a3,a4]@3 d4@3 g3@3 d3@3 ~@4 g3@3 d3@3 d4@3 g3@3 [d3,g3,g4]@3 ~ g2@3 d4@3 g3@3 d3@3 ~@4 g3@3 d3@3 d4@3 g3@3 [d3,a3,a4]@3 ~ [g2,bb3,bb4]@3 d4@3 g3@3 c3@3 bb3@3 ~ g3@3 c3@3, [d1,g2]@6 ~@20 ab1@19 ~@128 bb3@9 bb3@16 ~@4 [a3,a4]@6 bb3@6 bb3@16 ~@7 [c4,c5]@19, ~@26 gb2@16 ~@3 [g2,g3]@64 ~@64 bb4@26 ~@9 bb4@22 ~@26]/8", // A C7 C D Gb D Db E …
  K: "[d4@3 c4@3 bb3@3 ~ [f4,f5]@6 ~@3 d4@3 g3@3 ~ d3@3 bb3@3 g3@3 d3@3 ~@4 g3@3 [d3,g3,g4]@3 g2@3 d4@3 g3@3 ~ d3@3 ~@3 g3@3 d3@3 d4@3 ~ g3@3 [d3,bb3,bb4]@3 [g2,c4,c5]@3 ~@3 g3@3 ~ d3@3 bb3@3 g3@3 d3@3 d4@3 ~ g3@3 [d3,g4,g5]@3 [g2,a4,a5]@3 d4@3 g3@3 ~ c3@3 bb3@3, [ab3,ab4]@10 ~@6 [eb4,eb5]@6 d5@22 ~@10 bb4@22 ~@17 [g4,g5]@16 ~@6 [bb4,bb5]@13, ~@22 d4@16 d4@6 ~@4 [a3,a4]@6 bb3@6 ~ bb3@16 ~@6 [d4,d5]@10 ~@35]/4", // F G5 Gm C5 G5 Gsus2 Ab Eb …
  L: "[g3@3 c3@3 d4@3 ~ c4@3 bb3@3 [d5,d6]@6 [gb4,gb5]@3 ~ [bb4,bb5]@32 [b4,b5]@28 [bb4,bb5]@3 ~ [d5,d6]@28 [db5,db6]@3 ~ [e5,e6]@32 d6@3 g5@3 d6@3 g5@3 d6@3 ~ g5@3 d6@3 g5@3 d6@3 g5@3 ~ d6@3 g5@3, ~@3 [c5,c6]@5 ~@37 g6@32 d4@16 f4@3]/6", // D Gb Bb B Bb D Db E …
  M: "d6@3 g5@3 d6@3 ~ g5@3 d6@3 g5@3 d6@3 g5@3 ~ d6@3 g5@3, c4",
  N: "[[bb3,d6]@3 [c4,g5]@3 d6@3 ~ g5@3 d6@3 g5@3 d6@3 g5@3 ~ d6@3 g5@3 d6@3 g5@3 d6@3 ~ g5@3 d6@3 g5@3 d6@3 g5@3 ~ d6@3 g5@3 d6@3 g5@3 d6@3 ~ g5@3 d6@3 g5@3 d6@2 g5@2 d6@2 ~ d6@2 g5@2 d6@2 d6@2 g5@2 d6@2 d6@2 ~ g5@2 d6@2 d6@2 g5@2 d6@2 d6@2 g5@2 d6@2 ~ d6@2 g5@2 d6@2 d6@2 g5@2 d6@2 d6@2 ~ g5@2 d6@2 g6@2 c6@2 g6@2 g6@2 c6@2 g6@2 ~ g6@2 c6@2 g6@2, ~@6 d4@32 f4@6 ~ c4@38 d4@32 f4@6 ~ c5@32 bb4@6]/5", // Bb C5
  O: "[c7@2 g6@2 c7@2 c7@2 ~ g6@2 c7@2 c7@2 g6@2 c7@2 c7@2 g6@2 c7@2 ~ c7@2 g6@2 c7@2 c7@2 g6@2 c7@2 g4@19 ~ [g1,g2]@19 [gb1,gb2]@25 [c2,c3]@3 ~ [d2,d3]@3 ~@6 d5@2 c5@2 g4@2 ~ f5@2 c5@2 g4@2 d5@2 c5@2 g4@2 [c2,c3,g5]@3 ~@2 g4@2 ~@6 d5@2 c5@2 g4@2 ~ f5@2 c5@2 g4@2 d5@2 c5@2 g4@2 [d2,d3,g5]@3 ~@2 g4@2 ~@6 eb5@2 c5@2 g4@2 ~ f5@2 c5@2 g4@2, bb4@38 [d5,d6]@64 ~@7 [eb2,eb3]@26 ~@2 c5@2 ~@30 c5@2 ~@21, ~@138 [d2,d3]@6 [eb2,eb3]@22 ~@4 [eb2,eb3]@3 [f2,f3]@19]/6", // G Gb C D C5 G5 D Eb …
  P: "[f5@2 c5@2 g4@2 g5@2 ~@3 g4@2 bb5@2 ~@2 g4@2 ~@7 d5@2 c5@2 g4@2 f5@2 c5@2 g4@2 d5@2 ~ c5@2 g4@2 [c2,c3,g5]@2 ~@2 g4@2 ~@7 d5@2 c5@2 g4@2 f5@2 c5@2 g4@2 d5@2 ~@3 g4@2 [eb2,eb3,g5]@2 ~@2 g4@2 ~@7 d5@2 ~@2 g4@2 f5@2 c5@2 g4@2 d5@2 ~ c5@2 g4@2 [c3,c4,g5]@2 ~@2 g4@2 ~@7 eb5@2 c5@2 g4@2 f5@2 c5@2 g4@2 f5@2 ~ c5@2 g4@2 g5@2 ~ g4 ~@2 b5@2 ~@2 b5@2 ~ [c3,c4,c6]@64 ~@6, [bb1,bb2]@9 c5@2 ~@4 c5@2 ~@30 c5@2 ~@24 c5@2 ~@4 c5@2 ~@11 c5@2 ~@17 c5@2 ~@30 c5@2 g4@4 g5@2 ~@73, ~@10 [bb2,bb3]@6 [ab2,ab3]@6 [g2,g3]@22 ~@4 [d2,d3]@6 [eb2,eb3]@19 ~ [d2,d3]@3 ~@3 [f2,f3]@3 [g2,g3]@10 [c3,c4]@16 ~@3 [d3,d4]@3 [eb3,eb4]@19 [f3,f4]@10 g3@6 [b2,b3]@3 ~@71]/7", // C5 Eb C5 C Bb Ab G D …
  Q: "[~@19 [d1,g1,g2]@3 [d1,a1,a2]@3 ~ [d1,bb1,bb2]@25 [d1,g1,g2]@3 [f1,a1,a2]@6 ~ [eb1,bb1,bb2]@22 [a1,a2]@3 [bb1,bb2]@3 ~ [eb1,c2,c3]@19 [d1,ab1,ab2]@9 [c1,gb1,gb2]@10, ~@83 f1@6 ~@39]/4", // G5 D5 Gm G5 F Eb5 A Bb …
  R: "[[bb0,g1,g2]@26 [d1,g1,g2]@3 [f1,a1,a2]@6 [d1,bb1,bb2]@22 ~ [bb1,bb2]@3 [c2,c3]@3, ~@29 f1@3]/2", // Eb G5 F Gm Bb C
  S: "[d2,g2,d3]@10 [g2,g3]@16 g3@3 [a2,a3]@3, eb1@13 [d1,g2]@3", // G5 G A G5
  T: "[[c1,g2,bb2,bb3]@19 [c3,c4]@10 [d3,d4]@6 [gb2,gb3]@3 bb1@29 a1@3 b1@29 bb1@3 [d2,d5]@29 [db2,db5]@3 [e2,e5]@26, ~@19 ab1@19 ~@122, ~@19 gb2@16 ~@3 [g2,g3]@64 ~@58]/5", // C7 C D Gb D Db E G
  U: "[g3,g4]@3 [a3,a4]@3 d4@3 ~ g3@3 d3@3 ~@3 g3@3 d3@3 ~ d4@3 g3@3, ~@3 bb4@13, ~@3 bb3@5 bb3@8", // G A
  V: "[d3,g3,g4]@3 g2@3 d4@3 ~ g3@3 d3@3 ~@3 g3@3 d3@3 ~ d4@3 g3@3, ~@3 [a3,a4]@6 ~ bb4@22, ~@5 bb3@3 bb3@8", // G5 A
  W: "[[d3,a3,a4]@3 [g2,bb3,bb4]@3 d4@3 ~ g3@3 c3@3 bb3@3 g3@3 c3@3 ~ d4@3 c4@3 bb3@3 [f4,f5]@6 ~@4 d4@3 g3@3 d3@3 bb3@3 ~ g3@3 d3@3 ~@3 g3@3 [d3,g3,g4]@3 ~ g2@3 d4@3 g3@3 d3@3 ~@4 g3@3 d3@3 d4@3 g3@3 [d3,bb3,bb4]@3 ~ [g2,c4,c5]@3 ~@3 g3@3 d3@3 bb3@3 ~ g3@3 d3@3 d4@3 g3@3 [d3,g4,g5]@3 ~ [g2,a4,a5]@3 d4@3 g3@3 c3@3 bb3@3 ~ g3@3 c3@3, ~@6 [c4,c5]@19 ~ [ab3,ab4]@10 ~@6 [eb4,eb5]@6 d5@22 ~@10 bb4@22 ~@16 [g4,g5]@16 ~@7 [bb4,bb5]@19, ~@48 d4@16 d4@6 ~@4 [a3,a4]@6 bb3@6 bb3@16 ~@7 [d4,d5]@10 ~@41]/5", // D5 Gm F G5 Gm C5 G5 Gsus2 …
  X: "[d4@3 c4@3 bb3@3 ~ [d5,d6]@6 [gb4,gb5]@3 [bb4,bb5]@32 [b4,b5]@29 [bb4,bb5]@3 [d5,d6]@29 [db5,db6]@3 [e5,e6]@32 d6@3 g5@3 ~ d6@3 g5@3 d6@3 g5@3 d6@3 ~ g5@3 d6@3 g5@3 d6@3 g5@3 ~ d6@3 g5@3 d6@3 g5@3 d6@3 ~ g5@3 d6@3 g5@3 d6@3 g5@3 ~ [bb3,d6]@3 [c4,g5]@3, [c5,c6]@10 ~@73 g6@64 d4@32 f4@6 ~ c4@32 ~@6]/7", // D Gb Bb B Bb D Db E …
  Y: "d6@3 g5@3 d6@3 ~ g5@3 d6@3 g5@3 d6@3 g5@3 ~ d6@3 g5@3, d4",
  Z: "[d6@3 g5@3 d6@3 ~ g5@3 d6@3 g5@3 d6@3 g5@3 ~ d6@3 g5@3 d6@3 g5@3 d6@3 ~ g5@3 d6@2 g5@2 d6@2 d6@2 g5@2 d6@2 ~ d6@2 g5@2 d6@2 d6@2 g5@2 d6@2 d6@2 ~ g5@2 d6@2 d6@2 g5@2 d6@2 d6@2 g5@2 d6@2 ~ d6@2 g5@2 d6@2 d6@2 g5@2 d6@2 g6@2 ~ c6@2 g6@2 g6@2 c6@2 g6@2 g6@2 c6@2 g6@2 ~ c7@2 g6@2 c7@2 c7@2 g6@2 c7@2 c7@2 ~ g6@2 c7@2 c7@2 g6@2 c7@2 c7@2 g6@2 c7@2 ~ c7@2 g6@2 c7@2, f4@6 c4@38 ~ d4@32 f4@6 c5@32 bb4@6 ~ bb4@38]/5",
  AA: "[g4@19 [g1,g2]@19 [gb1,gb2]@26, [d5,d6]]/2", // G Gb D
  AB: "[c2,c3]@3 [d2,d3]@3 ~@7 d5@2 c5@2 g4@2 f5@2 c5@2 g4@2 ~ d5@2 c5@2 g4@2, ~@3 [eb2,eb3]@13", // C D Eb
  AC: "[c2,c3,g5]@2 ~@2 g4@2 ~@7 d5@2 c5@2 g4@2 f5@2 c5@2 g4@2 ~ d5@2 c5@2 g4@2, ~ c5 ~@14, ~@3 [d2,d3]@6 ~ [eb2,eb3]@22", // C5 D Eb
  AD: "[[d2,d3,g5]@2 ~@2 g4@2 ~@7 eb5@2 c5@2 g4@2 f5@2 c5@2 g4@2 ~ f5@2 c5@2 g4@2 g5@2 ~@2 g4@2 bb5@2 ~@3 g4@2 ~@6 d5@2 c5@2 g4@2 ~ f5@2 c5@2 g4@2 d5@2 c5@2 g4@2 [c2,c3,g5]@3 ~@2 g4@2 ~@6 d5@2 c5@2 g4@2 ~ f5@2 c5@2 g4@2 d5@2 ~@2 g4@2 [eb2,eb3,g5]@3 ~@2 g4@2 ~@6 d5@2 ~@2 g4@2 ~ f5@2 c5@2 g4@2 d5@2 c5@2 g4@2 [c3,c4,g5]@3 ~@2 g4@2 ~@6 eb5@2 c5@2 g4@2 ~ f5@2 c5@2 g4@2, ~@2 c5@2 ~@30 c5@2 ~@5 c5@2 ~@30 c5@2 ~@23 c5@2 ~@5 c5@2 ~@10 c5@2 ~@18 c5@2 ~@21, ~@3 [eb2,eb3]@3 [f2,f3]@19 ~ [bb1,bb2]@9 [bb2,bb3]@6 ~ [ab2,ab3]@6 [g2,g3]@22 ~@4 [d2,d3]@6 [eb2,eb3]@19 [d2,d3]@3 ~@4 [f2,f3]@3 [g2,g3]@9 [c3,c4]@16 ~@4 [d3,d4]@3 [eb3,eb4]@19]/5", // G5 C5 Eb C5 Eb F Bb Ab …
  AE: "[f5@2 c5@2 g4@2 g5@2 ~@2 g4 ~@2 b5@2 ~@2 b5@2 [c3,c4,c6]@64 ~@13, [f3,f4]@9 c5@2 g4@4 g5@2 ~@79, ~@10 g3@6 [b2,b3]@3 ~@77]/3", // C F B
  AF: "[~@13 [d1,g1,g2]@3 [d1,a1,a2]@3 [d1,bb1,bb2]@26 [d1,g1,g2]@3 [f1,a1,a2]@6 [eb1,bb1,bb2]@22 ~ [a1,a2]@3 [bb1,bb2]@3 [eb1,c2,c3]@19 [d1,ab1,ab2]@10 [c1,gb1,gb2]@10 [bb0,g1,g2]@25 [d1,g1,g2]@3 [f1,a1,a2]@6 ~ [d1,bb1,bb2]@22 [bb1,bb2]@3 [c2,c3]@3 ~ [d2,g2,d3]@9 [g2,g3]@16 g3@3 [a2,a3]@3 ~ [c1,g2,bb2,bb3]@19 [c3,c4]@9 [d3,d4]@6 ~ [gb2,gb3]@3, ~@77 f1@6 ~@96 f1@6 ~ eb1@25 [d1,g2]@6 ~@20 ab1@19, ~@237 gb2@16 ~@3]/8", // G5 D5 Gm G5 F Eb5 A Bb …
  AG: "bb1@29 a1@3, [g2,g3]", // G
})).s("gm_church_organ").gain(0.3)

// other · piano
const piano = note(`<
  ~@18 A B ~@2 C ~@3 D E F G H ~@4 I J ~ K L@3 ~@21 M N ~@2 O ~@3 P Q R S T ~@4 U V W X Y@2 ~@20
>`.pickRestart({
  A: "~@13 [d5,d6]@3 [g4,g5]@3 [d5,d6]@3 [g4,g5]@3 ~ [d5,d6]@3 [g4,g5]@3", // D G D G D G
  B: "[d5,d6]@3 [g4,g5]@3 [d5,d6]@3 ~ [g4,g5]@3 ~@19", C: "~@10 [ab2,ab3,ab4]@3 [gb2,gb3,gb4]@3 [gb2,gb3,gb4]@3 ~@13",
  D: "~@16 [ab2,ab3,ab4]@3 [g2,g3,g4]@3 [gb2,gb3,gb4]@3 ~ [bb2,bb3]@3 [a2,a3]@3", // Ab G Gb Bb A
  E: "[bb2,bb3]@3 [a2,a3]@3 [bb2,bb3]@3 ~ [d3,d4]@3 [db3,db4]@3 [eb3,eb4]@3 [f3,f4]@3 [g3,g4]@3 ~ [g2,g3]@3 [a2,a3]@3", // Bb A Bb D Db Eb F G …
  F: "[bb2,bb3]@3 [a2,a3]@3 [bb2,bb3]@3 ~ [d3,d4]@3 [db3,db4]@3 [eb3,eb4]@3 [f3,f4]@3 [g3,g4]@3 ~ [g4,g5]@3 [a4,a5]@3", // Bb A Bb D Db Eb F G …
  G: "[bb4,bb5]@3 [a4,a5]@3 [bb4,bb5]@3 ~ [d5,d6]@3 [db5,db6]@3 [eb5,eb6]@3 [f5,f6]@3 [g5,g6]@3 ~ [g4,g5]@3 [a4,a5]@3", // Bb A Bb D Db Eb F G …
  H: "[bb4,bb5]@3 [a4,a5]@3 [bb4,bb5]@3 ~ [d5,d6]@3 [db5,db6]@3 [eb5,eb6]@3 [f5,f6]@3 [g5,g6]@3 ~@7", // Bb A Bb D Db Eb F G
  I: "~@26 [f4,f5]@3 [g4,g5]@3", J: "~@13 d6 ~@2, ~@26 c6 ~@5", K: "eb5@3 f5@3 gb5@3 ~@20 [eb6,eb7]@3",
  L: "[[eb6,eb7]@2 [d6,d7]@2 [c6,c7]@2 [d6,d7]@61 ~@29]/3", // Eb D C D
  M: "~@6 [d5,d6]@3 ~ [g4,g5]@3 [d5,d6]@3 [g4,g5]@3 [d5,d6]@3 [g4,g5]@3 ~ [d5,d6]@3 [g4,g5]@3", // D G D G D G D G
  N: "[d5,d6]@3 [g4,g5]@3 ~@26", O: "~@3 [ab2,ab3,ab4]@3 [gb2,gb3,gb4]@3 ~ [gb2,gb3,gb4]@3 ~@19",
  P: "~@10 [ab2,ab3,ab4]@3 [g2,g3,g4]@3 [gb2,gb3,gb4]@3 [bb2,bb3]@3 [a2,a3]@3 ~ [bb2,bb3]@3 [a2,a3]@3", // Ab G Gb Bb A Bb A
  Q: "[bb2,bb3]@3 [d3,d4]@3 [db3,db4]@3 ~ [eb3,eb4]@3 [f3,f4]@3 [g3,g4]@3 [g2,g3]@3 [a2,a3]@3 ~ [bb2,bb3]@3 [a2,a3]@3", // Bb D Db Eb F G A Bb …
  R: "[bb2,bb3]@3 [d3,d4]@3 [db3,db4]@3 ~ [eb3,eb4]@3 [f3,f4]@3 [g3,g4]@3 [g4,g5]@3 [a4,a5]@3 ~ [bb4,bb5]@3 [a4,a5]@3", // Bb D Db Eb F G A Bb …
  S: "[bb4,bb5]@3 [d5,d6]@3 [db5,db6]@3 ~ [eb5,eb6]@3 [f5,f6]@3 [g5,g6]@3 [g4,g5]@3 [a4,a5]@3 ~ [bb4,bb5]@3 [a4,a5]@3", // Bb D Db Eb F G A Bb …
  T: "[bb4,bb5]@3 [d5,d6]@3 [db5,db6]@3 ~ [eb5,eb6]@3 [f5,f6]@3 [g5,g6]@3 ~@13", U: "~@19 [f4,f5]@3 [g4,g5]@3 ~@7",
  V: "~@19 c6 d6@2 ~@10", W: "~@26 eb5@3 f5@3", X: "gb5@3 ~@19 [eb6,eb7]@3 ~ [eb6,eb7]@2 [d6,d7]@2 [c6,c7]@2",
  Y: "[[d6,d7]@61 ~@3]/2", // D
})).s("gm_piano").gain(0.45)

// other · piano
const piano_2 = note("<~@48 A B C@2 D ~@40 E F G@2 H ~@8>".pickRestart({
  A: "~@26 [c3,c4]@3 [d3,d4]@3", // C D
  B: "[eb3,eb4]@3 [d3,d4]@3 [eb3,eb4]@3 ~ [g3,g4]@3 [gb3,gb4]@3 [ab3,ab4]@3 [bb3,bb4]@3 [c4,c5]@3 ~ [c3,c4]@3 [d3,d4]@3", // Eb D Eb G Gb Ab Bb C …
  C: "[eb3,eb4]@3 [d3,d4]@3 [eb3,eb4]@3 ~ [g3,g4]@3 [gb3,gb4]@3 [ab3,ab4]@3 [bb3,bb4]@3 [c4,c5]@3 ~ [c3,c4,a7]@3 [d3,d4]@3", // Eb D Eb G Gb Ab Bb C …
  D: "[eb3,eb4]@3 [d3,d4]@3 [eb3,eb4]@3 ~ [g3,g4]@3 [gb3,gb4]@3 [f3,f4]@3 [e3,e4]@3 ~@10", // Eb D Eb G Gb F E
  E: "~@19 [c3,c4]@3 [d3,d4]@3 ~ [eb3,eb4]@3 [d3,d4]@3", // C D Eb D
  F: "[eb3,eb4]@3 [g3,g4]@3 [gb3,gb4]@3 ~ [ab3,ab4]@3 [bb3,bb4]@3 [c4,c5]@3 [c3,c4]@3 [d3,d4]@3 ~ [eb3,eb4]@3 [d3,d4]@3", // Eb G Gb Ab Bb C D Eb …
  G: "[eb3,eb4]@3 [g3,g4]@3 [gb3,gb4]@3 ~ [ab3,ab4]@3 [bb3,bb4]@3 [c4,c5]@3 [c3,c4,a7]@3 [d3,d4]@3 ~ [eb3,eb4]@3 [d3,d4]@3", // Eb G Gb Ab Bb C F D …
  H: "[eb3,eb4]@3 [g3,g4]@3 [gb3,gb4]@3 ~ [f3,f4]@3 [e3,e4]@3 ~@16", // Eb G Gb F E
})).s("gm_piano").gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@30 A ~@9 B ~@34 C ~@9 D ~@20>".pickRestart({
  A: "~@16 x!11 ~@5", B: "~@11 x ~@4", C: "~@10 x!10 ~@12", D: "~ x",
})).gain(0.3)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@30 [~@13 x!3 ~@16] ~@44 [~@6 x!4 ~@22] ~@30>").gain(0.15)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct(`<
  A@2 B@9 C@4 D@7 E F@3 G H I ~@12 D@3 E F@3 G H@6 I B@4 C@7 D@4 E F J ~@12 C@3 D@4 E F@5 K L M@3 N ~
>`.pickRestart({
  A: "x ~@2 x ~ x!2 ~@25", B: "x ~@2 x ~ x!2 ~@3 x ~@2 x ~@2 x ~@15", C: "~@6 x ~@3 x!2 ~ x ~@2 x ~@2 x ~@2 x ~@9",
  D: "~@13 x ~@2 x ~ x!2 ~@2 x ~@3 x ~@2 x ~@2", E: "~@19 x ~@2 x ~ x ~ x ~@2 x ~@2",
  F: "x ~@2 x ~@15 x ~@2 x ~ x ~ x ~@2 x ~@2", G: "x ~@2 x ~@22 x ~@2 x!2 ~", H: "x ~@2 x ~@2 x ~@3 x ~@15 x ~@2 x!2 ~",
  I: "x ~@2 x ~@2 x ~@3 x ~@21", J: "x ~@2 x ~@28", K: "x ~@2 x ~@15 x ~@2 x ~ x ~ x ~@5", L: "~@26 x ~@2 x!2 ~",
  M: "x ~@25 x ~@2 x!2 ~", N: "x",
})).gain(0.22)

// drums · woodblocks · soft notes
const woodblocks_soft = s("woodblock:4").struct(`<
  A B C ~ C ~ C ~ C@3 D E@3 F G@7 H@4 I@2 ~@13 G@3 H@4 I@7 C@4 D E@6 F G@4 H@2 ~@12 D E@2 F G@4 H@5 J K L@4 M
>`.pickRestart({
  A: "~@10 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@5", B: "~@10 x ~@2 x ~@2 x ~@15", C: "~@19 x ~@2 x ~@3 x ~@5",
  D: "~@26 x ~@2 x ~@2", E: "x ~@25 x ~@2 x ~@2", F: "x", G: "x ~@2 x ~@2 x ~@25", H: "~@6 x ~@3 x ~@2 x ~@18",
  I: "~@13 x ~@2 x ~@2 x ~@12", J: "~@6 x ~@3 x ~@2 x ~@15 x ~@2", K: "x ~@2 x ~@2 x ~@3 x ~@2 x ~@18",
  L: "~@3 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@12", M: "x ~@2 x ~ x!2 ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@5",
})).gain(0.07)

stack(church_organ, piano, piano_2, crash, crash_soft, woodblocks, woodblocks_soft)

More by Koji Kondo