Strudelify

Naranjo en flor

Virgilio Expósito

KeyF majorTempo120 bpm
0:00/0:00
// Naranjo en flor — Virgilio Expósito
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5909944; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 B C D E F ~ G H I J K L M N O ~ P@2 Q ~@3 R S T U V W X Y Z AA AB AC AD AE AF AG ~@2 AH AI AJ@2 AK AL AM AN O ~ P@2
  Q ~@3 R S T U V W X Y Z AA AB AC AD AE AF AG AO AP@2
>`.pickRestart({
  A: "~@6 [g4,g5] [ab4,ab5] [a4,a5]@2 [a4,a5]@6", B: "~ a4 a5 ~ g4 g5 ~ f4, ~@3 c5@3 a4@2",
  C: "f5 ~ e5 e6 ~ d5 d6 d5, ~ f4@3 a4@2 ~@2", D: "~ c5 c6 ~ bb4 bb5 ~ a4, ~@3 d4@3 f4@2",
  E: "a5 ~ g4 g5 ~ f4 f5 f4, ~ bb3@3 g3@4", F: "~@2 [e4,e5]@4 ~@4 g5 ab5 a5@2 a6@2, ~@6 [d4,d5]@9 ~",
  G: "~ c5 c6 ~ bb4 bb5 ~ a4, ~@3 f5@3 eb5@2", H: "a5 ~ g4 g5 ~ f4 f5 f4, ~ d5@3 b4@4",
  I: "~ e4 e5 ~ g4 g5 ~ f4, c5@3 ~@3 bb5@2", J: "f5 ~ e4 e5 [d4,d5]@2 ~@2, ~ a5@2 ~@5",
  K: "~ f5 f6 ~ eb5 eb6 ~ d5, ~@3 a5@3 bb4@2", L: "[b4,d6] b4 b5@2 ~@2 b4 b5, ~@3 d5",
  M: "bb4 bb5 ~@2 bb4 bb5 a4 a5, c5 ~ db5 d5", N: "~@2 g4 g5 e5 d5 ~ d5, ~ e5 [f4,a4,f5]@2, ~@2 c5!2",
  O: "[eb5,f5,a5,c6] ~", // F7
  P: "[~@2 eb5@2 [db5,f5,ab5,db6] [c5,eb5,g5,c6] [bb4,db5,f5,bb5]@4 [ab4,eb5]@4 [g4,bb4,e5]@2, ~@20 [c5,ab5]@11 ~]/2", // Db Cm Bbm Ab5 Edim Fm
  Q: "[f4,a4,c5,f5] ~", R: "~ [f4,ab4,c5,f5,ab5,c6] [db5,db6] [c5,c6] [b4,b5] [c5,c6] [db5,db6] [c5,c6]",
  S: "[e4,g4,db5,e5,g5,d6] [c5,c6] [db5,db6] [c5,c6] [b4,b5] [c5,c6] [db5,db6] [c5,c6]", // Dbdim C Db C B C Db C
  T: "[eb4,gb4,db5,eb5,gb5,db6] [c5,c6] [db5,db6] [c5,c6] [b4,b5] [c5,c6] [db5,db6] [a4,a5]", // Ebm7 C Db C B C Db A
  U: "d4@2 f4@2 ab4@2 bb4@2 ~ ab5 f5 d5 ~ bb4 ab4 f4, [d5,f5,c6] bb5", // Dm7
  V: "db4 [bb4,eb5,g5,bb5] [c5,c6] [bb4,bb5] [a4,a5] [bb4,bb5] [c5,c6] [g4,g5]", // Eb C Bb A Bb C G
  W: "[ab4,c5,eb5,bb5] [g4,c5,eb5,ab5] [g4,c5,e5,bb5] [f4,ab5] [e4,g5] [f4,ab5] [g4,bb5] [ab4,f5]", // Ab Abmaj7 C7 Fm Em Fm Gm Db
  X: "[g4,bb4,db5,ab5] [d4,g5] [f4,ab5] [g4,g5] [gb4,gb5] [g4,g5] [ab4,bb4,ab5] [e4,e5]", // Gdim G5 Fm G Gb G Absus2 E
  Y: "~ f4 g4 f4 [ab4,c5,f5]@4, [ab4,c5,g5] ~", Z: "~@3 [c5,c6] [b4,b5] [c5,c6] [db5,db6] [c5,c6]",
  AA: "[e4,g4,db5,e5,g5,db6] ~@7", AB: "~ [c5,eb5,gb5,c6] [db5,db6] [c5,c6] [b4,b5] [c5,c6] [db5,db6] [a4,a5]",
  AC: "c7 f6 ~ c6!2 f5 ~ c5 [bb4,d5,f5,ab5,bb5]@8, c5 ~@3", // Bb7
  AD: "~@2 [db5,eb5,g5,bb5]@2 [eb5,c6]@2 [db5,bb5]@2 [c5,a5]@2 [db5,bb5]@2 eb6 d6 [c6,db6] b5, ~@6 c5 bb4", // Eb7 Cm Gb F Gb Dbmaj7
  AE: "bb5 ab5 bb5 ab5 g5 ab5 db6 bb5, [ab4,c5,eb5] [g4,c5,eb5]", // Ab Cm
  AF: "gb4 ab4 gb4 ab4 gb4 ab4 gb4 ab4, [bb4,db5,ab5] [bb4,db5,gb5]", AG: "[g4,bb4,c5,e5] ~",
  AH: "~@2 a5@2 f5@2 a5@2 e5@2 a5@2 eb5 g5 ~ gb5, ~@6 [f4,a4]@9 ~", // F
  AI: "eb4 ~ d5 f5 b5 b6 d6 b6, g5 ~@3, ~@2 [eb4,b4]@13 ~", // Abm
  AJ: "[~@2 c5 db5 d5@2 db5@2 c5@2 [db5,bb5]@2 [d5,a5]@2 ~@6 [d5,f5]@8 ~@4, [e4,bb4]@7 [e5,g5]@3 ~@6, ~@16 f4@11 ~@5, ~@18 b4@9 ~@5]/2", // Gb D5 Dm Edim Em
  AK: "~ [a5,a6]!3 [a5,a6]@2 [g5,g6] [gb5,gb6]", AL: "~ e5 ~ c5 ~ a4 ~ f4, [g4,bb4,g5] [d4,bb4,d5], d5!2 g4!2",
  AM: "~@2 c5@2 [e5,bb5]@3 [a4,a5], e4@13 ~@3", AN: "[c5,c6] ~", AO: "~ a4 a5 ~ g4 g5 ~ f5, ~@3 c5@3 a4@2",
  AP: "[[bb4,db6]@2 [db5,bb5]@2 [a4,f5]@2 [gb4,db5]@2 [f4,c5]@4 bb4@8 a4@4 ~ [e5,f5,e6,a6]@3 ~@4, ~@6 [c5,c6] ~]/2", // Bbm Gb Dm Gb5 F5 Fmaj7 C
})).s("gm_piano").gain(0.3)

// chords · piano
const piano_2 = note(`<
  ~ A B C D E F G H I@2 J K L@2 M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL U ~@2 AM@2 AN AO AP M N
  O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AQ AI AR
>`.pickRestart({
  A: "f2@15 ~", B: "a2@15 ~", C: "g2@15 ~", D: "c2@15 ~", E: "f2@4 [f2,c3]@11 ~",
  F: "~@12 f2 gb2 g2 ab2, f2@11 ~@5, ~@2 [f3,a3,d4]@4 [f3,a3,c4]@9 ~, ~ d3@2 ~", // Dm F
  G: "~@4 [f4,a4]!2 ~ [e4,a4] [eb4,a4]@4 g4@2 gb4@2, a2@11 ~@5", H: "g4@6 g3@2 b3@2 ~@4 bb2 b2, b2@5 d4@3",
  I: "[~@2 c4@2 [c4,bb4] [db4,a4] ~@4 c3 a3!2 c3 ~ a3, c3@15 ~ f2@4 f2@8 e2@4, ~@12 [d4,g4]@6 [e4,f4]@9 ~@5]/2", // C7 Gbm G5 Fmaj7
  J: "~@2 [f4,a4]@3 [f4,a4] ~ [f4,a4] [c4,eb4,gb4,a4]@4 g4@2 gb4@2, d2!2", // F Cdim
  K: "g1 g2 d3 g3 ~ f2 e2 d2, g4@3 [b3,d4]@3 ~@2", // Bm
  L: "[~@16 f1@4 c3 f3 g3 a3 c4@4 ~@4, c2 d2 e2 c2 ~@4, ~@2 c4@4 bb4@4 a4@4 [a4,c5]@9 ~@9]/2", // Am
  M: "~ [ab4,c5]!2 [g4,c5] [gb4,c5]@2 bb4 a4, [ab1,ab2]@15 ~", // Ab C5 Gbdim Ab
  N: "bb1@2 bb2@2 f3@2 [ab3,db4,f4]@6 [ab3,d4] e4 ~ d4, [db4,bb4]@3 ~@3 [e2,b2]@2", O: "[eb2,bb2,g3,db4] ~",
  P: "[ab1,ab2,g3,c4]@11 ~ [c2,bb3,c4]@4", Q: "~@2 a3!2 a3@2 a3@2 [eb4,a4]@2 g4@2 g4@2 gb4@2, f2@15 ~",
  R: "~@2 g3@2 b3@2 d4@2 ~@2 g1@2 ab1 a1 bb1 b1, g2@9 ~@7, g4@3 ~@5", S: "~ c4 [db4,f4,bb4] a4, c2 bb1",
  T: "[a1,a3,c4,f4]@8 ab1@3 g1@2 gb1@3", U: "f1@15 ~", V: "~ e3 g3 c4 ~@4, e2@15 ~", W: "~ eb3 gb3 c4@3 f4@2, eb2@15 ~",
  X: "~ bb3 f3 d3 d3@4, d2@15 ~", Y: "~ db3 f3 c4@3 bb3@2, db2@15 ~", Z: "~@2 c3@2 e3@2 ab3@9 ~, c2@15 ~",
  AA: "~ d3 b3@2 ~ e3 c4@2, b2 bb2", AB: "ab2@4 ~ g3 ab3 bb3, ~ c2",
  AC: "~ [f4,ab4,c5] [f4,ab4,db5]@2 ~@4, [f1,f3,ab3,c4] ~", AD: "~ c4 db4 c4 b3 c4 db4 c4, e1@15 ~",
  AE: "[eb1,eb3,gb3,db4]@15 ~", AF: "[db2,db3,f3,c4]@8 ab4 d4 ~ ab3 f3 d3@2 bb2, ~ d2, ~@8 d3@5 ~@3",
  AG: "[eb2,g3,db4]@15 ~", AH: "ab2 g2", AI: "gb2@15 ~", AJ: "~ c4@2 d4 e4 f4 g4 ab4, c2@15 ~",
  AK: "[ab3,f4]@4 ab3 c4 d4 e4 ~@4 c2@4, f1@11 ~@5, ~ d4", AL: "~@4 a3 c4 d4 e4 ~@4 c2@4, f1@11 ~@5, ~ d4",
  AM: "[~@16 g4@15 ~, ~@10 b2@21 ~, ~@12 a3@19 ~, ~@14 [db4,eb4]@17 ~]/2", // Dbsus2
  AN: "~@2 d4@2 [bb3,f4]@8 ~@2 bb1 b1, [bb2,g3]@11 ~@5", AO: "~ [e3,bb3]@3 ~@3 bb2, c2@4 c3@3 ~, ~@5 [bb3,e4]@3",
  AP: "a2@2 ~@2 a3@2 [c4,f4]@2 d4@2 c4@2 a3 f3 c3 a2, ~@2 [a2,f3]@9 ~@5", AQ: "f2@15 ~, a4 ~", AR: "f2 f1@2 ~",
})).s("gm_piano").gain(0.3)

stack(piano, piano_2)