Strudelify

Agitha's Castle

Koji Kondo

KeyC majorTempo65 bpm
0:00/0:00
// Agitha's Castle — Koji Kondo
// 65 bpm, 6/8, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5419826; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 51 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(65/3)

// 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 · flute
const flute = note("<~@10 A B C ~ A B C ~@15 D E ~@2 D E ~@13>".pickRestart({
  A: "~@41 c6@7", B: "~ b5@11 ~ a5@4 c6@15 ~ a5@4 b5@4 c6@7", C: "~ b5@11 ~ a5@4 b5@23 ~@8",
  D: "c6@8 b5@11 ~ a5@4 c6@15 ~ a5@4 b5@4", E: "c6@8 b5@11 ~ a5@4 b5@23 ~",
})).s("gm_flute").gain(0.4)

// other · music box · "Celesta"
const music_box = note(`<
  ~@2 A B C D E B C F@2 ~ G H I ~ J K L@2 ~@4 M N@3 M O@2 P ~@2 Q R ~@2 S T U@2 ~@3 V W@2 ~@3
>`.pickRestart({
  A: "~@41 [e6,g6,c7]@7", B: "~ b6@4 a6@4 g6@4 a6@4 e6@20 e6@4 f#6@7", C: "~ g6@12 g#6@4 a6@31",
  D: "~ [f6,a6]@8 b6@4 c7@4 d7@8 g6@23", E: "~ [d6,f6]@8 g6@4 a6@4 b6@8 e6@16 [e6,g6,c7]@7",
  F: "[~ [f6,a6]@8 b6@4 c7@4 d7@8 g6@12 b6@4 c7@48 ~@7]/2", G: "~@41 [b5,d6]@7",
  H: "~ c6@12 b5@4 d6@16 a#5@4 c6@4 d6@7", I: "~ [c6,e6]@12 d6@4 g5@24 ~@7", J: "~@41 [a5,c6,f6]@7",
  K: "~ e6@8 d6@8 e6@8 g5@8 c6@8 [a5,c6]@7", L: "[~ f5@24 g5@4 a5@4 b5@4 c6@4 d6@55]/2",
  M: "[e6,g6,c7]@2 b6 a6 g6 a6 e6@5 e6", // C
  N: "[f#6@2 g6@3 g#6 a6@8 [f6,a6]@2 b6 c7 d7@2 g6@6 [d6,f6]@2 g6 a6 b6@2 e6@4]/3", // F Dm
  O: "[f#6@2 g6@3 g#6 a6@8 [f6,a6]@2 b6 c7 d7@2 g6@3 b6]/2", P: "c7", Q: "[b5,d6]@2 c6@3 b5 d6@4 a#5 c6",
  R: "d6@2 [c6,e6]@3 d6 g5@6", S: "[a5,c6,f6] e6 d6 e6 g5 c6", T: "[a5,c6]@2 f5@6 g5 a5 b5 c6", U: "[d6@55 ~@41]/2",
  V: "~@7 [e6,g6,c7]@8 b6@4 a6@4 g6@4 a6@4 e6@17", W: "[~@3 e6@4 f#6@8 g6@12 g#6@4 a6@32 [f6,a6]@8 b6@4 c7@4 ~@17]/2",
})).s("gm_music_box").gain(0.25)

// other · music box · "Celesta" · soft notes
const music_box_soft = note("<~@47 A@4>".pickRestart({
  A: "[~@31 d7@8 g6@24 [d6,f6]@8 g6@4 a6@4 b6@8 e6@16 [e6,g6,c7]@8 b6@4 a6@4 g6@4 a6@4 e6@24 ~@41]/4", // Dm C
})).s("gm_music_box").gain(0.1)

// other · xylophone
const xylophone = note("<~@2 A B C D E B C F@2 ~@13 G H@2 I G J@2 K ~@13 L M ~@4>".pickRestart({
  A: "~@41 c6@7", B: "~ b5@4 a5@4 g5@4 a5@4 e5@20 e5@4 f#5@7", C: "~ g5@12 g#5@4 a5@31", D: "~@17 b5@8 g5@16 ~@7",
  E: "~@17 g5@8 e5@16 c6@7", F: "[~@25 g5@12 f5@4 e5@48 ~@7]/2", G: "c6@2 b5 a5 g5 a5 e5@5 e5",
  H: "[f#5@2 g5@3 g#5 a5@8 ~@4 b5@2 g5@4]/2", I: "~@3 g5 e5@2", J: "[f#5@2 g5@3 g#5 a5@8 ~@6 g5@3 f5]/2", K: "e5",
  L: "~@7 c6@8 b5@4 a5@4 g5@4 a5@4 e5@17", M: "~@3 e5@4 ~@41",
})).s("gm_xylophone").gain(0.3)

// other · xylophone · soft notes
const xylophone_soft = note("<~@46 A@5>".pickRestart({
  A: "[~@7 f#5@8 g5@12 g#5@4 a5@32 ~@16 b5@8 g5@16 ~@24 g5@8 e5@16 c6@8 b5@4 a5@4 g5@4 a5@4 e5@24 ~@41]/5",
})).s("gm_xylophone").gain(0.1)

// chords · epiano1 · "Piano"
const epiano1 = note(`<
  A@3 B C D E B C F@2 G H I J G H K@3 L M L M N O P Q N O R S T U V W T U V X Y@7 ~@4
>`.pickRestart({
  A: "[~@41 e4@4 f4@4 e4@4 f4@4 e4@4 f4@4 e4@4 f4@4 e4@4 f4@4 f#4@4 g4@4 f#4@4 g4@4 f#4@4 g4@4 f#4@4 g4@4 f#4@4 g4@4 f#4@4 g4@4 g#4@4 a4@4 c4@7, ~@41 c4@46 ~@2 d4@46 ~@9]/3",
  B: "~ g4@8 e4@8 c4@8 [e4,g4]@15 ~ d4@7", C: "~ [g4,a4]@8 f#4@8 d4@8 [f#4,a4]@15 ~ f4@7",
  D: "~ c5@8 a4@8 [e4,g4]@8 [e4,b4]@8 g4@8 d4@7", E: "~ a4@8 f4@8 c4@8 g4@8 e4@8 c4@7",
  F: "[~ c5@8 a4@8 g3@8 [f4,g4]@8 d4@8 ~@8 e4@4 f4@4 e4@4 f4@4 e4@15 ~@9 f3@4 c4@3, ~@41 c4@46 ~@9]/2", // Fsus2
  G: "~ a4@15 ~ f#3@4 c4@4 a4@15 ~ g3@4 d4@3", H: "~ b4@15 ~ g#3@4 d4@4 b4@15 ~ a3@4 c4@3",
  I: "~ e4@15 ~ a#3@4 d4@4 e4@15 ~ b3@4 d4@3", J: "~ f4@23 ~ e3@4 f3@4 f#3@4 g3@4 f3@4 c4@3",
  K: "[~ e4@15 ~ a#3@4 d4@4 e4@15 ~ a3@23 ~ d3@23 ~ c4@4 ~ g4@4 b3@4 g4@4 ~ a3@4 g4@4 ~@4 b3@25, ~@29 b2@7, ~@13 d3@3, ~@59 g3@13]/3",
  L: "e4 f4 e4 f4 e4 f4 e4 f4 e4 f4 f#4 g4, c4@23 ~", M: "f#4 g4 f#4 g4 f#4 g4 f#4 g4 f#4 g4 g#4 a4, d4@23 ~",
  N: "c4@8 g4@8 e4@8 c4@8 [e4,g4]@15 ~", O: "d4@8 [g4,a4]@8 f#4@8 d4@8 [f#4,a4]@15 ~", P: "f4 c5 a4 [e4,g4] [e4,b4] g4",
  Q: "d4 a4 f4 c4 g4 e4", R: "f4 c5 a4 g3 [f4,g4] d4", S: "~@8 e4@4 f4@4 e4@4 f4@4 e4@15 ~@9, c4@23 ~",
  T: "f3@4 c4@4 a4@15 ~ f#3@4 c4@4 a4@15 ~", U: "g3@4 d4@4 b4@15 ~ g#3@4 d4@4 b4@15 ~",
  V: "a3@4 c4@4 e4@15 ~ a#3@4 d4@4 e4@15 ~", W: "b3@4 d4@4 f4@23 ~ e3@4 f3@4 f#3@4 g3@4", X: "a3@23 ~ d3@23 ~",
  Y: "[c4@4 g4@4 ~ b3@4 g4@4 a3@4 ~ g4@4 ~@4 b3@25 e4@4 f4@4 e4@4 f4@4 e4@4 f4@4 e4@4 f4@4 e4@4 f4@4 f#4@4 g4@4 f#4@4 g4@4 f#4@4 g4@4 f#4@4 g4@4 f#4@4 g4@4 f#4@4 g4@4 g#4@4 a4@4 e4@4 f4@4 e4@4 f4@4 e4@4 f4@4 e4@4 f4@4 e4@4 f4@4 f#4@4 g4@4 f#4@4 g4@4 f#4@4 g4@4 f#4@4 g4@4 f#4@4 g4@4 f#4@4 g4@4 g#4@4 a4@4 c4@8 g4@8 e4@8 c4@8 [e4,g4]@15 ~@42, ~@13 b2@14 ~@141, ~@9 d3@9 ~@94, ~@29 g3@26 c4@46 ~@2 d4@46 ~@2 c4@46 ~@2 d4@46 ~@91]/7", // Em
})).s("gm_epiano1").gain(0.3)

// chords · epiano1 · "Piano" · soft notes
const epiano1_soft = note("<~@46 A@5>".pickRestart({
  A: "[~@7 d4@8 [g4,a4]@8 f#4@8 d4@8 [f#4,a4]@15 ~ f4@8 c5@8 a4@8 [e4,g4]@8 [e4,b4]@8 g4@8 d4@8 a4@8 f4@8 c4@8 g4@8 e4@8 c4@8 g4@8 e4@8 c4@8 [e4,g4]@15 ~@42]/5", // Gsus2 F#m Em E5 Em
})).s("gm_epiano1").gain(0.15)

stack(flute, music_box, music_box_soft, xylophone, xylophone_soft, epiano1, epiano1_soft)

More by Koji Kondo