Strudelify

A Thousand Leagues Below

Manami Matsumae

KeyD majorTempo100 bpm
0:00/0:00
// A Thousand Leagues Below — Manami Matsumae
// 100 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5964482; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 58 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · piano · "Grand Piano"
const piano = note(`<
  A B C D A B C E F G H I F G J K L K M N O P Q R S T U R S T U V W F G H I F G J K L K M N O P Q R S T U R S T U V W
>`.pickRestart({
  A: "[g#3,c4]@2 a#3 [g#3,c4]@2 a#3 [g#3,c4]@2 a#3 [g#3,c4]@2 a#3 [g#3,c4] a#3 [g#3,c4] a#3", // G#
  B: "[g3,b3]@2 a3 [g3,b3]@2 a3 [g3,b3]@2 a3 [g3,b3]@2 a3 [g3,b3] a3 [g3,b3] a3", // G
  C: "[f#3,a#3]@2 g#3 [f#3,a#3]@2 g#3 [f#3,a#3]@2 g#3 [f#3,a#3]@2 g#3 [f#3,a#3] g#3 [f#3,a#3] g#3", // F#
  D: "[g3,b3]@2 a3 [g3,b3]@2 a3 [g3,b3]@2 a3 [g3,b3]@2 a3 [g3,b3] ~@3", // G
  E: "[g3,b3]@2 [d#3,g3] [g#3,c4]@2 [e3,g#3] [a3,c#4]@2 [f3,a3] [a#3,d4]@2 a#3!5", // G D# G# E A F A#
  F: "[c4,f4,b4]@3 [c4,f4]@2 ~@3 [c4,f4,b4]@3 [c4,f4]@2 ~@3, ~@3 a4@4 ~@4 a4@4 ~", // F F5 F F5
  G: "[b3,d4,a4]@3 [b3,d4,g4]@3 [b3,d4,f#4]@2 [b3,d4,e4]@3 [b3,d4]@3 [f#3,b3]@2", // Bm7 G Bm E7 Bm B5
  H: "[c4,f4,b4]@3 [c4,f4]@2 ~@3 [c4,f4,b4]@3 [c4,f4,a4]@3 g4@2, ~@3 a4@4 ~@9", I: "[b3,d4]@3 ~@13, f#4@15 ~",
  J: "[b3,c#4] ~ [g3,g4]@2 [e3,e4]@2 [b2,b3] [a#2,a#3]@2 [f#2,f#3] [f#3,a#3,c#4,f#4]@6, c#3 ~@7", // Bsus2 G E B A# F#
  K: "f4 c#4 d4 f4 c#4 d4 f4 c#4 [c#4,e4] ~ d4 [c#4,e4] ~ d4 [c#4,e4] c#4, [g#3,b3]@3 [g#3,b3]@3 [g#3,b3]@2 a#3@3 a#3@3 a#3@2, ~@9 c#4@2 ~ c#4@2 ~@2", // C#m G#m
  L: "d4 e4 f#4 d4 e4 f#4 d4 f#4 [a#4,b4] f#4 d4 e4 ~@2 [f#3,b3]@2, [f#3,b3]@3 [f#3,b3]@3 [f#3,b3]@2 [f#3,d4]@3 [f#3,b3]@3 ~@2, ~@3 f#4", // Bmaj7 B5 D B5
  M: "[f#3,b3,f#4]@2 ~@2 b4@2 [f#3,b3,f#4]@2 [f#3,d4]@3 [f#3,b3]@3 [f#3,b3]@2, ~ d4 ~@2 d5@4, ~@3 [f#3,b3]@3 ~@10", // B5 D B5
  N: "g4 e4 f#4 g4 e4 f#4 g4 f#4 e4 f#4 ~ [a3,c#4]@3 [a3,c#4]@2, [a#3,d4]@3 [a#3,d4]@3 [a#3,d4]@2 [a3,c#4]@2 g4@4 ~@2", // A A# A
  O: "f#4 g4 a4 f#4 g4 a4 f#4 a4 g4 a4 ~ [b3,e4]@3 [b3,e4]@2, [a3,d4]@3 [a3,d4]@3 [a3,d4]@2 [b3,e4]@2 b4@4 ~@2", // E5 D5 E5
  P: "g#4 a#4 b4 g#4 a#4 b4 g#4 b4 [c#4,f4]@2 ~@2 g#4@2 [c#4,f4,b4]@2, [b3,c#4]@3 [b3,c#4]@3 [b3,c#4]@2 [c#5,d5] ~ b4@2 ~@4, ~@11 [c#4,f4]@3 ~@2", // C# C#7 Bsus2 Dmaj7 C#
  Q: "a#3 f#3 f3 f#3@2 f#3 f3 f#3!3 f3 f#3@4 ~, a#4 ~@3",
  R: "[d4,b4]@2 [b3,f#4] [d4,b4]@2 [b3,f#4] [d4,b4]@2 [b3,f#4] [d4,b4]@2 [b3,f#4] [d4,b4] [e4,c#5] [f#4,d5] [d4,b4]", // G B5 G B5 G B5 G B5 …
  S: "[e4,c#5]@2 [c#4,a4] [e4,c#5]@2 [c#4,a4] [e4,c#5]@2 [c#4,a4] [e4,c#5]@2 [c#4,a4] [e4,c#5] [f#4,d5] [g4,e5] [e4,a5]", // C#m F#m C#m F#m C#m F#m C#m F#m …
  T: "f#4@2 d4 f#4@2 d4 f#4@2 d4 f#4@2 d4 f#4 g4 [a4,g5] [d5,f#5], a5@13 ~@3", // A7 D
  U: "[c#5,e5] [b4,d5]@2 [a#4,c#5]@2 [g4,b4]@2 [f#4,a#4]@2 [e4,g4]@2 [d4,f#4]@2 [c#4,f#4] [e4,g#4] [f#4,a#4]", // C#m Bm A#m G F# Em D F#5 …
  V: "[g4,b4] [a4,c#5] [b4,d5] [c#4,e4]@2 [d4,f#4] [e4,g4] [f#4,a4]@2 [e4,b4] [d4,c#5] [b3,d4]@2 e4 ~ b3, ~@13 c#4@2 ~, ~@7 f#4", // G A Bm C#m D Em F#m E5 …
  W: "g4 [c#4,f#4] [g3,e4] d4 c#4 [b3,f#5] a#3 b3@3 ~@6, ~@3 f#3@2 ~@11", // F#5 C B5
})).s("gm_piano").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@4 [x!2]!54>").gain(0.2)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@7 C B@2 C B@3 C B@3 C B@3 C B@3 C B@5 C B@2 C B@3 C B@3 C B@3 C B@3 C B@2
>`.pickRestart({
  A: "~@9 x ~@6", B: "~ x ~ x", C: "~@4 x ~@6 x!2 ~@3",
})).gain(0.2)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@3
  [~@13 x!3]
  [~ x!3 ~ x!3 ~ x!3 ~ x!3]!4
  [~ x!2 ~@2 x!3 ~ x!2 ~@2 x!3]!7
  [~ x!2 ~@3 x!2 ~ x!2 ~@3 x!2]!18
  [~ x!2 ~@2 x!3 ~ x!2 ~@2 x!3]!7
  [~ x!2 ~@3 x!2 ~ x!2 ~@3 x!2]!18
>`).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct("<~@4 [~@3 x]!54>").gain(0.2)

stack(piano, kick, snare, hihat, open_hat)