Strudelify

Adagio from Concierto de Aranjuez

Joachin Rodrigo

KeyF majorTempo82 bpm
0:00/0:00
// Adagio from Concierto de Aranjuez — Joachin Rodrigo
// 82 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5725692; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 78 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(82/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · trumpet · "Solo Cornet"
const trumpet = note(`<
  ~@2 A@2 B@2 C@2 D@2 E@2 ~@10 F G ~@7 H I@2 J@2 ~@6 K L K M N O P@2 Q@2 ~@2 R S ~@2 T ~@2 U V@7 ~@2 W X@2 ~ Y@3
>`.pickRestart({
  A: "[g4 f4 ~ g4@27 g4@3 ab4@3 bb4@6 ab4@6]/2", B: "[g4 f4 ~ g4@27 ab4@3 bb4@3 c5@6 d5@6]/2",
  C: "[bb4@3 ab4@3 ab4@3 g4@3 g4@2 f4@2 eb4@2 f4@9 g4@3 eb4@3 d4@3 eb4@3 f4@3 d4@3 c4@3]/2",
  D: "[d4 c4 ~ d4@27 d5@3 eb5@3 f5@6 eb5@3 d5@3]/2", E: "[d5 c5@3]/2", F: "ab4 g4 ab4@10", G: "ab4",
  H: "~@2 d4 eb4 f4 g4 ab4 bb4", I: "[c5 bb4 ~ c5@27 c5@3 d5@3 eb5@9 d5@3]/2", J: "[bb4 ab4 ~ bb4@27 ~@18]/2",
  K: "d5 c5 ~ d5@21", L: "d5@2 d5 eb5 f5@3 eb5", M: "d5@2 eb5 f5 g5@2 a5@2",
  N: "f5@3 eb5@3 eb5@3 d5@3 d5@2 c5@2 bb4@2 c5@6", O: "c5 d5 bb4 a4 bb4 c5 a4 g4",
  P: "[a5 g5 ~ a5@27 a5@3 bb5@3 c6@6 bb5@3 a5@3]/2", Q: "[a5@3 g5 g5@12]/2", R: "~@12 d5 c5 ~ d5@6 c5@3", S: "d5@5 ~@3",
  T: "~@6 bb4 a4 ~ g4 a4 ~ bb4@12", U: "~@2 a4 bb4 c5 d5 eb5 f5",
  V: "[g5@2 f5@2 g5@26 g5@3 ~ a5@4 bb5@12 a5@3 f5@2 eb5@2 f5@26 a5@3 g5@3 g5@3 f5@3 f5@3 g5@3 g5@3 eb5@3 eb5@3 d5@3 c5@3 bb4@3 c5@30 ~@19]/7",
  W: "~@3 a4@5", X: "[c5@5 g4@10 ~]/2", Y: "[~@4 d4@61 ~@7]/3",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "2nd Cornet"
const trumpet_2 = note(`<
  ~@2 A B A C D E F G H@2 ~@19 I J K L@2 ~@6 M N M O P Q R S T@2 ~@9 U V@7 ~@6 W@3
>`.pickRestart({
  A: "g4 f4 ~ g4@21", B: "g4@2 g4 ab4 bb4@2 ab4@2", C: "g4@2 ab4 bb4 c5@2 d5@2",
  D: "bb4@3 ab4@3 ab4@3 g4@3 g4@2 f4@2 eb4@2 f4@6", E: "f4 g4 eb4 d4 eb4 f4 d4 c4", F: "d4 c4 ~ d4@21",
  G: "d4@2 d4 eb4 f4@2 eb4 d4", H: "[d4 c4@3]/2", I: "~@2 d4 eb4 f4 g4 ab4 bb4", J: "ab4 g4 ~ ab4@21",
  K: "ab4@2 ab4 bb4 c5@3 bb4", L: "[bb4 ab4 ~ bb4@27 ~@18]/2", M: "d5 c5 ~ d5@21", N: "d5@2 d5 eb5 f5@3 eb5",
  O: "d5@2 eb5 f5 g5@2 f5@2", P: "f5@3 eb5@3 eb5@3 d5@3 d5@2 c5@2 bb4@2 c5@6", Q: "c5 d5 bb4 a4 bb4 c5 a4 g4",
  R: "a4 g4 ~ a4@21", S: "a4@2 a4 bb4 c5@2 bb4 a4", T: "[a4@3 g4 g4@12]/2", U: "~@2 a3 bb3 c4 d4 eb4 f4",
  V: "[g4@2 f4@2 g4@26 g4@3 ~ a4@4 bb4@12 a4@3 f4@2 eb4@2 f4@26 a4@3 g4@3 g4@3 f4@3 f4@3 g4@3 g4@3 eb4@3 eb4@3 d4@3 c4@3 bb3@3 c4@30 ~@19]/7",
  W: "[~@4 bb3@61 ~@7]/3",
})).s("gm_trumpet").gain(0.35)

// other · french horn · "Horn in F"
const french_horn = note(`<
  A@2 B C B@2 D E F@2 G@3 H G@3 I J@2 G K L G J@2 G I G J G M G I J@2 G I G N G@2 O P O J Q R S T U@3 G N@2 V@2 N T J@3
  W@8 X@3 ~ Y@3
>`.pickRestart({
  A: "eb4!2", B: "eb4@2 eb4!2", C: "eb4@2 d4!2", D: "f4@2 f4!2", E: "ab4@2 ab4!2", F: "d4@2 d4!2",
  G: "eb4@3 eb4!2 eb4@2 eb4", H: "eb4@3 eb4 d4 d4@2 d4", I: "c4@3 c4!2 c4@2 c4", J: "d4@3 d4!2 d4@2 d4",
  K: "eb4@3 eb4 eb4@2 d4@2", L: "eb4", M: "eb4@2 g4 f4 eb4 d4 c4 bb3", N: "f4@3 f4!2 f4@2 f4",
  O: "bb3@3 bb3 d4 d4@2 d4", P: "d4@3 d4 c4 c4@2 c4", Q: "~@4 f4 eb4!2 d4", R: "d4 c4@3 c4 c4@2 c4",
  S: "~@12 gb4 e4 ~ gb4@9", T: "gb4@3 gb4!2 gb4@2 gb4", U: "bb3@3 bb3!2 bb3@2 bb3", V: "g4@3 g4!2 g4@2 g4",
  W: "[eb4@10 eb4@4 eb4@15 f4@12 d4 ~ c4 d4@9 f4@9 f4@3 f4@3 f4@6 f4@3 g4@9 g4@3 g4@3 g4@6 g4@3 eb4@9 eb4@3 eb4@3 eb4@6 eb4@3 d4@9 d4@3 d4@3 d4@6 d4@3 d4@9 d4@3 d4@3 d4@6 d4@3 d4@19]/8",
  X: "[~@2 g3@7 a3@4 bb3@3 c4@15 ~ bb3@3 a3@4 a3@15 g3@15 ~@3]/3", Y: "[~@4 d4@61 ~@7]/3",
})).s("gm_french_horn").gain(0.2)

// other · french horn · "Horn in F"
const french_horn_2 = note(`<
  A@2 B C B@2 D@2 E@2 F@3 G F@3 H I@2 F J K F L@2 F H F H F M F H L@2 F H F N F@2 O P O N Q R S T U@3 F N@2 V@2 N@2 U@3
  W@7 X@2 Y@2 ~ Z@3
>`.pickRestart({
  A: "g3!2", B: "g3@2 g3!2", C: "g3@2 f3!2", D: "f4@2 f4!2", E: "d4@2 d4!2", F: "c4@3 c4!2 c4@2 c4",
  G: "c4@3 c4 bb3 bb3@2 bb3", H: "ab3@3 ab3!2 ab3@2 ab3", I: "b3@3 b3!2 b3@2 b3", J: "c4@3 c4 c4@2 d4@2", K: "c4",
  L: "d3@3 d3!2 d3@2 d3", M: "c4@2 d4 eb4 f4 g4 ab4 bb4", N: "d4@3 d4!2 d4@2 d4", O: "bb3@3 bb3 d4 d4@2 d4",
  P: "d4@3 d4 c4 c4@2 c4", Q: "~@4 f4 eb4!2 d4", R: "d4 c4@3 c4 c4@2 c4", S: "~@12 gb4 e4 ~ gb4@9",
  T: "gb4@3 gb4!2 gb4@2 gb4", U: "bb3@3 bb3!2 bb3@2 bb3", V: "eb4@3 eb4!2 eb4@2 eb4",
  W: "[c4@10 c4@4 c4@15 f4@12 d4 ~ c4 d4@9 d4@9 d4@3 d4@3 d4@6 d4@3 eb4@9 eb4@3 eb4@3 eb4@6 eb4@3 c4@9 c4@3 c4@3 c4@6 c4@3 bb3@9 bb3@3 bb3@3 bb3@6 bb3@3 gb3@9 gb3@3 gb3@3 gb3@4]/7",
  X: "[~@2 gb3@3 bb3@28 a3@15]/2", Y: "[c4@5 a3@5 g3@5 ~]/2", Z: "[~@4 bb3@61 ~@7]/3",
})).s("gm_french_horn").gain(0.2)

// other · trombone
const trombone = note(`<
  A@2 B C B@2 D@2 E@2 F@3 G F@2 H I J@2 F K L H M@2 H I M J F N O I M@2 H I M J P F Q@2 R@2 F S T U V W F@2 U@2 M@3 U
  M@2 X Y@8 Z@3 ~ AA@3
>`.pickRestart({
  A: "g3!2", B: "g3@2 g3!2", C: "g3@2 f3!2", D: "c4@2 c4!2", E: "b3@2 b3!2", F: "g3@3 g3!2 g3@2 g3",
  G: "g3@3 g3 f3 f3@2 f3", H: "c4@3 c4!2 c4@2 c4", I: "ab3@3 ab3!2 ab3@2 ab3", J: "b3@3 b3!2 b3@2 b3",
  K: "g3@3 g3 g3@2 f3@2", L: "c4", M: "bb3@3 bb3!2 bb3@2 bb3", N: "g3@2 eb3!2", O: "ab3@4 ~ c4 ab3 g3",
  P: "c4@3 g3!2 g3@2 g3", Q: "[~@12 bb3 a3 ~ bb3@21 a3@3 a3@6 a3@3]/2", R: "[~@12 bb3 a3 ~ bb3@12 bb3 a3 ~ bb3@18]/2",
  S: "eb3@3 eb3!2 eb3@2 eb3", T: "gb3@3 gb3 a3 a3@2 a3", U: "a3@3 a3!2 a3@2 a3", V: "~@4 c4@2 bb3 a3",
  W: "g3@4 g3 g3@2 g3", X: "g3@4 ~ g3 eb4 d4",
  Y: "[c4@14 g3@15 a3@9 a3@3 a3@3 a3@6 a3@3 a3@9 a3@3 a3@3 a3@6 a3@3 bb3@9 bb3@3 bb3@3 bb3@6 bb3@3 g3@9 g3@3 g3@3 g3@6 g3@3 f3@9 f3@3 f3@3 f3@6 f3@3 gb3@9 gb3@3 gb3@3 gb3@6 gb3@3 bb3@19]/8",
  Z: "[~@2 g3@7 a3@4 bb3@3 c4@15 ~ bb3@3 a3@4 d4@30 ~@3]/3", AA: "[~@4 d4@61 ~@7]/3",
})).s("gm_trombone").gain(0.2)

// other · trombone
const trombone_2 = note(`<
  A@2 B@2 C@2 D@2 E@2 F@2 G H G@3 I J@2 G K L G J@2 G I G J G M G I J@2 G I G N G@2 O P O Q R G S T U V W G N@2 R@2 N X
  J@2 Y Z@7 AA@2 AB@2 ~ AC@3
>`.pickRestart({
  A: "eb3!2", B: "[g3 f3 ~ g3@27 g3@3 ab3@3 bb3@6 ab3@6]/2", C: "[g3 f3 ~ g3@27 ab3@3 bb3@3 c4@6 d4@6]/2",
  D: "[bb3@3 ab3@3 ab3@3 g3@3 g3@2 f3@2 eb3@2 f3@9 g3@3 eb3@3 d3@3 eb3@3 f3@3 d3@3 c3@3]/2",
  E: "[d3 c3 ~ d3@27 d3@3 eb3@3 f3@6 eb3@3 d3@3]/2", F: "[d3 c3@3]/2", G: "eb3@3 eb3!2 eb3@2 eb3",
  H: "eb3@3 eb3 d3 d3@2 d3", I: "c3@3 c3!2 c3@2 c3", J: "d3@3 d3!2 d3@2 d3", K: "eb3@3 eb3 eb3@2 d3@2", L: "eb3",
  M: "eb3@2 g3 f3 eb3 d3 c3 bb2", N: "f3@3 f3!2 f3@2 f3", O: "~@12 g3 f3 ~ g3@9", P: "g3@4 f3 f3@2 f3",
  Q: "g3@3 g3 f3 ~ g3@18", R: "g3@3 g3!2 g3@2 g3", S: "gb3@3 gb3 a3 a3@2 a3", T: "a3@3 a3!2 a3@2 a3",
  U: "~@4 c4@2 bb3 a3", V: "g3@4 g3 g3@2 g3", W: "bb2@3 bb2!2 bb2@2 bb2", X: "gb3@3 gb3!2 gb3@2 gb3",
  Y: "g3@4 ~ g3 eb4 d4",
  Z: "[c4@14 g3@15 f3@9 f3@3 f3@3 f3@6 f3@3 f3@9 f3@3 f3@3 f3@6 f3@3 g3@9 g3@3 g3@3 g3@6 g3@3 eb3@9 eb3@3 eb3@3 eb3@6 eb3@3 d3@9 d3@3 d3@3 d3@6 d3@3 d3@9 d3@3 d3@3 d3@4]/7",
  AA: "[~@2 d3@3 d3@28 a3@15]/2", AB: "[c4@5 g3@10 ~]/2", AC: "[~@4 g3@61 ~@7]/3",
})).s("gm_trombone").gain(0.2)

// bass · tuba
const bass = note(`<
  A@3 B A@2 C D E F G@2 ~@9 H I ~@8 H I J K@2 L J K@2 M@2 N@2 O@2 P Q R S O@2 T Q U@2 P Q U@2 K@2 T V@7 W@2 X@2 ~@4
>`.pickRestart({
  A: "c2!2", B: "c2 ab2", C: "ab2!2", D: "f2!2", E: "g2!2", F: "g2@2 a2 b2", G: "c3/2", H: "~@2 c3 bb2",
  I: "ab2@2 ab2 g2", J: "f2", K: "g2/2", L: "ab2", M: "c2/2", N: "[g2@3 eb2]/2", O: "[g2@6 g2 f2]/2", P: "eb2", Q: "c2",
  R: "d2", S: "d2!2", T: "eb2@2 eb2 d2", U: "d2/2",
  V: "[c2@14 c2@15 d2@48 eb2@24 c2@24 bb1@12 bb1@6 c2@6 d2@12 e2@6 gb2]/7", W: "[~@5 g2@28 a2@15]/2",
  X: "[c3@5 g2@10 ~]/2",
})).s("gm_tuba").gain(0.3)

// bass · tuba · soft notes
const bass_soft = note("<~@12 A@2 B@2 C D E@2 F@2 ~ D G@2 C D G@2 H I ~@43 J@3>".pickRestart({
  A: "[c2@3 ab2]/2", B: "[c2@6 c3 bb2]/2", C: "ab2", D: "f2", E: "[g2@3 g2]/2", F: "[c2@3 ~]/2", G: "g2/2", H: "c2",
  I: "c2 ~", J: "[~@4 g2@61 ~@7]/3",
})).s("gm_tuba").gain(0.2)

stack(trumpet, trumpet_2, french_horn, french_horn_2, trombone, trombone_2, bass, bass_soft)