Strudelify

dark fantasy

Kanye West

KeyF majorTempo164 bpm
0:00/0:00
// dark fantasy — Kanye West
// 164 bpm, 4/4, key F major. 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, 2/4 at bar 16, 4/4 at bar 18) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5300001; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 171 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(164/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.

// other · string ensemble 1 · "Violins"
const string_ensemble_1 = note(`<
  ~ A@8 B@8 ~ C@4 D@4 E@2 F@7 ~@4 G H@2 I@2 J K@3 L@5 M N@3 O@4 P Q@4 R@7 S@3 T@8 U@2 ~ V@3 W@8 X@4 ~@8 Y@2 Z@2 AA ~ AB
  AC AD ~@17 AE@3 AF AG AH@2 AI ~@4 AJ AK AL AM ~@3 AN AO AP AQ@4 AR@2 AS AT AU@3 ~@2
>`.pickRestart({
  A: "[~@11 a4@3 bb4@3 c5@6 bb4@5 a4@6 g4@39 a4@11 g4@11 d4@22 ~ a4@11 g4@11 e4@6 c4@16 c4@11 ~@17 a4@2]/8",
  B: "[~ bb4@3 c5@5 bb4@6 a4@6 g4@39 a4@11 g4@11 d4@22 ~ a4@11 g4@11 e4@5 c4@17 c4@11 d4@22 ~@10]/8",
  C: "[g5@32 f5@10 c5@43 g5@11]/4", D: "[ab5@11 g5@10 f5@11 c6@21 bb5@21 ~ bb5@5 bb5@5 ~@11]/4",
  E: "[c6@5 c6@5 ~@12 eb5@5 eb5@5 ~@16]/2", F: "[~@16 ab4@43 f5@11 ab5@10 bb5@11 c6@11 db5@49 ~@17]/7", G: "~@11 db4",
  H: "[~ eb4@3 f4@3 ~ f4@6 eb4@3 eb4@6 db4@3 eb4@3 db4@6 ~@13]/2",
  I: "[db4@6 eb4@3 f4@6 eb4@3 eb4@3 db4@6 db4@3 ab4@3 gb4@3 gb4@3 ~ f4@3 ~@5]/2",
  J: "~ db4@3 eb4@3 f4@3 f4@6 eb4@3 eb4@5",
  K: "[~ db4@3 eb4@3 db4@6 ~@10 db4@3 db4@3 eb4@3 f4@3 f4@6 db4@3 db4@3 db4@3 ~ db4@3 ab4@3 gb4@3 f4@6 eb4@3 db4@3]/3",
  L: "[db4@3 f4@49 f4@25 ~@5 g4@4 ~@9 ab4@17 ~@8]/5", M: "f4", N: "[~@6 g4@4 ~@9 ab4@17 ~@8 f4@25 ~@3]/3",
  O: "[~@2 g4@4 ~@8 ab4@17 ~@9 g4@17 f4@17 ~@22]/4", P: "~@12 eb4@2 eb4@3 eb4@3 eb4@2 eb4@2",
  Q: "[~ eb4@3 eb4@3 eb4@2 eb4@3 eb4@3 eb4@2 eb4@3 eb4@3 eb4@2 eb4@3 eb4@3 eb4@2 eb4@3 eb4@3 eb4@2 eb4@3 eb4@3 eb4@2 eb4@3 eb4@3 eb4@2 eb4@3 eb4@3 eb4@2 eb4@3 eb4@3 eb4@2 f4@3 f4@3 f4@2 f4@3 f4@3 f4@2 f4@3 f4@3 f4]/4",
  R: "[~ f4@3 f4@3 f4@2 f4@3 f4@3 f4@2 f4@3 ab4@43 ab4@32 ab4@11 g4@55 ~@7]/7", S: "[~@11 g4@61]/3",
  T: "[~@11 g4@55 g4@18 ab4@55 ab4@18 g4@35]/8", U: "[~ d4@18 ~@5]/2", V: "[~@10 f4@21 bb3@21 bb3@20]/3",
  W: "[~@2 c4@21 bb3@21 ~ bb3@21 db4@21 db4@21 ~ a3@43 c4@40]/8", X: "[~@2 db4@43 a3@32 ~@19]/4",
  Y: "[e4@12 gb4 g4 gb4 d4]/2", Z: "[g4@12 gb4 g4 gb4 d4]/2", AA: "e4 gb4@5 e4 gb4@5 e4@12",
  AB: "e5 b4 a4 g4 a4 b4 ~@2", AC: "e5 b4 a4 g4 a4 g4 e4 d4", AD: "e4",
  AE: "[~@5 ab4!2 e5@2 b4@2 ab4 ~ ab4!2 e5@2 b4@2 ab4 ~ ab4 ~ ab4]/3", AF: "eb5 db5 eb5@2 ~@4", AG: "~@6 ab5!2",
  AH: "[ab5 gb5!2 gb5@2 e5@2 gb5@3 e5 gb5@3 ab5 gb5]/2", AI: "e5 db5@4 ~@3", AJ: "~@6 e5!2", AK: "e5 b4@2 b4@3 ~ ab4",
  AL: "b4@2 ~ ab4 b4@2 ~ db5", AM: "b4 ~ ab4@2 ~@4", AN: "~@4 eb5@2 ab5 eb5", AO: "ab5@2 ab5 gb5 ab5@2 gb5@2",
  AP: "e5@4 ~ e5!3", AQ: "[e5@2 e5!2 gb5@2 gb5 e5@5 ~ e5!3]/2", AR: "[e5@2 e5!2 gb5@2 gb5 e5@5 b4!2 b4@2]/2",
  AS: "b4 ab4 ab4@2", AT: "b4!2 b4@2 b4@2 ab4@2", AU: "[db5@16 b4@16 ~ b4@33 ~@6]/3",
})).s("gm_string_ensemble_1").gain(0.4)

// other · string ensemble 1 · "Violins"
const string_ensemble_1_2 = note(`<
  A@3 B@7 C@7 ~ D@4 E@3 F@8 G H I@2 J K L M@2 N O P Q@3 R@5 S T@3 U@4 V W@4 X@7 Y@3 Z@3 AA@7 AB@2 AC@8 AD AE@2 ~ AF AG
  ~@8 AH AI AH AI AH AI AJ AK AL ~@16 AM@2 ~ AN AO@4 AP@4 AQ@3 ~@3 AR AS AT AU AV AW@2 AX@2 AY@2 AZ BA BB@3 ~@2
>`.pickRestart({
  A: "[~@19 f4@45 ~@8]/3", B: "[~@3 a4@5 c4@11 d4@11 ~@6 bb4@34 a4@11 bb4@11 c5@34 f4@33 f4@9]/7",
  C: "[~@13 a4@6 c4@11 d4@11 ~@6 bb4@34 a4@11 bb4@11 c5@33 d4@22 ~@10]/7", D: "[g4@32 f4@10 c4@43 g4@11]/4",
  E: "[ab4@11 g4@10 f4@11 c4@21 bb3@19]/3",
  F: "[~@3 bb3@43 ab4@42 ab3@43 f4@11 ab4@10 bb4@11 c5@11 bb3@6 bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@2 ~]/8",
  G: "bb3@6 bb3@6 ~ db4@2 ~ db4@2 ~ db4@2 ~ db4@2", H: "~ ab4@6 gb4@6 gb4@2 ~ gb4@2 ~ gb4@2 ~ gb4@2",
  I: "[~ f4@6 ~ eb4@6 eb4@2 ~ eb4@2 ~ eb4@2 ~ eb4@2 ~ eb4@6 bb3@6 bb3@2 ~ bb3@2 ~@2 bb3@2 ~]/2",
  J: "bb3@2 ~ bb3@6 bb3@6 db4@2 ~ db4@2 ~ db4@2 ~", K: "db4@2 ~ ab4@6 gb4@6 ~ gb4@2 ~ gb4@2 ~ gb4@2",
  L: "~ gb4@2 ~ f4@6 eb4@6 eb4@2 ~ eb4@2 ~ eb4@2",
  M: "[~ eb4@2 ~ eb4@6 ~ bb3@6 bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@6 bb3@6 db4@2 ~ db4@2 ~@2]/2",
  N: "db4@2 ~ db4@2 ~ ab4@6 gb4@6 gb4@2 ~ gb4@2 ~", O: "gb4@2 ~ gb4@2 ~ f4@6 eb4@6 ~ eb4@2 ~ eb4@2",
  P: "~ eb4@2 ~ eb4@2 ~ eb4@6 bb3@6 bb3@2 ~ bb3@2",
  Q: "[~ bb3@2 ~ bb3@2 ~ bb3@6 ~ bb3@6 db4@2 ~ db4@2 ~ db4@2 ~ db4@2 ~ ab4@6 gb4@6 gb4@2 ~ gb4@2 ~@2 gb4@2 ~ gb4@2 ~ f4@6 ~@9]/3",
  R: "[~@3 bb3@49 ab3@25 ~@5 bb3@4 ~@9 c4@17 ~@8]/5", S: "ab3", T: "[~@6 bb3@4 ~@9 c4@17 ~@8 ab3@25 ~@3]/3",
  U: "[~@2 bb3@4 ~@8 c4@17 ~@9 eb4@17 db4@17 ~@22]/4", V: "~@12 ab3@2 ab3@3 ab3@3 ab3@2 ab3@2",
  W: "[~ ab3@3 ab3@3 ab3@2 ab3@3 ab3@3 ab3@2 ab3@3 ab3@3 ab3@2 ab3@3 ab3@3 g3@2 g3@3 g3@3 g3@2 g3@3 g3@3 g3@2 g3@3 g3@3 g3@2 g3@3 g3@3 g3@2 g3@3 g3@3 g3@2 bb3@3 bb3@3 bb3@2 bb3@3 bb3@3 bb3@2 bb3@3 bb3@3 bb3]/4",
  X: "[~ bb3@3 bb3@3 bb3@2 bb3@3 bb3@3 bb3@2 bb3@3 c4@43 eb4@32 eb4@11 d4@55 ~@7]/7", Y: "[~@11 eb4@61]/3",
  Z: "[~@11 eb4@55 db4@6]/3", AA: "[~@12 eb4@55 eb4@18 b3@73 ~@10]/7",
  AB: "[~@23 a4@5 f4@3 d4@3 d4@5 d4@3 a4@2 a4@4]/2",
  AC: "[~@2 f4@2 d4@3 d4@5 d4@3 a4@3 a4@5 f4@3 g4@2 g4@5 ~ a4@2 bb4@3 bb4@5 a4@3 g4@3 g4@11 g4@2 a4@3 a4@3 bb4@2 bb4@5 ~ a4@2 g4@3 g4@5 f4@3 d4@3 d4@5 d4@3 a4@2 a4@5 ~ f4@2 g4@3 g4@16 f4@3 g4@2 a4@3 a4@3 f4@5 g4@5 f4@5 ~ d4@21 ~@14]/8",
  AD: "~@7 d4", AE: "[f4@2 a4@3 a4@5 f4@5 ~ g4@5 a4@5 g4@21 ~]/2", AF: "~@10 d4@3 f4@3 g4@3 a4@5",
  AG: "f4@5 g4@5 ~ f4@5 d4@5 ~@3", AH: "d4 e4 ~@6", AI: "b4@4 a4 ~@3", AJ: "d4!2 d4@2 d4@2 b3@2", AK: "d4 e4 e4@2",
  AL: "e4", AM: "e5/2", AN: "~@5 ab4 ~ ab4", AO: "[eb5 db5 eb5@2 eb5@28]/4", AP: "db5/4", AQ: "a4/3", AR: "~@5 b3!3",
  AS: "b3@2 b3!2 e4@2 eb4 db4", AT: "eb4@4 eb4@2 e4 b3", AU: "e4@2 e4 eb4 e4@2 eb4@2", AV: "db4@4 ~ e4!3",
  AW: "[e4@2 e4!2 gb4@2 gb4 ab4@5 ~ e4!3]/2", AX: "[e4@2 e4!2 gb4@2 gb4 e4@5 ~ e4!3]/2",
  AY: "[e4@2 e4!2 gb4@2 gb4 e4@5 b3!2 b3@2]/2", AZ: "b3 ab3 ab3@2", BA: "b3!2 b3@2 b3@2 ab3@2",
  BB: "[db4@16 b3@16 ~ e4@33 ~@6]/3",
})).s("gm_string_ensemble_1").gain(0.4)

// other · string ensemble 1
const string_ensemble_1_3 = note(`<
  A@8 B@3 C@3 D E@2 ~ F@2 G@2 H@2 I@2 J@2 K@2 L@5 ~ M N@8 O@6 P@2 Q R@5 S@7 T@7 U@6 V@7 ~@20 W@2 X Y Z@2 AA AB AC@2 AD
  AE@2 ~@16 AF AG AF AG AH AI AH AI AJ AK AJ AK AL AM AL AM AF AG AF AG AH AI AH AI AJ AK AJ AK AN ~ AO AP@3 ~@2
>`.pickRestart({
  A: "[~@19 f2@44 a2@45 bb2@45 c3@39]/8", B: "[~@6 f2@5 f2@6 f2@5 f2@6 f2@5 f2@6 f2@6 f2@5 a2@6 a2@5 a2@6 a2@5]/3",
  C: "[~ a2@5 a2@6 a2@5 a2@6 bb2@6 bb2@5 bb2@6 bb2@5 bb2@6 bb2@6 bb2@5 bb2@6 c3@4]/3", D: "~ c3@6 c3@5 c3@6 c3@6",
  E: "[c3@5 c3@6 c3@5 d3@22 ~@10]/2", F: "[f2@5 f2@5 f2@5 ~ f2@5 f2@5 f2@5 ~ eb2@5 eb2@5 db2@5 ~]/2",
  G: "[db2@5 db2@5 db2@5 ~ db2@5 db2@5 db2@5 ~ db2@5 f2@5 ~ f2@5]/2",
  H: "[f2@5 f2@5 ~ f2@5 f2@5 f2@5 ~ f2@5 db2@5 db2@5 ~ db2@5]/2",
  I: "[db2@5 c2@5 ~ c2@5 c2@5 c2@5 ~ bb2@5 bb2@5 bb2@5 ~ bb2@5]/2",
  J: "[bb2@5 bb2@5 ~ bb2@5 bb2@5 ~ bb2@5 bb2@5 bb2@5 ~ bb2@5 bb2@5]/2",
  K: "[bb2@5 ~ bb2@5 bb2@5 bb2@5 ~ bb2@5 bb2@5 bb2@5 ~ bb2@5 bb2@5]/2", L: "[bb2@5 ~ bb2@5 bb2@43 [bb2,f3]@49 ~@17]/5",
  M: "~@8 bb2@12 ~ f2@3",
  N: "[~@3 gb2@24 ab2@6 gb2@18 ~ eb2@3 f2@3 eb2@25 bb2@12 f2@3 ~@3 gb2@25 ab2@6 gb2@18 eb2@3 f2@3 eb2@25 bb2@11]/8",
  O: "[~ f2@3 ~@3 gb2@25 ab2@6 gb2@18 ~ eb2@3 f2@3 eb2@61 bb2@17 bb2@3]/6", P: "[~@2 f2@4 bb2@4 c3@4 ~@9 db3@17 ~@8]/2",
  Q: "db3!2 ~@4",
  R: "[~@6 c3@2 db3@2 c3@4 ab2@4 ~ bb2@4 ab2@4 c3@4 ~@5 bb2@4 ~@4 bb2@17 bb2@4 f2@4 ~ bb2@4 c3@4 ~@8 db3@17 ~@17]/5",
  S: "[~@17 ab2@4 ~ ab2@4 c3@4 bb2@4 ab2@4 ~@5 ab2@4 ab2@4 ab2@4 ~ ab2@4 ab2@43 eb2@21 eb3@11 f3@10 bb2@21 ~@2]/7",
  T: "[~@9 bb2@11 db3@43 ab2@32 ab2@11 g2@55 ~@7]/7", U: "[~@11 bb3@72 g3@55 bb3@6]/6",
  V: "[~@12 ab3@55 ab3@18 g3@36 ~ g2@36 ~@10]/7", W: "c3!4", X: "b2!4", Y: "b2@2 b2@2 b2 a2 g2 gb2",
  Z: "[[e2,b2]@7 [gb2,b2]]/2", AA: "[g2,d3]", AB: "g2", AC: "[e2,b2]", AD: "d3!2 d3@2 d3@2 b2@2", AE: "[d3 e3 e3@6]/2",
  AF: "e3 ~ e3 ~@4 e3", AG: "~@3 e3 ~@2 e3@3 ~@15", AH: "eb3 ~ eb3 ~@4 eb3", AI: "~@3 eb3 ~@2 eb3@3 ~@15",
  AJ: "db3 ~ db3 ~@4 db3", AK: "~@3 db3 ~@2 db3@3 ~@15", AL: "a2 ~ a2 ~@4 a2", AM: "~@3 a2 ~@2 a2@3 ~@15",
  AN: "a2 ~ a2 ~@5", AO: "b2!2 b2@2 b2@2 ab2@2", AP: "[db3@16 b2@16 ~ e2@33 ~@6]/3",
})).s("gm_string_ensemble_1").gain(0.4)

// other · pizzicato strings
const pizzicato_strings = note("<~@87 A@3 B@7 C D E@3 ~@69>".pickRestart({
  A: "[~@10 d3@5 d3@11 d3@5 d3@3 d3@13 a3@3 f3@2 c3@5 ~ c3@10 c3@4]/3",
  B: "[~@2 c3@2 c3@8 ~@6 a3@3 f3@2 bb2@5 ~ bb2@10 bb2@5 ~ bb2@2 bb2@8 ~@6 a3@2 f3@3 a2@5 a2@11 a2@5 a2@3 a2@8 ~@5 a3@3 f3@3 d3@5 d3@11 d3@5 d3@3 d3@13 a3@3 f3@3 c3@5 c3@11]/7",
  C: "c3@5 c3@3 c3@8 ~@5 a3@3", D: "f3@2 bb2@5 ~ bb2@10 bb2@5 ~",
  E: "[bb2@2 bb2@8 ~@6 a3@2 f3@3 a2@5 a2@11 a2@5 ~ a2@2 a2@8 a2@11 d3@5 ~@3]/3",
})).s("gm_pizzicato_strings").gain(0.3)

// chords · piano
const piano = note("<A@8 B@2 C@7 ~@118 D@3 E F@3 G H@4 I@2 J D ~@20>".pickRestart({
  A: "[~@19 [f1,f2,f3,a3,c4,f4]@42 ~@2 [a1,a2,e3,a3,c4,e4]@42 ~@3 [bb1,bb2,f3,bb3,d4,f4]@42 ~@3 [c2,c3,g3,c4,e4,g4]@39]/8", // F Am Bb C
  B: "[~ [f1,f2,f3,a3,c4,f4]@7]/2", // F
  C: "[~@2 [a1,a2,e3,a3,c4,e4]@42 ~@3 [bb1,bb2,f3,bb3,d4,f4]@42 ~@3 [c2,c3,g3,c4,e4,g4]@42 ~@2 [d2,d3,d4]@21 ~@11]/7", // Am Bb C D
  D: "~@12 e6@11 ~", E: "~@12 e5@11 ~", F: "~@12 eb6@11 ~", G: "~@12 eb5@11 ~",
  H: "[~ db6@2 db6@2 ~@2 db5, ~@5 db6@3]/4", I: "~@12 a5@11 ~", J: "~@12 ab5@11 ~",
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note("<~@118 A@4 B C@3 D E@3 F G@2 H A ~@16 A@3 B C@3 D E@3 F G@2 ~@2 I@4>".pickRestart({
  A: "~@12 e6@11 ~", B: "~@12 e5@11 ~", C: "~@12 eb6@11 ~", D: "~@12 eb5@11 ~", E: "~@12 db6@11 ~", F: "~@12 db5@11 ~",
  G: "~@12 a5@11 ~", H: "~@12 ab5@11 ~", I: "[~@9 [e3,e4,ab4,b4]@31 ~@2 [e2,e3]@31 ~@23]/4",
})).s("gm_piano").gain(0.15)

stack(string_ensemble_1, string_ensemble_1_2, string_ensemble_1_3, pizzicato_strings, piano, piano_soft)

More by Kanye West