Strudelify

España Cañí

Marquina Narro Pascual

KeyA majorTempo120 bpm
0:00/0:00
// España Cañí — Marquina Narro Pascual
// 120 bpm, 2/4, key A 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/5934680; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 123 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · pizzicato strings
const pizzicato_strings = note("<~@42 A B ~@35 C D B D E D C D C D B D E D C ~@29>".pickRestart({
  A: "~@2 e5 ~", B: "e4 ~@3", C: "d4 ~@3", D: "a3 ~@3", E: "c#4 ~@3",
})).s("gm_pizzicato_strings").gain(0.2)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A B C D A B C D E F G H E F G H I ~@20 J E F G H K ~ L@2 M L M L N L@4 M L M L N O ~@11 P Q@4 R S T U V@2 W@2 X@2 T Y
  Z AA W@2 AB@2 AC AD AE AF AG AH AI AJ AK AL AM AN@3 AO AL AP AQ AR AS AT@3 AU AV AW AX AY
>`.pickRestart({
  A: "g#3@2 ~@2 g#3 ~ g#3 ~ g#3@2 ~@2 g#3 ~ g#3 ~", B: "g#3@2 ~@2 g#3 ~ g#3 ~ g#3@2 ~@2 a3@2 ~@2",
  C: "a3@2 ~@2 a3 ~ a3 ~ a3@2 ~@2 a3 ~ a3 ~", D: "a3@2 ~@2 a3 ~ a3 ~ b3@2 ~@2 a3@2 ~@2",
  E: "[g#3,e4]@2 ~@2 [g#3,e4] ~ [g#3,e4] ~ [g#3,e4]@2 ~@2 [g#3,e4] ~ [g#3,e4] ~", // C#m
  F: "[g#3,e4]@2 ~@2 [g#3,e4] ~ [g#3,e4] ~ [g#3,e4]@2 ~@2 [a3,f4]@2 ~@2", // C#m Dm
  G: "[a3,f4]@2 ~@2 [a3,f4] ~ [a3,f4] ~ [a3,f4]@2 ~@2 [a3,f4] ~ [a3,f4] ~", // Dm
  H: "[a3,f4]@2 ~@2 [a3,f4] ~ [a3,f4] ~ [b3,g4]@2 ~@2 [a3,f4]@2 ~@2", I: "[b3,e4] ~@7",
  J: "~@6 [a3,f4] ~ [b3,g4]@2 ~@2 [a3,f4]@2 ~@2", K: "[g#3,e4] ~@7", L: "a3 ~ a3 ~ c#4 ~ c#4 ~ a3 ~ a3 ~ c#4 ~ c#4 ~",
  M: "a#3 ~ a#3 ~ d4 ~ d4 ~ a#3 ~ a#3 ~ d4 ~ d4 ~", N: "g3 ~ g3 ~ a#3 ~ a#3 ~ g3 ~ g3 ~ a#3 ~ a#3 ~", O: "a3 ~@7",
  P: "~@8 [a3,e4]!8", Q: "[a3,e4]!16", R: "[a3,e4] ~@3 [a3,e4] ~@3", S: "~@2 a3!2", T: "d4@3 d4", U: "d4 e4@2 f#4",
  V: "[e4 f#4 e4 d4 c#4@10 e4@2]/2", W: "[a4 ~ g4 f#4 e4@6 e4@2 f#4@2 g4@2]/2", X: "[f#4 g4 f#4 e4 d4@8 a3@2 a3@2]/2",
  Y: "d4!2 e4 f#4", Z: "e4 f#4 e4 d4 c#4 d4 c#4 b3", AA: "a3@3 e4", AB: "[f#4@2 g4@2 f#4@2 e4@2 d4@13 ~@11]/2",
  AC: "~@3 [a#3,f#4]@2 ~@2 [a#3,f#4] ~ [a#3,f#4] ~ [a#3,f#4]@2 ~@2 [a#3,f#4]", // D#m
  AD: "~ [a#3,f#4] ~ [a#3,f#4]@2 ~@6 [b3,f#4]@2 ~@3", // D#m B5
  AE: "~@3 [a#3,f#4]@2 ~@2 [a#3,f#4] ~ [a#3,f#4] ~ [a#3,f#4] ~ [a#3,f#4] ~ [a#3,f#4]", // D#m
  AF: "~ [a#3,f#4] ~ [a#3,f#4]@2 ~@11", AG: "~@6 [a3,e4,a4]@2 ~@2 [a3,e4,a4] ~ [a3,e4,a4] ~ [a3,e4,a4]@2",
  AH: "~@2 [a3,e4,a4] ~ [a3,e4,a4] ~ [a3,e4,a4]@2 ~@6 [a3,f4,d5]@2", // A5 Dm
  AI: "~@6 [a3,e4,a4]@2 ~@2 [a3,e4,a4] ~ [a3,e4,a4] ~ [a3,e4,a4] ~", // A5
  AJ: "[a3,e4,a4] ~ [a3,e4,a4] ~ [a3,e4,a4] ~ [a3,e4,a4]@3 ~@7", AK: "~@7 d4", AL: "~ f#4 ~ a3 ~ f#4 ~ d4",
  AM: "~ f#4 ~ a3 ~ f#4 ~ e4", AN: "~ g4 ~ a3 ~ g4 ~ e4", AO: "~ g4 ~ a3 ~ g4 ~ d4",
  AP: "~@2 f#4@2 ~@2 a3@2 ~@4 f#4@3 ~", AQ: "~@3 d4 ~ f#4 ~ a3", AR: "~ f#4 ~ d4 ~ f#4 ~ a3",
  AS: "~ f#4 ~ e4 ~ g4 ~ a3", AT: "~ g4 ~ e4 ~ g4 ~ a3", AU: "~ g4 ~ [d4,f#4] ~@3 [g3,d4]",
  AV: "~@2 [g3,d4] ~ [g3,d4] ~ [g3,d4]@2 ~@2 [g3,d4] ~ [g3,d4] ~ [g3,d4] ~", // G5
  AW: "[g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4]@2 ~@2 [g3,d4]@2 ~@4", AX: "~ [g3,d4] ~@3 [a3,e4] ~ [a3,e4]",
  AY: "~@4 [a3,e4] ~ [d4,a4]@2 ~@8", // A5 D5
})).s("gm_string_ensemble_1").gain(0.4)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@16 A@2 B@2 A@2 C@2 D A B@2 E F G H I@2 J K L M ~@85>".pickRestart({
  A: "~@2 [g#3,e4] ~@3 [g#3,e4] ~", B: "~@2 [g#3,f4] ~@3 [g#3,f4] ~", C: "~@2 [g#3,d4] ~@3 [g#3,d4] ~",
  D: "[g#3,e4] ~ [g#3,e4] ~@3 [g#3,e4] ~", E: "[c4,e4]@2 [c4,e4] ~@3 [c4,e4] ~", F: "~@2 [c4,e4] ~@3 [c4,f4] ~",
  G: "~@2 [a#3,f4] ~@3 [a#3,f4] ~", H: "~@2 [a#3,f4] ~@3 [b3,e4] ~", I: "~@2 [a3,e4] ~@3 [a3,e4] ~",
  J: "[g#3,e4]@2 ~@2 [g#3,e4] ~ [g#3,e4] ~ [g#3,e4]@2 ~@2 [g#3,e4] ~ [g#3,e4] ~", // C#m
  K: "[g#3,e4]@2 ~@2 [g#3,e4] ~ [g#3,e4] ~ [g#3,e4]@2 ~@2 [a3,f4]@2 ~@2", // C#m Dm
  L: "[a3,f4]@2 ~@2 [a3,f4] ~ [a3,f4] ~ [a3,f4]@2 ~@2 [a3,f4] ~ [a3,f4] ~", M: "[a3,f4]@2 ~@2 [a3,f4] ~@11",
})).s("gm_string_ensemble_1").gain(0.2)

// chords · pizzicato strings
const pizzicato_strings_2 = note("<~@42 A B ~@16 C D E F E G H I E D E F J ~@50>".pickRestart({
  A: "~@2 [g#4,b4] ~", B: "e4 ~@3", C: "~ [a3,e4,c#5] ~ a3", D: "[g3,d4] ~ [a#3,d4] ~",
  E: "a3 ~ [a3,e4,c#5]@2 ~@2 a3@2", F: "[g3,d4] ~ c4 ~", G: "d4 ~ c4 ~", H: "f4 [a3,f4,c5] ~ f4",
  I: "g3 [g3,d4,a#4] ~ g3", J: "a3 ~@3",
})).s("gm_pizzicato_strings").gain(0.4)

stack(pizzicato_strings, string_ensemble_1, string_ensemble_1_soft, pizzicato_strings_2)