Strudelify

Concierto de Aranjuez

Catcher Reeves

KeyD majorTempo68 bpm
0:00/0:00
// Concierto de Aranjuez — Catcher Reeves
// 68 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5856111; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 57 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(68/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@2 C@2 D@2 E@2 F@2 ~@10 G H I J K L M N O@2 P Q R@2 S T U V W X@6 Y@2 Z AA AB Z ~@4
>`.pickRestart({
  A: "~@5 b4@19 ~@5 b4@19, b2@4 f#4@20 ~@3 d4 f#4@20, ~ f#3@23 b2@24, ~@2 b3@22 ~ f#3@23, ~@3 d4@21 ~@2 b3@22",
  B: "[~@29 b4@19 ~@12 f#5@6 g5@6 ~@12 b5 g5@5 f#5@6, b2@3 e5 f#4@21 f#3@2 d4 f#4@20 ~@2 b3@2 f#4 b4@19 a5@3 c#4 e4 b4@19, f#5@2 b3@4 f#5@45 d4@21 ~@2 g3@22, ~ f#3@4 b4@21 b3@22 ~ f#3@23 ~ a2@23, ~ d4@7 b2@8 b2@8 e2@8]/2",
  C: "[~@29 b4@19 ~@12 g5@6 a5@6 ~@12 c#6@11 ~, b2@3 e5 f#4@21 f#3@2 d4 f#4@20 ~@2 b3@2 f#4 b4@19 b5@3 d4 f#4 b4@19, f#5@2 b3@4 f#5@45 d4@21 ~@2 b3@22, ~ f#3@4 b4@21 b3@22 ~ f#3@23 ~ f#3@23, ~ d4@7 b2@8 b2@8 b2@8]/2",
  D: "[~@3 g5@3 g5@3 f#5@3 ~@4 d5@2 ~@9 f#5@3 d5@3 c#5@3 ~@3 e5@3 c#5@3 b4@3, e2@4 g4 b4@19 f#5@3 e4 [g4,e5] b4@7 e5@15 e4 g4 b4@19 d5@3 e4 g4 b4@13 ~@6, a5@3 e4@21 ~@2 b3@22 ~@2 b3@22 ~@2 b3@22, ~ e3@23 e2@24 e2@24 e2@24, ~@2 b3@22 ~ e3@23 ~ e3@23 ~ e3@23]/2", // C
  E: "[~@29 g4@19 ~@12 c#5@6 d5@6 ~@12 d5@6 c#5@6, f#2@3 b4 c#4 g4 c#5@45 a#3 c#4 f#4@19 e5@3 a#3 c#4 f#4@19, c#5@2 e3@22 ~ b2@2 a#3 c#4@20 ~@2 e3@22 ~@2 e3@22, ~ b2@23 f#2@24 f#2@24 f#2@24, ~@3 a#3@21 ~@2 e3@22 ~ b2@23 ~ b2@23]/2",
  F: "[~@29 f#4@19 ~@5 f#4@19 ~@5 f#4@19, c#5@25 b2 f#3 b3 d4@20 ~ b2@2 b3 c#4@20 ~@2 f#3@2 d4@20, f#2 b3@7 b4@17 b3@7, ~ b2@3 e4@44 ~@2 f#3@22 ~ b2@23, ~@2 f#3@3 f#4@19 f#2@24 f#2@24 f#2@24]/2",
  G: "~@29 g4@19, g2@4 d4 g4@22 b3 d4@20, g4@3 b3@21 ~@2 g3@22, ~ d3@23 g2@24, ~@2 g3@22 ~ d3@23",
  H: "~ f#4@7 ~ e4@7, g2!2, f#4 b3@11 e4 b3@11, ~ d3@23 ~ d3@23",
  I: "~@29 f#4@19, f#2@4 c#4 f#4@22 a3 c#4@20, f#4@3 a3@21 ~@2 f#3@22, ~ c#3@23 f#2@24, ~@2 f#3@22 ~ c#3@23",
  J: "~ e4@5 ~ d4@5, f#2!2, e4 a3@7 d4 a3@7, ~ c#3@23 ~ c#3@23, ~ f#3@11 ~ f#3@11",
  K: "~@5 e4@19 ~@5 e4@19, e2@4 b3@20 e4@3 g3 b3@20, e4@3 g3@21 ~@2 e3@22, ~ b2@23 e2@24, ~@2 e3@22 ~ b2@23",
  L: "~ d4@5 ~ c#4@5, [e2,d5] [e2,c#5], ~ b2@23 ~ b2@23, ~ e3@11 ~ e3@11, ~ g3@7 ~ g3@7", // E7 C#m
  M: "~ f#4@5 ~ f#4@5, [d2,d5] [c#2,b4], ~ d3@23 ~ c#3@23, ~ f#3@11 ~ f#3@11, ~ b3@7 ~ b3@7", // D C#7
  N: "~@5 g4@19 ~@5 f#4@19, [f#2,c#5]@4 c#4@20 f#4@3 a#3 c#4@20, ~ b2@23 f#2@24, ~@2 e3@22 ~ b2@23, ~@3 a#3@21 ~@2 e3@22", // F#5
  O: "[~ f#4@5 ~@7 f#4@5 ~ f#4@5, b2@24 b2@4 f#4@23 c#4@21 ~@3 d4@21, e4@2 b3@22 ~@2 b3@22 ~ f#3@23 ~ f#3@23, ~ f#3@23 ~ f#3@23 b2@24 b2@24, ~@3 e4@21 f#4@3 d4@21 ~@2 b3@22 ~@2 b3@22]/2",
  P: "~@5 g4@19 ~@5 g4@19, d5@27 b3 d4@20, g2@3 b3 d4@20 ~@2 g3@22, ~ d3@23 g2@24, ~@2 g3@22 ~ d3@23",
  Q: "~ f#4@7 ~ e4@7, [g2,c#5] [g2,b4], ~ d3@23 ~ d3@23, ~ b3@11 ~ b3@11", // Gdim G
  R: "[~@18 b4@3 a4 ~ g4 a4 ~ b4 a4 ~ g4 a4@7 ~ b4 a4 ~ g4 ~@10 e4@20 ~@4 d4@20, f#2@4 c#4 f#4@19 ~@3 a3 c#4 f#4@13 a4@9 a3@21 ~@3 a3@21, c#5@3 a3@21 ~@2 f#3@22 ~@2 f#3@22 ~@2 f#3@22, ~ c#3@23 f#2@24 f#2@24 f#2@24, ~@2 f#3@22 ~ c#3@23 ~ c#3@23 ~ c#3@23]/2",
  S: "~@5 c#5@2 b4@2 a4@2 b4@2 a4@2 g4@2 a4@2 g4@2 f#4@2 ~@6 [e4,f#4]@2 ~@2 d4@3 e4@12, e2@3 b4 b3 e4@18 g4@2 f#4@2 [g3,e4] b3@3 e4@5 ~@12, c#5@2 e3@22 ~ b2@23, ~ b2@23 e2@24, ~@3 g3@21 ~@2 e3@22", // Esus2 C
  T: "f#4 e4 d4 ~@15 f#4@6 ~@6 e4@3 f#4@3 g4@11 ~, e2@3 e4 d4@20 e4@3 [g3,d4] c#4@20, ~ b2@23 e2@24, ~@2 e3@22 ~ b2@23, ~@3 g3@21 ~@2 e3@22", // G5
  U: "~@3 g4 a4 g4 ~ e4 ~ g4 ~@4 f#4@10, d2@4 f#4@8 f#4@4 f#4@4 f#4@7 b3@21, f#4@2 f#3@22 ~ d3@23, ~ d3@23 d2@24, ~@2 g4 b3@21 ~@2 f#3@22",
  V: "~@7 f#4@5, d2@4 f#4@23 b3@21, f#4@3 b3@21 ~@2 f#3@22, ~ d3@23 d2@24, ~@2 f#3@22 ~ d3@23",
  W: "~@4 f#4@20 d5 ~@4 g4@19, c#2@6 f#2 c#4@5, ~ c#3@23 ~ [b2,e5]@23, ~ f#3@11 ~ e3@11, ~ b3@7 ~ a#3@7", // E5
  X: "[~@5 f#4@19 ~@4 f#4@20 ~@18 b4@6 ~@36 d5@6 c#5@6 ~@28 f#4@20 ~@2 f#4@45 ~@30 e4@19 ~@12 b4@6 c5@6, f#2@4 c#4@20 f#5@27 d4 f#4@20 c#5@3 [b3,d5] f#4@2 e5@21 a#3 c#4 g4@19 d5@3 [b3,e5] f#4@2 f#5@21 b3@21 ~ [b3,d4]@46 ~ b4@3 [g3,a4] b3 e4@20 ~ e3 g3 b3@20 ~@2 e3@2 b3 e4@19, ~ b2@23 b2@3 e4@21 ~@2 b3@22 ~@2 f#3@22 ~@2 e3@22 ~ d3@23 ~ c#3@23 [b2,f#3]@47 ~@2 b2@5 b4@45 g3@21, ~@2 e3@22 ~ f#3@23 b2@24 c#2@24 f#2@24 d2@24 c#2@24 ~@48 e2@24 e2@24 e2@24, ~@3 a#3@21 ~@2 b3@22 ~ f#3@23 ~ c#3@23 ~ b2@23 ~@2 f#3@22 ~@2 f#3@22 ~@50 e3@22 ~ b2@23 ~ b2@23]/6", // Bm E5 Bm Gsus2 B5
  Y: "[~@4 d5@4 d5@4 d5@6 c5@6 ~@29 e4@19 ~@5 e4@19, b2@24 e2@3 a4 b3 e4@20 ~ e3 g3 b3@20 ~@2 e3@2 b3@20, d5 d4@7 b4 g3 b4@15 g3@7, ~ f#3@23 ~ b2@23 e2@24 e2@24, ~@2 b3@22 ~@2 e3@22 ~ b2@23 ~ b2@23]/2",
  Z: "~ f#4@5 ~ f#4@5, b2!2, ~ f#3@23 ~ f#3@23, ~ b3@11 ~ b3@11, ~ e4@7 ~ d4@7",
  AA: "~ f#4@5 ~ f#4@5, d2 c#2, ~ d3@23 ~ c#3@23, ~ f#3@11 ~ f#3@11, ~ b3@7 ~ b3@7",
  AB: "~@5 g4@19 ~@5 f#4@19, f#2@4 c#4@20 ~@3 a#3 c#4@20, ~ b2@23 f#2@24, ~@2 e3@22 ~ b2@23, ~@3 a#3@21 ~@2 e3@22",
})).s("gm_piano").gain(0.25)

// chords · piano · soft notes
const piano_soft = note("<~@12 A B A@2 C D E F G@2 ~@35>".pickRestart({
  A: "~@5 b4@19 ~@5 b4@19, b2@4 f#4@20 f#4@3 d4 f#4@20, f#4@3 d4@21 ~@2 b3@22, ~ f#3@23 b2@24, ~@2 b3@22 ~ f#3@23",
  B: "~@5 b4@19 ~@5 b4@19, b2@4 f#4@20 e4@3 c#4 e4@20, f#4@3 d4@21 ~@2 g3@22, ~ f#3@23 e2@24, ~@2 b3@22 ~ a2@23",
  C: "~@5 b4@19 ~@5 b4@19, e2@4 g4@20 g4@3 e4 g4@20, g4@3 e4@21 ~@2 b3@22, ~ e3@23 e2@24, ~@2 b3@22 ~ e3@23",
  D: "~@5 b4@19 ~@5 b4@19, e2@4 g4@20 b4@3 e4 g4@20, b4@3 e4@21 ~@2 b3@22, ~ e3@23 e2@24, ~@2 b3@22 ~ e3@23",
  E: "~@5 g4@19 ~@5 g4@19, [f#2,a#4]@4 c#4@20 ~@3 a#3 c#4@20, ~ b2@23 [f#2,a#4]@24, ~@2 e3@22 ~ b2@23, ~@3 a#3@21 ~@2 e3@22", // F#
  F: "~@5 f#4@19 ~@5 f#4@19, [f#2,a#4]@4 c#4@20 ~@3 a#3 c#4@20, ~ b2@23 [f#2,a#4]@24, ~@2 e3@22 ~ b2@23, ~@3 a#3@21 ~@2 e3@22", // F#
  G: "[~@5 f#4@19 ~@5 f#4@19 ~@5 f#4@19 ~@5 f#4@19, [f#2,b4]@4 e4@20 b4@27 b3 c#4@20 ~@3 b3 d4@20, ~ b2@23 f#2@3 b3 d4@20 ~@2 f#3@22 ~@2 f#3@22, ~@2 f#3@22 ~ b2@23 f#2@24 f#2@24, ~@3 b3@21 ~@2 f#3@22 ~ b2@23 ~ b2@23]/2", // B5
})).s("gm_piano").gain(0.15)

stack(piano, piano_soft)