Strudelify

The Legend of Ashitaka

Joe Hisaichi

KeyA♭ majorTempo75 bpm
0:00/0:00
// The Legend of Ashitaka — Joe Hisaichi
// 75 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5840908; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 37 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(75/4)

// 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.

// other · violin · "Violin I"
const violin = note("<~@7 A B C D E F G H I J ~@3 K L M L N O P Q G H I R G H S T U>".pickRestart({
  A: "~@5 c4 f4 c5", B: "c5@2 bb4@4 ab4 g4", C: "c4 eb4 f4@3 f4 ab4 c5", D: "eb5@4 bb4 ~ c5 eb5",
  E: "bb4 ~ c5 eb5 ab4 g4 c4 eb4", F: "f4@4 f4 c5 f5 c6", G: "c6@2 bb5@4 ab5 g5", H: "c5 eb5 f5@3 f5 ab5 c6",
  I: "eb6@3 c6 d6@3 bb5", J: "c6@8 c6 g5 eb5 d5 c5 g4 eb4 ~", K: "~@3 bb5", L: "c6@3 c6 bb5 c6 eb6 c6",
  M: "bb5@2 ab5 f5 ab5@2 ab5 bb5", N: "ab5", O: "c5@2 eb5@2 f5@2 ab5@8 f5 ab5",
  P: "bb5@2 ab5@2 bb5@2 c6@4 bb5 [ab5,a5] g5@2 ~@2", Q: "~@5 c5 f5 c6", R: "c6@4 ~ c5 f5 c6", S: "eb6@4 bb5 ~ c6 eb6",
  T: "bb5 ~ c6 eb6 ab5 g5 c5 eb5", U: "f5",
})).s("gm_violin").gain(0.4)

// other · violin · "Violin I" · soft notes
const violin_soft = note("<~@5 A@3 ~@8 B C D C E ~@16>".pickRestart({
  A: "[~@3 eb4@3 c4@4 ~@2]/3", B: "~@15 c4", C: "f4", D: "eb4", E: "g4@2 ab5 ~",
})).s("gm_violin").gain(0.2)

// other · viola
const viola = note("<~@2 A B C D E@2 F@2 G H I J K L M N O P Q R S R T U V W J K L X Y Z AA AB AC>".pickRestart({
  A: "~@2 f3 c4", B: "bb3@6 f3 c4", C: "bb3@6 c4 db4", D: "db4@3 eb4", E: "[f4 c4@2 ~]/2",
  F: "[ab3@2 bb3@3 c4 bb3 ab3]/2", G: "bb3@4 db4 ~ eb4@2", H: "db4 ~ c4@2 bb3@2 g3@2", I: "bb3@2 ab3 g3 ab3@2 f3 c4",
  J: "c4@2 bb3@4 ab3 g3", K: "c3 eb3 f3@3 f3 ab3 c4", L: "eb4@3 c4 d4@3 bb3", M: "c4@4 ~@3 ab4",
  N: "g4 f4 g4 c4@2 f4@3", O: "c4 bb3 c4 g3@4 g4", P: "g4@2 f4@2 g4@2 c4@4 f4@4 e4 eb4", Q: "d4 ~",
  R: "c4@3 c4 bb3 c4 eb4 c4", S: "bb3@2 ab3 f3 ab3@2 ab3 bb3", T: "~@5 ab3 g3 c3", U: "eb3@2 f3@12 f3 ab3",
  V: "bb3 ab3 bb3 c4@4 ~", W: "~@6 f3 c4", X: "c4@4 ~ c4 f4 c5", Y: "c5@2 bb4@4 ab4 g4", Z: "c4 eb4 f4@3 f4 ab4 c5",
  AA: "eb5@4 bb4 ~ c5 eb5", AB: "bb4 ~ c5 eb5 ab4 g4 c4 eb4", AC: "bb3@2 ab3 g3 ab3@4",
})).s("gm_viola").gain(0.4)

// other · cello · "Violoncello"
const cello = note("<A B C D@2 E@3 F G H I J F G K L M N O P Q R S R T U V F W X Y F W Z I AA>".pickRestart({
  A: "c3@4 eb3 ~@3", B: "c3 g3", C: "g3", D: "[db3@2 eb3 c3@4 ~]/2", E: "[eb3@2 db3 ab2@2 bb2 g2@4 ~@2]/3",
  F: "db2 ab2 f3 ab2 eb2 bb2 g3 bb2", G: "f2 c3 ab3 c3 g3 c3 f3 c3", H: "c2 ab2 eb3 ab3 bb2 ~ ab2@2",
  I: "bb2 ~ c3@2 eb3@2 c3@2", J: "c3@4 c3!2 f3 c3", K: "c3 g3 eb4 g3 g2 d3 bb3 d3", L: "c2 g2 d3 eb3 c3@4",
  M: "db2 ab2 f3 g3@2 f3 eb3@2", N: "ab2 eb3 bb3 c4@2 bb3 eb3@2", O: "db2 ab2 f3 g3@2 f3 ab2@2",
  P: "c2 g2 d3 eb3@3 c3@2", Q: "db2@2 db3@3 f3 db3 ab2 bb2@2 eb3@3 g3 eb3 bb2",
  R: "f2@2 db3@3 f3 db3 ab2 f2@2 db3@3 f3 db3 ab2", S: "ab2@2 db3@3 f3 db3 ab2 bb2@2 eb3@3 g3 eb3 bb2",
  T: "gb2 db3 gb3 db3 gb3 db3 gb3 db3", U: "f2 c3 f3 c3 g2@3 g3", V: "c4@2 bb3 g3 f3 g3 c3@2",
  W: "f2 c3 ab3 c3 g3 c3 g3 c3", X: "c2 g2 c3 eb3 g3 d3 g2@2", Y: "c2 g2 eb2 d2 c2@4", Z: "c2 g2 c3 eb3 bb2 ~ ab2@2",
  AA: "c3",
})).s("gm_cello").gain(0.4)

// bass · contrabass
const bass = note("<A B C D@2 E@3 F G H I G F J K L ~@3 M F G F G N O P F J K Q F G H I G>".pickRestart({
  A: "g1@4 bb1 ~@3", B: "g1 c2", C: "a1", D: "[gb1@2 ab1 f1@4 ~]/2", E: "[ab2@2 gb2 db2@2 eb2 c2@4 ~@2]/3",
  F: "db2 eb2", G: "f2", H: "c2@4 bb1 ~ ab1@2", I: "bb1 ~ c2@2 eb2@2 c2@2", J: "f2@14 eb2 db2", K: "c2 g1", L: "c2",
  M: "~ c2", N: "gb2", O: "f2@4 c2@3 g2", P: "c3@2 bb2 g2 f2 g2 c2@2", Q: "c2 g2 eb2 d2 c2@4",
})).s("gm_contrabass").gain(0.45)

// bass · acoustic bass
const bass_2 = note("<~@17 [db2 ~@2 db2] [ab1 ~@2 eb2] [db2 ~@2 db2] [c2 ~@3] ~@16>").s("gm_acoustic_bass").gain(0.45)

stack(violin, violin_soft, viola, cello, bass, bass_2)