Strudelify

Hiroshige No.36 Neo Super-Express

ZUN

KeyA majorTempo286 bpm
0:00/0:00
// Hiroshige No.36 Neo Super-Express — ZUN
// 286 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 5 "Piano" named as a piano, played on piano (its tremolo strings patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5974303; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 227 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(286/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.

// chords · pizzicato strings · "Vĩ cầm"
const pizzicato_strings = note(`<
  ~@21 A@9 B A B A C D E@8 F E G E G E H E@2 I@7 J I K I K I L I@9 J I K I K I L I@2 ~@70 M@9 N M N M O P Q@8 R Q S Q S
  Q T Q@2 U@7 V U W U W U X U@9 V U W U W U X U@2 ~@8
>`.pickRestart({
  A: "~@2 [c6,f6] ~", B: "~@2 [c6,e6] ~", C: "~@2 [c6,g6] ~", D: "~@2 [c6,g#6] ~", E: "~ [c6,f6] ~ [c6,f6]",
  F: "~ [c6,f6] ~ [c6,g6]", G: "~ [c6,e6] ~ [c6,e6]", H: "~ [c6,g6] ~ [c6,g6]", I: "~ [c#6,f#6] ~ [c#6,f#6]",
  J: "~ [c#6,f#6] ~ [c#6,g#6]", K: "~ [c#6,f6] ~ [c#6,f6]", L: "~ [c#6,g#6] ~ [c#6,g#6]", M: "~@9 [a5,d6]@4 ~@3",
  N: "~@9 [a5,c#6]@4 ~@3", O: "~@9 [a5,e6]@4 ~@3", P: "~@9 [a5,f6]@4 ~@3", Q: "~@5 [a5,d6]@4 ~@4 [a5,d6]@3",
  R: "~@5 [a5,d6]@4 ~@4 [a5,e6]@3", S: "~@5 [a5,c#6]@4 ~@4 [a5,c#6]@3", T: "~@5 [a5,e6]@4 ~@4 [a5,e6]@3",
  U: "~@5 [a#5,d#6]@4 ~@4 [a#5,d#6]@3", V: "~@5 [a#5,d#6]@4 ~@4 [a#5,f6]@3", W: "~@5 [a#5,d6]@4 ~@4 [a#5,d6]@3",
  X: "~@5 [a#5,f6]@4 ~@4 [a#5,f6]@3", // A#5
})).s("gm_pizzicato_strings").gain(0.4)

// other · string ensemble 1 · "Vĩ cầm alto"
const string_ensemble_1 = note("<~@220 A@7>".pickRestart({
  A: "[~ [d#3,d#4]@2 [g#3,g#4]@2 [a#3,a#4]@2 [c#4,c#5]@2 [d#4,d#5]@2 [g#4,g#5]@2 [a#4,a#5]@2 [c#5,c#6]@2 [d#5,d#6]@2 [a#4,a#5]@2 [g#4,g#5]@2 [a#4,a#5]@2 [g#4,g#5]@2 [d#4,d#5]@2 [c#4,c#5]@2 [d#4,d#5]@2 [d#3,d#4]@2 [g#3,g#4]@2 [a#3,a#4]@2 [c#4,c#5]@2 [d#4,d#5]@2 [g#4,g#5]@2 [a#4,a#5]@2 [c#5,c#6]@2 [d#5,d#6]@2 [a#4,a#5]@2 [g#4,g#5]@2 [a#4,a#5]@2 [g#4,g#5]@2 [d#4,d#5]@2 [c#4,c#5]@2 [d#4,d#5]@2 [d#3,d#4]@6 [f3,f4]@8 [g3,g4]@22 ~@11]/7", // D# G# A# C# D# G# A# C# …
})).s("gm_string_ensemble_1").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@52 ~@16 A@16 B A@3 B A C A B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 ~@38 D@48 ~@8
>`.pickRestart({
  A: "x!2", B: "x ~@3 x ~@2 x", C: "x ~@2 x ~@2 x ~", D: "~ x ~@7 x ~@6",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~ A@52 ~@16 A@15 B ~@71 C@2 ~@2 C@2 ~@2 D C ~@4 E F@48 ~@8>".pickRestart({
  A: "~ x ~ x", B: "x!5 ~ x ~", C: "~@5 x ~@10", D: "~ x ~@3 x ~@10", E: "~@9 x ~ x ~ x ~ x", F: "~@5 x ~@7 x ~@2",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct(`<
  A B@52 ~@16 B@16 ~@7 B@2 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@2 ~@33 D ~ D E D F@48 ~@8
>`.pickRestart({
  A: "x ~ x!3 ~ x ~", B: "~ x", C: "~ x!2 ~", D: "~ x ~@14", E: "~@5 x ~@3 x ~ x ~ x ~@2", F: "~@9 x ~@6",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B C ~ A D E A D@2 E A D@2 E A D@2 E A D@2 E A D@2 E A D@2 E A D@2 E A D@2 E A D@2 E A D@2 E A D@2 E A ~@16 D@2 E A
  D@2 E A D@2 E A D@2 E A@2 B F G A B F G D@2 F G D@2 F G D@2 F G D@2 F G D@2 F G D@2 F G D@2 F G D@2 F G D@2 F G D@2 F
  G ~@22 H@2 I J H@2 I J H@2 I J H@2 I J H@2 I J H@2 I J H@2 I J H@2 I J H@2 I J H@2 I J H@2 I J H@2 I J H@2 I J H@2 I J
  H@2 I J H@2 I J ~@8
>`.pickRestart({
  A: "~@2 x!3 ~@3", B: "x ~@2 x!2 ~@3", C: "x ~ x ~ x ~ x!2", D: "x ~ x!3 ~@3", E: "x ~@6 x", F: "x ~ x ~@4 x",
  G: "~@3 x!2 ~@3", H: "~ x ~@3 x ~ x ~ x ~@6", I: "~ x ~@13 x", J: "~@5 x ~ x ~ x ~@6",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@168 [~@13 x ~ x] [~ x!4 ~@11] [~ x ~ x ~ x ~ x ~@8] ~@56>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@4 [x!2] [~@3 x]!48 ~@16 [~@3 x]!64 ~@22 [~@13 x ~@2]!64 ~@8>").gain(0.4)

stack(pizzicato_strings, string_ensemble_1, kick, snare, clap, hihat, low_tom, open_hat)

More by ZUN