Strudelify

War Is Over/Eta-Ya

Paul Cantelonarr. Felipe Torres

KeyA minorTempo85 bpm
0:00/0:00
// War Is Over/Eta-Ya — Paul Cantelonarr. Felipe Torres
// 85 bpm, 3/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 3/4 at bar 23) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5968686; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 56 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(85/3)

// 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 · bandoneon · "Acordeón"
const bandoneon = note(`<
  A@2 B C@3 D E@2 F@2 G H@7 I@3 J K L M N O P Q J K L M N K R S T U V W X@2 Y@2 Z AA AB AC AD AE@2 AF@3
>`.pickRestart({
  A: "[d#4 e4@23 e4@6 a4@12 g4@6 f4 g4@5 f4@10]/2", B: "~@2 f4@3 ~ e4@3 f4 g4 ~ f4@18 f4 e4",
  C: "[~ d4@18 d4@6 d4@6 g4@12 f4@6 f4 ~ g4 f4@3 e4@12 e4@3 d#4@3 e4@23]/3", D: "~ e4@18 ~ e4@3 d#4@3 e4@6",
  E: "[a4@12 g4@6 g4@6 f4@12 f4@3 e4@3 f4@22]/2",
  F: "[~@2 e4@6 g#4@6 b4@6 d5@6 d5 ~ c5 b4 ~ a4@12 a4 g#4@6 a4 ~ b4 ~ a4@10]/2", G: "~@5 a4@3 g#4@3 a4@21",
  H: "[~@3 [a2,c4]@23 [c4,d4] e4@9 ~ f#4 g4@10 f4@23 [d4,f4]@6 [e4,g4]@5 [f4,a4]@6 [d4,f4]@6 [e3,b3,e4]@22 e4@11 ~ d4@11 c4@28 [d4,f4]@11 ~ [c4,e4]@5 d5@17 d5@6 d5@6 b5@11, ~@26 [a2,c#4]@22 d3@45 ~@23 [d3,b3]@23 c3@45 d3@40]/7", // Am Csus2 Dm Em F Dm E5 Dm …
  I: "[c6@6 b5@11 a5@6 g5@5 f5 ~ g5 f5@20 [d3,d4,f4]@23 [e4,g#4]@11 d4@11, ~@6 c3@45 ~@23 g#2@22]/3", // Dm E
  J: "~@6 c4@5 e4@5 c4@5 ~ e4@5 c4@5, a2@11 ~@21", K: "d3@11 [a3,c4,f4]@5 ~@6 [a3,c4,f4]@5 ~@5",
  L: "~@6 b3@5 d4@5 b3@5 ~ d4@5 b3@5, g2@11 ~@21", M: "c3@11 [g3,c4,e4]@5 ~@6 [g3,c4,e4]@5 ~@5",
  N: "~@6 a3@5 c4@5 a3@5 ~ c4@5 a3@5, f2@11 ~@21", O: "a2@11 [a3,c4,e4]@5 ~@6 [a3,c4,e4]@5 ~@5",
  P: "f3@5 ~ a3@5 c4@5 a3@5 ~ c4@5 a3@5", Q: "e3@11 [e3,g#3,b3]@5 ~@6 [e3,g#3,b3]@5 ~@5", R: "e2@11 g#3@11 b3@10",
  S: "a3@6 ~ [a3,c4,e4]@6 ~@7 a3@6 [a3,c#4,e4]@6", T: "~ e3@6 d3@6 ~ [a3,d4,f4]@3 ~@3 [a3,d4,f4]@3 ~@3 d3@6",
  U: "~ [a3,d4,f4]@3 ~@3 [a3,d4,f4]@3 ~@4 g3@6 [b3,d4,g4]@3 ~@4 [b3,d4,g4]@3 ~@2", // Dm G
  V: "~ g#3@6 ~ [b3,d4,g#4]@6 ~@7 a3@6 [a3,c4,e4]@3 ~@2", // G#dim Am
  W: "~@2 [a3,c4,e4]@3 ~@3 e3@6 ~ [g#3,b3,e4]@3 ~@3 [g#3,b3,e4]@3 ~@4 a3@4", // Am E
  X: "[~ [a3,c4,e4]@6 ~@6 a3@6 [a3,c#4,e4]@3 ~@3 [a3,c#4,e4]@3 ~@3 d3@6 [a3,d4,f4]@3 ~@2 [a3,d4,f4]@3 ~@3 d3@6 [a3,d4,f4]@3 ~@3 [a3,d4,f4]@3 ~, ~@25 e3@6 ~@33]/2", // Am A Dm
  Y: "[~@2 e3@6 [g#3,b3,e4]@3 ~@2 [g#3,b3,e4]@3 ~@3 e3@6 [g#3,b3,e4]@3 ~@3 [g#3,b3,e4]@3 ~@3 a3@6 [a3,c4,e4,a4]@3 ~@3 [a3,c4,e4,a4]@3 ~@2 a3@6 [a3,c4,e4,a4]@4]/2", // E Am
  Z: "~@8 a3@5 [a3,c4,e4]@5 ~@6 a3@5 [a3,c#4,e4]@3", // Am A
  AA: "~@3 [a3,c#4,e4]@3 ~@2 d3@5 [a3,d4,f4]@3 ~@3 [a3,d4,f4]@3 ~@2 d3@5 [a3,d4,f4]@3, ~@3 e3@5 ~@24", // A Dm
  AB: "~@3 [a3,d4,f4]@3 ~@2 e3@5 [g#3,b3,e4]@3 ~@3 [g#3,b3,e4]@3 ~@2 e3@5 [g#3,b3,d4,e4]@3", // Dm E E7
  AC: "~@3 [g#3,b3,d4,e4]@3 ~@2 f3@5 [a3,d4,f4]@3 ~@3 [a3,d4,f4]@3 ~@2 f3@5 [a3,d4,f4]@3", // E7 Dm
  AD: "~@3 [g#3,b3,e4]@3 ~@2 d3@6 [a3,c4,d4,f4,a4]@6 ~@6 d4@6, ~@3 e3@5 ~@24", // E Dm7
  AE: "[[a3,c4,d4,f4,a4]@6 ~@6 a3@6 [c4,e4,a4]@6 ~@6 f3@6 [a3,c4,f4]@6 ~@7 d3@7 [a3,c4,f4]@8]/2", // Dm7 Am F
  AF: "[~@7 e3@8 [b3,e4,g#4,d5]@8 ~@7 c4@10 ~@10 e4@10 a4@10 ~@26, ~@5 [a2,c5]@10 ~, ~@5 a3@5 ~@6, ~@15 e4@10 ~@23, ~@10 c4@5 ~@9]/3", // E7 Am
})).s("gm_bandoneon").gain(0.25)

// other · pizzicato strings
const pizzicato_strings = note("<A@3 B@3 C D@2 E F@3 ~@10 G H@2 I J K L ~@26>".pickRestart({
  A: "[a3@6 e3@6 c4@12 a3@6 e3@6 c#4@12 d4@6 a3@6 f4@12 ~ d4@6 a3@6 f4@11]/3",
  B: "[~ g3@6 b3@6 d4@6 b3@6 g3@6 b3@6 g4@12 a3@6 c4@6 e4@6 c4@6 e3@6 g#3@6 [b3,d4]@11]/3", // Bm
  C: "~ a3@6 e3@6 ~ [a3,c4]@6 e3@6 a3@6", D: "[b3@3 c#4@6 f3@3 a3@3 d4@3 a3@3 f3@3 a3@3 d4@5]/2",
  E: "~ e3@3 g#3@3 b3@3 g#3@3 f3@3", F: "[a3@6 e3@6 g#3@6 a3@6 ~ e3@6 [a3,c4]@6 e3@6 a3@6 e3@6 [a3,c4]@12 ~@29]/3",
  G: "~@22 b4@5 c5@5", H: "[d5@53 ~ c5@5 d5@5]/2", I: "e5@21 ~ d5@5 e5@3 d5@2", J: "c5", K: "b4@11 c5@11 d5@10",
  L: "b4@27 ~@5",
})).s("gm_pizzicato_strings").gain(0.25)

stack(bandoneon, pizzicato_strings)