Strudelify

Vor dem Schloss

Jim Steinmn

KeyA minorTempo70 bpm
0:00/0:00
// Vor dem Schloss — Jim Steinmn
// 70 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 21, 4/4 at bar 22) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/4494766; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 23 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/4)

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

// chords · piano
const piano = note("<A@2 B C D C E F G H I J K L M N O P ~@3 Q ~>".pickRestart({
  A: "[[a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~, [a1,e2]@31 ~]/2", // Am A5
  B: "[a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~, [a1,e2]", C: "[g3,b3,d4]!4, [g1,d2]@15 ~",
  D: "[a3,c4,e4]!4, [a1,e2]@15 ~", E: "[c3,g3] g3 ~ g2 [c3,g3] g3 ~ g2, [c4,e4] [g3,c4,e4] [c4,e4] [g3,c4,e4]",
  F: "a#2 ~@2 f2 a#2 ~@2 f2, [a#3,d4,f4] [c4,e4,f4] [a#3,d4]!2, ~ f3@2 ~@2 f3@2 ~", // A# Fmaj7 A#
  G: "c3 ~@2 g2 c3 ~@2 g2, [c4,e4]!4, ~ g3@2 ~@2 g3@2 ~", // C
  H: "a#2 ~@2 f2 [b1,b2,g#3,d4,f4]@4, [a#3,d4]!2 ~@2, ~ f3@2 ~@5", // Bdim A#
  I: "[d2,a2,d3,f3,a3]@2 d3 f3 [d2,a2]@2 [e3,g#3]@2 [d2,a2,f3,a3]@2 d3 f3 a3 g#3 g3 f3, ~@4 a3 ~@7 [d2,a2]@2 ~@2", // Dm D5 E Dm D5
  J: "[d2,a2,d3,f3,a3]@2 d3 f3 [d2,a2]@2 g#3@2 [d3,f3,a3]@4 a3 g#3 g3 f#3, ~@4 a3 ~@3 [d2,a2]@2 ~@2 [d2,a2]@2 ~@2", // Dm D5 Dm D5
  K: "d2@2 a2@2 [f3,f4,a4]@2 ~ [f4,g#4] d2@2 a2@2 f3@2 a2@2, [f3,a3]@2 ~ a2 [f4,a4]@4", // F Fm F
  L: "[d#2,g4,a#4] [a#2,f4,a4] [g3,d#4,g4] [a#2,a#3,f4] [d#2,g3,d#4] [a#2,a#3,f4] [g3,d#4,g4] [a#2,g4,a#4]", // D# A#maj7 Cm A#5 D# A#5 Cm D#
  M: "d2@2 a2@2 [f3,f5,a5]@2 ~ [e5,g#5] d2@2 a2@2 [f3,f4,a4]@2 ~ [f4,g#4], a4@2 ~ a2 [f5,a5]@2 ~ a2", // F E F Fm F
  N: "d2@2 a2@2 a3 g#3 g3 f#3 d2@2 a2@2 f3@2 a2@2, [f4,a4]@2 f3 a2 [f3,a3]@2 [f4,a4]@2", // F
  O: "[d#2,g4,a#4] [a#2,f4,a4] [g3,d#4,g4] [a#2,a#3,f4] [d#2,g3,d#4] [a#2,a#3,f4] [g3,d#4,g4] [c3,g4,a#4]", // D# A#maj7 Cm A#5 D# A#5 Cm C7
  P: "~ d2 a2 [e4,f4,a4], [d4,f4,a4] ~", // Fmaj7 Dm
  Q: "[a#1,a#2]@4 [c2,c3]@2 [c#2,c#3,g#4]@2 [d4,f4,a4]@2 a3 d4 ~@4, [g3,c4,e4,g4]@3 ~ f2@2 ~@2", // A# C C#5 Dm C
})).s("gm_piano").gain(0.4)

// chords · piano · soft notes · Dm D# C Dm D#
const piano_soft = note("<~@18 [[d5,f5,a5] [d#5,g5,a#5]] [[c5,e5,g5] [d5,f5,a5]] [[d5,f5,a5] [d#5,g5,a#5]] ~@2>")
  .s("gm_piano").gain(0.15)

stack(piano, piano_soft)