Strudelify

Africa by Toto

Toto

KeyE majorTempo90 bpm
0:00/0:00
// Africa by Toto — Toto
// 90 bpm, 2/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5525334; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 188 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/2)

// 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.

// other · cello
const cello = note(`<
  A B@3 A B@3 C D@2 E@2 F@2 G ~ H@3 I J K L G ~ M@3 N O@2 P G ~ Q@3 R S@2 ~@2 G T G U G T G U G T G U G T G V W X A B@3
  A B@3 Y Z@2 AA AB AC AD@2 ~ AE@3 AF AG@2 AD@2 ~ AH@2 W AI S@2 ~@2 G T G U G T G U G T G U G T G V W X A B@3 A B@3 AJ
  AK AL V AM AN@2 A AO AJ AK AP R S@2 ~@2 G T G U G T G U G T G U G T G U G T G U G T G U G T G U G T G V W X A B@3 A
  B@3 A B@3 A B@3
>`.pickRestart({
  A: "c#3@3 c#3 ~ c#3 ~ c#3", B: "[c#3 b2 e3@10]/3", C: "~ f#3!3 f#3@4", D: "[f#3 f#3@3 g#3@2 a#3 b3@9]/2",
  E: "[d#3 d#3@3 e3@2 f#3 f#3@2 e3@3 e3@2 d#3@2]/2", F: "[d#3 c#3@3 c#3@2 b2 d#3@6 e3 d#3@2]/2", G: "c#3",
  H: "[~@2 f#3@2 f#3 f#3@2 f#3@3 f#3@2 g#3 a#3@2 b3@8 d#3]/3", I: "d#3 d#3@2 e3@3 f#3@2", J: "f#3@2 e3 e3@3 d#3@2",
  K: "c#3@2 c#3 c#3@3 b2@2", L: "d#3@5 e3 d#3@2", M: "[~@2 f#3@2 f#3@2 f#3 f#3@2 f#3@2 f#3 g#3@2 a#3 b3@9]/3",
  N: "d#3!3 e3@3 f#3@2", O: "[f#3@2 e3 e3@2 d#3 c#3@5 b2 c#3@2 b2@2]/2", P: "d#3@5 c#3 b2@2",
  Q: "[~@2 f#3 f#3@2 f#3@2 f#3@2 f#3@2 g#3@2 a#3@2 b3@9]/3", R: "d#4 d#4@2 e4@3 f#4@2",
  S: "[f#4@2 e4 e4@2 d#4 e4@10]/2", T: "f#2", U: "b2", V: "g#3", W: "b3", X: "c#4@5 e3@3", Y: "~ f#3 f#3@2 f#3@4",
  Z: "[f#3 f#3@3 g#3@2 a#3 b3@7 b2@2]/2", AA: "d#3 d#3@2 e3@2 f#3@3", AB: "f#3 e3@3 e3@2 d#3@2",
  AC: "c#3@2 c#3 c#3@2 b2@3", AD: "[d#3@5 c#3 b2 c#3@9]/2",
  AE: "[~@2 f#3 f#3@2 f#3@2 f#3@2 f#3@2 g#3@2 a#3@2 b3@4 b2 d#3@2 d#3@2]/3", AF: "d#3!3 e3@2 f#3@3",
  AG: "[f#3@2 e3@2 e3@2 d#3 c#3@2 c#3@2 b2 c#3@2 b2@2]/2", AH: "[~@2 f#3@2 f#3@2 f#3 f#3@2 f#3@2 d#4@2 c#4@3]/2",
  AI: "d#4@2 d#4 e4@3 f#4@2", AJ: "f#3", AK: "a#3", AL: "d#4", AM: "a3", AN: "e3", AO: "c#3 b2 e3@2", AP: "d#3",
})).s("gm_cello").gain(0.3)

// chords · piano
const piano = note(`<
  A B@3 A B@3 C D E@2 F G H A I C D E@2 F G H A I C D E@2 F G H A I C D J@2 A I K L M N O P Q N O P Q N O P Q N O R S T
  A U@3 A U@3 C D E@2 F G H A I C D E@2 F G H A I C D J@2 A I K L M N O P Q N O P Q N O P Q N O R S T A U@3 A U@3 V W
  X@2 Y Z AA A I AB AC J@2 A I K L M N O P Q N O P Q N O P Q N O AD Q N O AD Q N O P Q N AE AF Q N O R S T A U@3 A B@3 A
  B@3 A B@3
>`.pickRestart({
  A: "[a1,a2,e3,a3,c#4]@3 [a1,a2,e3,a3,c#4] ~ [a1,a2,e3,a3,c#4] ~ [a1,a2,e3,a3,c#4]", // A
  B: "[[a1,a2,e3,a3,c#4]@2 [g#1,g#2,d#3,g#3,b3]@2 [c#2,c#3,g#3,c#4,e4]@19 ~]/3", // A G#m C#m
  C: "[b1,b2]@3 [b1,b2] [b1,b2]@4, [f#3,b3,d#4]@15 ~", D: "[d#2,d#3]@3 [d#2,d#3] [d#2,d#3]@4, [a#3,c#4]@15 ~",
  E: "[[g#1,g#2]@3 [g#1,g#2] [g#1,g#2]@4 [f#1,f#2]@3 [f#1,f#2] [f#1,f#2]@4, [g#3,b3,d#4]@15 ~]/2", // G# F# G#m
  F: "[e1,e2]@3 [e1,e2] [e1,e2]@4, [e3,a3,c#4]@15 ~", G: "[f#1,f#2]@3 [f#1,f#2] [f#1,f#2]@4, g#3@15 ~",
  H: "[g#1,g#2]@3 [g#1,g#2] [g#1,g#2]@4, f#3@15 ~", I: "[a1,a2,e3,a3,c#4] [g#1,g#2,d#3,g#3,b3] [c#2,c#3,g#3,c#4,e4]@2",
  J: "[[g#1,g#2]@3 [g#1,g#2] [g#1,g#2]@4 [g#1,g#2]@3 [g#1,g#2] [g#1,g#2]@4, [g#3,b3,d#4]@15 ~]/2", // G# G#m
  K: "[e5,e6]@3 [e4,e5]@4 [e3,e4]", L: "[e3,e4] [e2,e3] [e1,e2]@2",
  M: "[f#1,f#2]@3 [f#1,f#2] [f#1,f#2]@4, [f#4,a4,c#5]@15 ~", N: "[d2,d3]@3 [d2,d3] [d2,d3]@4, d5@15 ~",
  O: "[a1,a2]@3 [a1,a2] [a1,a2]@4, [c#5,e5]@15 ~", // A C#m
  P: "[e2,e3,b3,e4,g#4]@3 [e2,e3] [e2,e3]@2 [b1,b2,g#4]@2, ~@3 a4@3 ~@2", // E
  Q: "[f#1,f#2]@3 [f#1,f#2] [f#1,f#2]@4, [c#4,f#4,a4]@15 ~", R: "[c#2,c#3]@3 [c#2,c#3] [c#2,c#3]@4",
  S: "[e2,e3]@3 [e2,e3] [e2,e3]@4", T: "[f#1,f#2]@3 [f#1,f#2]!2 [g#1,g#2]@3",
  U: "[[a1,a2,e3,a3,c#4]@2 [g#1,g#2,d#3,g#3,b3]@2 [g#3,c#4,e4]@2 [c#5,f#5] [b4,e5] [g#4,c#5] [b4,e5] [c#5,f#5] [b4,e5] [g#4,c#5] [b4,e5] [c#5,f#5] [b4,e5] [g#4,c#5] [f#4,b4] [g#4,c#5] [f#4,b4] [g#4,c#5] [c#5,f#5] [b4,e5]@2, ~@4 [c#2,c#3]@19 ~]/3", // A G#m C#m F#5 E5 C#5 E5 F#5 …
  V: "~ [b5,d#6] [g#5,c#6] [b1,b2,f#5,b5] [g#5,c#6] [f#5,b5] [d#5,g#5] [f#5,b5], [b1,b2]@3 ~ [b1,b2]@4", // B C#5 B5 C#5 B5 G#5 B5 B
  W: "[d#5,g#5] [c#5,f#5] [d#5,g#5] [d#2,d#3,c#5,f#5] [a#4,d#5] [c#5,f#5] [a#4,d#5] [g#4,c#5], [d#2,d#3]@3 ~ [d#2,d#3]@4", // G#5 F#5 G#5 D#m7 D#5 F#5 D#5 C#5 …
  X: "[[a#4,d#5] [g#4,c#5] [f#4,b4] [g#1,g#2,g#4,c#5] [f#4,b4] [d#4,g#4] b4@2 [f#1,f#2,b4]@2 [g#4,c#5] [f#1,f#2] ~@2 [c#4,f#4]@2, [g#1,g#2]@3 ~ [g#1,g#2]@4 ~@4 [f#1,f#2]@4, ~@6 f#4@4 ~ [d#4,g#4]@3 ~@2]/2", // D#5 C#5 B5 C#5 B5 G#5 B5 C#5 …
  Y: "[e1,e2]@3 [e1,e2,c#5,e5] [b4,d#5] [a4,c#5] [g#4,b4] [f#4,a4], ~ [e1,e2]", // E C#m B A G#m F#m E
  Z: "[e4,g#4] [d#4,f#4]@2 [f#1,f#2] ~ [f#4,a4]@2 [e4,g#4], [f#1,f#2]@3 [g#4,b4]@2 ~@3, ~ [f#1,f#2]", // E D#m F# F#m E F# G#m F#
  AA: "[d#4,f#4] [c#4,e4]@2 [g#1,g#2,b3,d#4] [g#4,b4] [d#4,f#4] [c#4,e4] [b3,d#4], [g#1,g#2]@3 ~ [g#1,g#2]@4", // D#m C#m G#m D#m C#m B G#
  AB: "[g#4,c#5] [f#4,b4] [g#4,c#5] [b1,b2,b4,d#5] [g#4,c#5] [b4,d#5] [c#5,f#5] [b4,d#5], [b1,b2]@3 ~ [b1,b2]@4", // C#5 B5 C#5 B C#5 B F#5 B
  AC: "[c#5,f#5] [d#5,g#5] [c#5,f#5] [d#2,d#3] ~ [a#5,c#6]@2 [g#5,b5], [d#2,d#3]@3 [g#5,b5,c#6,e6]@2 ~@3, ~ [d#2,d#3]", // F#5 G#5 F#5 D# A#m G#m D# C#m7 …
  AD: "~ c#6@2 [e2,e3] [e2,e3,b5]@2 a5!2, [e2,e3]@3 ~@3 [b1,b2]@2", AE: "[a1,a2]@3 [a1,a2] [a1,a2]@3 a5, e6@13 ~@3",
  AF: "[e2,e3,c#6]@2 d6 [e2,e3] ~ b5 [b1,b2,a5]@2, ~@3 c#6@2 ~@3, ~@2 [e2,e3] ~", // C#m E B7 E
})).s("gm_piano").gain(0.3)

stack(cello, piano)

More by Toto