Strudelify

dragon roost island

Kenta Nagata

KeyF majorTempo148 bpm
0:00/0:00
// dragon roost island — Kenta Nagata
// 148 bpm, 3/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/810111; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 150 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(148/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · acoustic guitar nylon · "Tenor Ukulele"
const acoustic_guitar_nylon = note(`<
  A@2 ~@2 B C B C B C B C B C D E F G B H I C J K J K L M L M L M L M L M L M L M N O ~@4 P Q R@3 S L M L M L M L M T U
  V W T U X@2 T U V W P Q R@3 S ~ Y Z Y Z AA AB AC AD AA AE AF@2 AG@2 AH@2 AI@2 AC AJ AK AL AM ~ AN AO AN AP AN AO AN AQ
  AR AS AT@2 AU AV AU AW AR AS AU AX AU AV AY AJ AK AL AM AZ AA BA BB BC BD BE BF BG BH AK BI BB BJ BK AM@3 BL BM
>`.pickRestart({
  A: "[[d4,gb4,a4]@3 [d4,gb4,a4]!2 [d4,gb4,a4]@3 [d4,gb4,a4]@24]/2", B: "d4@8 g4@5 bb4@3", C: "c4@5 f4@5 ~ a4@5",
  D: "d4@8 f4@5 bb4@3", E: "d4@5 f4@5 ~ bb4@5", F: "eb4@8 ab4@5 c5@3", G: "eb4@5 ab4@5 ~ c5@5", H: "d4@5 g4@5 ~ bb4@5",
  I: "c4@8 f4@5 a4@3", J: "eb4@8 g4@5 bb4@3", K: "eb4@5 g4@5 ~ bb4@5",
  L: "[d4,g4,bb4]@3 [d4,g4,bb4]!2 [d4,g4,bb4]@3 [d4,g4,bb4]@5 [d4,g4,bb4]@3", // Gm
  M: "[c4,f4,a4]@3 [c4,f4,a4]@2 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4,a4]@2 [c4,f4,a4]@3", // F
  N: "[d4,f4,bb4]@3 [d4,f4,bb4]!2 [d4,f4,bb4]@3 [d4,f4,bb4]@5 [d4,f4,bb4]@3", // Bb
  O: "[d4,f4,bb4]@3 [d4,f4,bb4]@2 [d4,f4,bb4]@3 [d4,f4,bb4]@3 [d4,f4,bb4]@2 [d4,f4,bb4]@3", // Bb
  P: "[c4,e4,g4,c5]@3 [c4,e4,g4,c5]!2 [c4,e4,g4,c5]@3 [c4,e4,g4,c5]@5 [c4,e4,g4,c5]@3", // C
  Q: "[c4,e4,g4,c5]@3 [c4,e4,g4,c5]@2 [c4,e4,g4,c5]@3 [c4,e4,g4,c5]@3 [c4,e4,g4,c5]@2 [c4,e4,g4,c5]@3", // C
  R: "[eb4,g4,c5]@3 [eb4,g4,c5]!2 [eb4,g4,c5]@3 [eb4,g4,c5]@5 [eb4,g4,c5]@3", // Cm
  S: "[eb4,g4,c5]@3 [eb4,g4,c5]@2 [eb4,g4,c5]@3 [eb4,g4,c5]@3 [eb4,g4,c5]@2 [eb4,g4,c5]@3", // Cm
  T: "[eb4,g4,bb4]@3 [eb4,g4,bb4]!2 [eb4,g4,bb4]@3 [eb4,g4,bb4]@5 [eb4,g4,bb4]@3", // Eb
  U: "[eb4,g4,bb4]@3 [eb4,g4,bb4]@2 [eb4,g4,bb4]@3 [eb4,g4,bb4]@3 [eb4,g4,bb4]@2 [eb4,g4,bb4]@3", // Eb
  V: "[d4,f4,a4]@3 [d4,f4,a4]!2 [d4,f4,a4]@3 [d4,f4,a4]@5 [d4,f4,a4]@3", // Dm
  W: "[d4,f4,a4]@3 [d4,f4,a4]@2 [d4,f4,a4]@3 [d4,f4,a4]@3 [d4,f4,a4]@2 [d4,f4,a4]@3", // Dm
  X: "[c4,f4,a4]@3 [c4,f4,a4]!2 [c4,f4,a4]@3 [c4,f4,a4]@5 [c4,f4,a4]@3", Y: "d4@8 g4@3 bb4@2 g4@3",
  Z: "c4@8 f4@3 a4@2 f4@3", AA: "bb4@8 a4@3 bb4@2 g4@3", AB: "c5 a4", AC: "g4", AD: "d4", AE: "c5 f5",
  AF: "[d5@27 ~@2 bb4@3]/2", AG: "[c5@8 d5 c5@18 ~@2 c5@3]/2", AH: "[bb4@8 g4@19 ~@2 bb4@3]/2",
  AI: "[c5@8 d5 c5@18 c5@2 bb4@3]/2", AJ: "a4!2 ~ a4!3 ~ a4!3 ~ a4!3 ~ a4", AK: "bb4!2 ~ bb4!3 ~ bb4!3 ~ bb4!3 ~ bb4",
  AL: "c5!2 ~ c5!3 ~ c5!3 ~ d5!3 ~ d5", AM: "g5!2 ~ g5!3 ~ g5!3 ~ g5!3 ~ g5", AN: "g5@3 g5 g5@4 g5@5 g5@3",
  AO: "f5@3 f5@2 f5@3 a5@3 a5@2 a5@3", AP: "f5@3 f5@2 f5@3 f5@3 f5@2 f5@3", AQ: "f5@3 f5@2 f5@3 a5@3 g5@2 d5@3",
  AR: "g5!2 ~ g5!3 ~ g5 f5!2 ~ f5!3 ~ f5", AS: "d5!2 ~ d5!3 ~ d5 bb4!2 ~ bb4!3 ~ bb4",
  AT: "[c5!2 ~ c5!3 ~ c5!3 ~ c5!3 ~ c5@9 d5@3 g4@2 bb4@3]/2", AU: "c5!2 ~ c5!3 ~ c5!3 ~ c5!3 ~ c5",
  AV: "c5!2 ~ c5!3 ~ c5!2 c5@4 bb4@3", AW: "c5!2 ~ c5!3 ~ c5!2 c5@4 d5@3", AX: "c5@8 d5@3 g4@2 bb4@3", AY: "c5",
  AZ: "~@13 d4@3", BA: "c5!2 ~ c5!3 ~ c5 a4!2 ~ a4!3 ~ a4", BB: "g4!2 ~ g4!3 ~ g4!3 ~ g4!3 ~ g4",
  BC: "d4!2 ~ d4!3 ~ d4!3 ~ d4!3 ~ d4", BD: "bb4!2 ~ bb4!3 ~ bb4 a4!2 ~ bb4!2 g4 ~ g4",
  BE: "c5!2 ~ c5!3 ~ c5 f5!2 ~ f5!3 ~ f5", BF: "d5!2 ~ d5!3 ~ d5!3 ~ d5!3 ~ d5", BG: "d5!2 ~ d5!3 ~ d5!3 ~@3 d5@3",
  BH: "g5!2 ~ g5!3 ~ g5 f5!2 ~ d5!2 c5 ~ c5", BI: "bb4!2 ~ bb4!3 ~ bb4 a4!2 ~ g4!2 f4 ~ f4",
  BJ: "g4!2 ~ g4!3 ~ g4 f4!2 ~ g4!2 a4 ~ a4", BK: "bb4!2 ~ bb4!3 ~ bb4 c5!2 ~ c5!2 d5 ~ d5",
  BL: "g5!2 ~ g5!3 ~ g5!2 g5@4 f5@3", BM: "g5@3 ~@13",
})).s("gm_acoustic_guitar_nylon").gain(0.27).pan(0.4)

// drums · rim
const rim = s("rim").struct(`<
  ~ A@2 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C B C B A B A B A B A
  B A B A B A B A B A B A B A B A B A C B ~@23 B A B A B A B A B A B A B A B A B A B A B A B D B@3 C B C B C B C B C B C
  B C B C B C B C B D
>`.pickRestart({
  A: "x!2", B: "x ~@4 x ~@5 x ~@4", C: "x ~@7 x ~@4 x ~@2", D: "x",
})).gain(0.8).pan(0.4)

stack(acoustic_guitar_nylon, rim)