Strudelify

Viva la Vida

Alec Pearl

KeyA majorTempo120 bpm
0:00/0:00
// Viva la Vida — Alec Pearl
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 14 "Double Bass" named as a bass, played on acoustic bass (its contrabass patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/4177661; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 128 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 · [...]/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 · violin
const violin = note(`<
  ~@7 A B@2 C@2 B@2 D@2 E@4 F@2 G@2 B@2 H@2 I@2 J K L@2 M N O@2 J P Q@2 R@2 S@2 T@2 U@2 V W@3 X@2 Y Z Y Z Y Z Y AA@3
  AB@2 AC@2 AD@2 AE@2 AF@2 AG@2 AH@2 Q@2 R@2 S@2 T@2 U@2 V W@3 X@2 AI@6 AJ AK AL@2 AM@2 AL@2 AN@2 AL@2 AO@2 AL@2 AO@2
  AL@2 AO@2 AP AQ AR AP
>`.pickRestart({
  A: "~@3 c#5 c#5@2 c#5@2", B: "[c#5@6 d5 b4@5 ~ b4@2 e4]/2", C: "[b4@2 b4 a4 c#5@2 e4 f#4@2 c#5!5 c#5@2]/2",
  D: "[b4@2 b4@2 b4@2 c#5 a4@2 g#4 f#4@4 ~@2]/2", E: "[a4@7 g#4@9]/2", F: "[a5@7 g#5@9]/2",
  G: "[a5@7 g#5@3 ~ c#5 c#5@2 c#5@2]/2", H: "[b4@2 b4 a4 b4!2 c#5 a4@2 g#4 f#4@2 c#5!4]/2",
  I: "[c#5@5 d5@2 b4@4 ~@2 a4@2 a4]/2", J: "c5 b4 a4 a4@3 c5 b4", K: "a4 a4@2 f#5!3 f#5@2",
  L: "[f#5@6 c#5 e5@5 ~ e5@2 e5]/2", M: "e5@3 e4 e5@2 d5@2", N: "c#5 e4 c#5!6", O: "[c#5@5 d5@2 b4@5 ~ a4 a4@2]/2",
  P: "a4 a4@3 ~@3 e5", Q: "[f#5@2 f#5@2 f#5 e5 f#5 e5@3 b4 c#5@2 d5@2 ~]/2",
  R: "[e5@2 e5@2 e5 c#5 e5 c#5@3 f#4 g#4@2 a4@2 ~]/2", S: "[f#5@2 f#5@2 f#5 e5 f#5 e5@3 b4 c#5@2 d5@2 d5]/2",
  T: "[e5 c#5 e5@2 e5 c#5 e5 c#5@3 f#4 g#4@2 a4@2 ~]/2", U: "[f#5@2 f#5@2 f#5 e5 f#5 g#5@2 g#5@2 g#5@3 ~@2]/2",
  V: "e5@2 e5@2 e5@2 e5 d5", W: "[d5 c#5 ~@2 c#5!3 c#5@6 d5@2 b4@6 b4!2 a4]/3", X: "[g#4 g#4@3 c#5@2 g#4 a4@7 ~@2]/2",
  Y: "a4 ~ a4 ~ a4 ~ a4!2", Z: "~ a4 ~ a4!2 ~ a4 ~", AA: "[~ c#5!6 c#5@6 d5@2 b4@5 ~ b4!2 e4]/3",
  AB: "[b4@3 a4 c#5@2 e4 f#4@3 c#5!6]/2", AC: "[c#5@5 d5@2 b4@5 ~@2 a4!2]/2",
  AD: "[c5 b4 a4 a4@3 a4 c#5@2 b4 a4@2 f#5!4]/2", AE: "[f#5@5 c#5@2 e5@5 ~@2 e5!2]/2",
  AF: "[e5@2 e5!4 d5 c#5@3 c#5!6]/2", AG: "[c#5@5 d5@2 b4@5 ~@2 a4@2]/2", AH: "[c#5 b4 a4 f#4 a4!2 f#4 a4@7 ~ e5]/2",
  AI: "[d4@7 c#4@9]/2", AJ: "d4", AK: "d4!2 ~ d4!2 ~ d4 ~", AL: "[c#5@7 d5@9]/2", AM: "[c#5@7 b4@9]/2",
  AN: "[c#5@7 b4@7 ~@2]/2", AO: "[b4@7 a4@9]/2", AP: "f#4", AQ: "g#4", AR: "e4",
})).s("gm_violin").gain(0.4)

// chords · viola
const viola = note(`<
  A B A B A B A B A B A B A B A B A B A B A B A B C D E F C D E F C D E F C D E F A B A B A B A B A B A B A B A B G H I
  H G H I H C D E F C D E F C D E F C D E F C D E F C D E F C D E F C D E F J K J K J K L@2 M@2 N@2 M@2 O@2 P@2 Q@2 R@2
  S@2 T@2 U@2 V@2 W@2
>`.pickRestart({
  A: "a3 ~ a3 ~ a3 ~ a3!2", B: "~ a3 ~ a3!2 ~ a3 ~", C: "[a3,d4] ~ [a3,d4] ~ [a3,d4] ~ [a3,d4]!2",
  D: "~ [a3,d4] ~ [a3,d4]!2 ~ [a3,d4] ~", E: "[a3,c#4] ~ [a3,c#4] ~ [a3,c#4] ~ [a3,c#4]!2",
  F: "~ [a3,c#4] ~ [a3,c#4]!2 ~ [a3,c#4] ~", G: "f#3 ~ f#3 ~ f#3 ~ f#3 g#3", H: "~ g#3 ~ g#3!2 ~ g#3 ~",
  I: "a3 ~ a3 ~ a3 ~ a3 g#3", J: "a4 g#4 a4 g#4 a4 g#4 a4!2", K: "g#4 a4 g#4 a4!2 g#4 a4 g#4", L: "b4!2 ~ b4!2 ~ b4 ~",
  M: "[a4@7 b4@9]/2", N: "[a4@7 g#4@9]/2", O: "[a4@7 g#4@7 ~ e4]/2",
  P: "[f#4@2 f#4@2 f#4 e4 f#4 e4@3 b3 c#4@2 d4@2 ~]/2", Q: "[e4@2 e4@2 e4 c#4 e4 c#4@3 f#3 g#3@2 a3@2 ~]/2",
  R: "[f#4@2 f#4@2 f#4 e4 f#4 e4@3 b3 c#4@2 d4@2 d4]/2", S: "[e4 c#4 e4@2 e4 c#4 e4 c#4@3 f#3 g#3@2 a3@2 ~]/2",
  T: "[f#4@2 f#4@2 f#4 e4 f#4 g#4@2 g#4@2 g#4@3 ~ e4]/2", U: "[e4@2 e4@2 e4 d4!2 d4@2 c#4@2 c#4 ~ c#4!3]/2",
  V: "[c#4@5 d4@2 b3@5 ~ b3!2 a3]/2", W: "[g#3 g#3@3 c#4@2 g#3 a3@9]/2",
})).s("gm_viola").gain(0.3)

// other · cello · "Violoncello"
const cello = note(`<
  A B C D A B C D A B C D A B C D E@4 F@2 G@2 A B C D A B C D A B C D A B C D A B C D A B C D H@2 I J@3 K@2 A B C D A B
  C D L M L M L M L M A B C D A B C D N@2 O@2 P@2 Q@2 R@2 S D A B C D T U T U T U B V@16 W@5 X Y X Z
>`.pickRestart({
  A: "d3 ~ d3 ~ d3 ~ d3 e3", B: "~ e3 ~ e3!2 ~ e3 ~", C: "a2 ~ a2 ~ a2 ~ a2 f#2", D: "~ f#2 ~ f#2!2 ~ f#2 ~",
  E: "[a3@7 g#3@9]/2", F: "[a4@7 g#4@9]/2", G: "[a4@7 g#4@3 ~ f#2 f#2@2 f#2@2]/2",
  H: "[f#4@2 f#4@2 f#4 e4 f#4 g#4@2 g#4@2 g#4@3 ~@2]/2", I: "e4@2 e4@2 e4@2 e4 d4",
  J: "[d4 c#4 ~@2 c#4!3 c#4@6 d4@2 b3@6 b3!2 a3]/3", K: "[g#3 g#3@3 c#4@2 g#3 a3@7 ~@2]/2",
  L: "a3 g#3 a3 g#3 a3 g#3 a3!2", M: "g#3 a3 g#3 a3!2 g#3 a3 g#3", N: "[f#3@2 f#3@2 f#3 e3 f#3 e3@3 b2 c#3@2 d3@2 ~]/2",
  O: "[e3@2 e3@2 e3 c#3 e3 c#3@3 f#2 g#2@2 a2@2 ~]/2", P: "[f#3@2 f#3@2 f#3 e3 f#3 e3@3 b2 c#3@2 d3@2 d3]/2",
  Q: "[e3 c#3 e3@2 e3 c#3 e3 c#3@3 f#2 g#2@2 a2@2 ~]/2", R: "[f#3@2 f#3@2 f#3 e3 f#3 g#3@2 g#3@2 g#3@3 ~@2]/2",
  S: "c#3 ~ c#3 ~ c#3 ~ a2 f#2", T: "d3 ~ d3 ~ d3 ~ d3 f#3", U: "~ f#3 ~ f#3!2 ~ f#3 ~",
  V: "[~ c#3 e3 a3@3 g#3 f#3@8 e3@2 c#3 e3 a3@3 g#3 e3@8 c#3@2 c#3 e3 a3@3 g#3 f#3@8 e3@2 c#3 e3 a3@3 g#3 e3@8 c#3]/8",
  W: "[~ c#3 e3 a3@3 g#3 f#3@8 e3@2 c#3 e3 a3@3 g#3 e3@8 c#3@7 ~@2]/5", X: "a3", Y: "b3", Z: "f#3",
})).s("gm_cello").gain(0.4)

// bass · acoustic bass · "Double Bass"
const bass = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C E A B C D A B C D A B C D A B C D A B C D A B C D A F G D A B C D A B C
  D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A F G D A B C D H I H I H I B@2 A B C D A B C D A B C D A B
  C D A B J I K L K M
>`.pickRestart({
  A: "d2 ~ d2 ~ d2 ~ d2 e2", B: "~ e2 ~ e2!2 ~ e2 ~", C: "a1 ~ a1 ~ a1 ~ a1 f#1", D: "~ f#1 ~ f#1!2 ~ f#1 ~",
  E: "~ f#1 ~ f#1 f#1@2 f#1@2", F: "~ e2 ~ e2!2 ~ b1 ~", G: "c#2 ~ c#2 ~ c#2 ~ a1 f#1", H: "d2 ~ d2 ~ d2 ~ d2 f#2",
  I: "~ f#2 ~ f#2!2 ~ f#2 ~", J: "a2 ~ a2 ~ a2 ~ a2 f#2", K: "a2", L: "b2", M: "f#2",
})).s("gm_acoustic_bass").gain(0.3)

stack(violin, viola, cello, bass)