Strudelify
Hero cover art

#1 to Infinity

Hero

Mariah Carey

KeyE majorTempo60 bpm
0:00/0:00
// Hero — Mariah Carey
// 60 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 62 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(60/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.

// chords · piano
const piano = note("<A@2 B C D E F@3 G H@8 I@5 J K@3 G L@2 M@7 N@2 O P Q R S T U V@7 W@3 X@6>".pickRestart({
  A: "[~@10 e5 ~@7 b4@3 ~@5 e5 ~@4 e5, f#4@17 g#4@4 b4 e5 d#5 f#5@3 e5 b3 g#4 d#5@2, g#4@11 e5 d#4@20, b4@5 b4 e5 d#5 f#5@5 b4 d#5 e5 c#4@16, ~ e4@15]/2",
  B: "~@7 b4, a3@3 [g#3,e5], c#5@3 a4@5, a4@2 e5@3 d#5@3, ~ d#5@3 c#5@4", // C#m
  C: "~@3 f#4 ~@3 e4, [f#3,a4] [b2,a3], ~@2 e4@2 e4@3 ~, ~@3 b3", // F#m B7
  D: "~@15 e4, e3, b3@7 b3, f#4 [f#4,g#4,b4]!3, ~@2 e4@4 e4@4 e4@5 ~", // G#m7
  E: "[b3,f#4]@2 f#4 ~@4 b3@3 ~@5 e4, d3, ~@3 f#4@7 b3@2 [f#4,b4]@4, ~@3 b3@4 e4@7 b3@2, ~@5 g#4@11", // B5
  F: "[[b3,f#4]@2 f#4 b3@2 e4 ~@14 a3@4 ~@4 b3@2 ~@14 e4@2 ~ e4, c#3@30 e4 f#4 e2@2 g#4@2 f#4 e4@3 [f#4,g#4,b4]@2 b3@4 b3@2, ~@3 f#4@9 e4@3 c#4@19 g#3@14, ~@6 b3@7 f#4@5 b3@2 e4@4 [a3,d#4]@24, ~@6 e4@4 d#4@5 a3 b2@15 b3@2 b2@15]/3", // B5 G#m7 Adim
  G: "f#4@2 f#4 ~@3 [a3,d4]@6 ~@3 e4, f#2@6 [a3,d4] b3, [a3,d4]@5 g#4@11, ~@3 f#4@13, ~@3 a4@5", // D5
  H: "[[d4,e4]@2 g4 ~@4 e4 e4@3 ~@2 f#4@2 ~@7 b2@2 ~@4 b4@4 ~@8 b3@2 e4 ~@9 e4@2 ~@2 [b3,e4]@2 ~@10 e4@2 ~@4 e4 ~@9 e4@2 ~@2 [a3,c#4]@2 ~ [c#4,e4]@2 e4@2 ~@3 b3@2 ~@4 b3@2 g#4 ~@7 b3@2 g#4@2 ~@2 [e4,g#4]@2 g#4 ~@4 [b3,c#4,e4], [c3,a4]@16 b2@6 ~@2 b2@12 f#4 b3 e4 d#4 f#4@6 d#4 e4 [c#3,b3]@2 g#3@2 b3@2 e4 d#4 g#4@2 f#4 [g#3,b3,e4] b2@2 f#4@2 ~@4 g#4@7 [f#3,e4] g#2@14 d#4@10 b4@10 f#4 [b3,e4] c#3@4 [b3,e4]@2 g#4 f#4 [b2,c#5]@3 [b3,e4,g#4]@3 b4@2, ~@3 d4@8 d4@6 ~@3 e4@12 [f#4,g#4,b4]@4 b4@27 [b3,c#4,e4]@5 [b3,c#4]@2 e4 d#4 f#4@6 d#4 [a3,c#4] f#2@11 a3@9 [f#4,g#4] b3 g#4 f#4 a4@24, ~@3 [e4,g4]@3 g4@2 [c4,g4]@9 ~@17 e4@2 g#4@7 [b3,e4] d#3@20 ~@2 a3@9 b3@9 [a3,c#4]@2 e4 d#4 b2@5 b4@2 [e4,f#4,g#4] e2@32, ~@5 f#4@7 e4@3 [a3,e4,f#4]@5 [a3,f#4]@4 [a3,d#4,f#4]@8 e2@32 a2@18 f#3@11 c#4@14 [b3,g#4] d#3@20]/8", // Dsus2 E5 A C#m E C#m7 F C#7 …
  I: "[~@4 e4@2 ~@4 [b3,e4] ~@9 e4@2 ~@2 [a3,e4]@2 ~@16 e5 ~@3 d#5 ~@9 [a3,e4]@4 ~@19 e4, a2@12 g#2@8 a3@2 e4 d#4 [b2,g#4]@2 f#4 [a3,e4]@3 f#4 [b3,g#4] e3@2 f#4 e4@2 b4 e5 d#5 f#5@3 e5 d#4@6 d#4@5 b3 [b2,c#5]@4 a3 [g#3,e4,b4] f#3 [e3,g#4] b3@2 e4@2 [f#4,g#4,b4]@2 e4@2 [f#4,g#4,b4]@2 e4@2 [f#4,g#4,b4]@2 b3@2, ~@2 a3@6 f#4@3 [b3,e4]@3 f#4@2 ~@2 f#3@27 b4@2 e5@7 e5@26, ~@4 c#4@11 [a3,e4]@5 a4@27 ~ c#4@32, ~@4 b3@2 e4 d#4@9 f#2@31 ~@5 e4@3 d#5@25]/5", // E5 A5 E A5 E Bsus2 E G#m7 …
  J: "[b3,f#4]@2 f#4 b3@3 ~ b3@3 ~@5 e4, d3, ~@3 f#4@7 b3@2 [f#4,b4]@4, ~@3 g#4@5, ~@7 e4@7 b3@2", // B5
  K: "[[b3,f#4]@2 f#4 b3@3 e4 ~@13 a3@4 ~@4 b3@2 ~@14 e4@2 ~ e4, c#3@30 e4 f#4 e2@2 g#4@2 f#4 e4@3 [f#4,g#4,b4]@2 b3@4 b3@2, ~@3 f#4@9 e4@3 c#4@19 g#3@14, ~@7 b3@6 f#4@5 b3@2 e4@4 [a3,d#4]@24, ~@7 e4@3 d#4@5 a3 b2@15 b3@2 b2@15]/3", // B5 G#m7 Adim
  L: "[[d4,e4]@2 g4 ~@4 e4 e4@3 ~@2 f#4@2 ~@7 b2@2 ~@4 b4@4, [c3,a4]@8 b2@3 ~ [b2,a3,d#4,f#4]@4, ~@3 d4@8 d4@6 ~@3 e4@12, ~@3 [e4,g4]@3 g4@2 [c4,g4]@9 ~@15, ~@5 f#4@7 e4@3 [a3,e4,f#4]@5 [a3,f#4]@4 ~@8]/2", // Dsus2 F B7 Em C5 F#m7 D
  M: "[~@8 b3@2 e4 ~@9 e4@2 ~@2 [b3,e4]@2 ~@10 e4@2 ~@4 e4 ~@9 e4@2 ~@2 [a3,c#4]@2 ~ [c#4,e4]@3 e4 ~@3 b3@2 ~@4 b3@2 g#4 ~@7 b3@2 g#4@2 ~@2 [e4,g#4]@2 g#4 ~@9 e4@2 ~@4 [b3,e4] ~@4 [a3,e4], e2@16 b3@2 g#3@2 b3@2 e4 d#4 g#4@2 f#4 [g#3,b3,e4] b2@2 f#4@2 ~@4 g#4@7 [f#3,e4] g#2@14 d#4@10 b4@7 [b3,g#4] d#3@8 [b3,e4]@2 g#4 f#4 [b2,c#5]@3 [b3,e4,g#4]@3 b4@2 ~@2 a3@6 f#4@3 [b3,e4] g#2@2 f#4@2, [f#4,g#4,b4]@4 b4@27 [b3,c#4,e4]@5 [b3,c#4]@2 e4 d#4 f#4@6 d#4 [a3,c#4] f#2@11 a3@9 [f#4,g#4] b3 g#4 f#4 a4@23 [b3,c#4,e4]@5 c#4@12, ~@2 e4@2 f#4 b3 e4 d#4 f#4@6 d#4 e4 c#3@16 a2@18 f#3@12 c#4@16 f#4 [b3,e4] c#3@16 a2@16, ~@4 g#4@7 [b3,e4] d#3@20 ~@2 a3@9 b3@9 [a3,c#4]@2 e4 d#4 b2@6 b4 [e4,f#4,g#4] e2@32 ~@4 b3@2 e4 d#4@9]/7", // E5 A C#m E E5 A5 E F#7 …
  N: "[~@4 e4@2 ~@2 [a3,e4]@2 ~@12 [e2,e4]@2 ~@7 d3, f#2@8 [b2,g#4]@2 f#4 [a3,e4]@3 f#4@2 ~ f#4 e4@4 ~@4 e4@3 f#3 [e3,e4]@2, ~@2 f#3@13 b3@9 ~@3 b2@5, ~@4 a4@11 g#4@5 [f#4,g#4,b4]@4 [f#4,g#4,b4]@4 [g#3,f#4,g#4,b4]@4, ~@4 a3@2 e4 d#4@9 e2@6 ~@2 e2@8]/2", // A5 E A5 E G#m7
  O: "g4@4 ~@3 [c3,b4] ~@7 a2, [c3,c4,e4]@8 b2@5 a4@3, ~ [g4,c5,e5] [d4,d5]@2, ~@3 d5 g4 g4@3, ~@9 b4@5 [b2,b4]@2", // Cmaj7 C D B
  P: "[d4,g4]@4 ~ g4@2 [g2,f#4] ~@7 b2, [g2,b4]@7 d4@4 e4@2 [d3,d4] a2@2, ~@4 d4@3 a4@9, ~ d2, ~@9 f#4@7", // G5 Gmaj7 G D
  Q: "g4@3 ~ g4 g4@2 c3 ~@7 a2, [c3,c4,e4]@4 b2@3 b2, ~@3 d4@5 f4@8, ~@9 e4@7, ~@5 d4@3", // C
  R: "d4@2 [d4,a4]@2 [e2,d4,g4]@2 ~@9 b2, [g2,b4]@4 ~@7 a2@2 f#3@3, ~ f#2@2 [d2,d4,f#4,a4]@5, ~@3 e3, ~@7 a2", // D5 Em7 G D
  S: "g4@4 ~@3 [c3,b4] [d4,g4,d5] ~@6 [a2,b4], [c3,c4,e4]@4 b2@3 [b2,a4], ~@2 [g4,c5,e5]@2 ~ g4@3, ~@6 d5@2 ~ b4@6 ~", // Cmaj7 G5 Asus2 C B7 C
  T: "[d4,g4]@4 ~ g4@2 g2 ~@7 b2, [g2,b4]@7 d4@4 e4@2 [d3,d4] a2@2, ~@4 d4@3 a4@9, ~@7 f#4@2 f#4@7, ~ d2", // G5 G D
  U: "[c4,e4]@4 [g3,c4,e4]@3 c3 [b2,g3,d4]@4 ~@2 [a2,a4] ~, [c3,g4]@2 ~ [b2,g3,d4], ~@13 [g2,g4]@2 ~", // C G A C5 G
  V: "[[b2,e4,a4,b4]@4 [b2,a3,e4,f#4]@4 [b2,a3,f#4]@4 ~ g#2@2 ~@10 b3@2 e4 ~@9 e4@2 ~@2 [b3,e4]@2 ~@10 e4@2 ~@4 e4 ~@9 e4@2 ~@2 [a3,c#4]@2 ~ [c#4,e4]@2 e4@2 ~@3 b3@2 ~@4 b3@2 g#4 ~@7 b3@2 g#4@2 ~@2 [e4,g#4]@2 g#4 [b3,e4,g#4]@3 b4, ~@8 e4@4 b2@3 f#2@16 d#4 e4 [c#3,b3]@2 g#3@2 b3@2 e4 d#4 g#4@2 f#4 [g#3,b3,e4] b2@2 f#4@2 ~@2 a3@2 b3@2 e4 d#4 f#4@3 [f#3,e4] g#2@14 d#4@10 b4@10 f#4 [b3,e4] c#3@4 [b3,e4]@2 g#4 f#4 [b2,c#5]@7, ~@12 a3@9 [f#4,g#4] b3 e4 d#4 f#4@3 [b3,e4] d#3@19 [b3,c#4,e4]@5 c#4@7 b3@9 [a3,c#4]@2 e4 d#4 b2@5 b4@2 [e4,f#4,g#4] e2@31, ~@12 d#4@5 [f#4,g#4,b4]@2 e4@2 b4@28 ~@4 g#4@10 d#4 [a3,c#4] f#2@11 a3@9 [f#4,g#4] b3 g#4 f#4 a4@23, ~@12 f#4@5 e2@32 a2@18 f#3@11 c#4@14 [b3,g#4] d#3@19]/7", // Esus4 Bsus4 B7 E5 A C#m E C#7 …
  W: "[~@5 e4@2 ~@4 [b3,e4] ~@9 e4@2 ~ [c#3,d#4] e4@2 ~@8 e4@2 ~@2 a3@2 ~@4 b4@3, [b3,c#4,e4]@5 c#4@8 g#2@12 [b2,g#4]@7 c#4@5 [b3,c#4,e4]@4 ~@2 g#3@5, ~ a2@14 f#4@2 ~@2 f#3@6 ~@3 [a3,e4]@5 a2@8 [g#2,b3,e4]@7, ~@3 a3@6 f#4@3 [b3,e4]@4 [a3,e4]@5 [a3,a4]@4 ~@2 f#4@4 f#4@2 ~ f#4@7 ~@7, ~@5 b3@2 e4 d#4@9 f#2@6 [f#2,e4]@2 ~@7 g#4@9 ~@7]/3", // E5 C#sus2 C#m7 E C#m7 A5 E E5 …
  X: "[~ a3@2 ~@2 e4@2 ~ d#4 ~@8 d#4@4 ~@11 e5 ~@9 b4@2 ~ [b4,d#5] ~@2 e5 e5@3 ~ e5 ~@4 a4@3 e4@2 ~@8 d#4@4 ~ [b2,e3,g#3,b3,e4]@14 ~@6, ~ f#2@8 [b2,a3,g#4]@12 b4@7 e5 d#5 f#5@3 e5 d#4 b4 d#5@2 ~@14 d#5@2 ~@11 f#4@11 ~@20, ~ e4@4 ~@2 e4@2 e4@5 e4@8 e3@15 e5@7 e5@2 ~@29 [e2,f#3]@15 ~@6, ~@3 a3@6 ~@2 f#4@10 [f#4,g#4]@17 ~@2 g#4@6 ~ g#4@7 ~@2 e4@4 ~ d#4 ~ e4@5 e4@8 ~@20, ~@24 e4@14 c#4@8 [b3,f#5]@8 [a3,c#5]@8 ~ [b2,a3,c#4,g#4]@14 ~@19]/6", // B E Esus2 F#sus2 B5 A C#7
})).s("gm_piano").gain(0.48)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@12 A B C D A E C F G H I J K L M N O P A B C D A E C F Q R S T U T V W X Y Z AA AB@2 AC AA AD ~@7
>`.pickRestart({
  A: "e2@3 d#2", B: "c#2@3 b1", C: "a1@3 g1", D: "f#1@3 a1 b1@2 a1 b1", E: "c#2 b1", F: "f#1@6 g1 a1 b1@8", G: "e2",
  H: "~ b1", I: "e2@5 ~ e2 ~ e2@8", J: "d2@5 ~ d2 ~ d2@6 e2 g#2", K: "c#2@5 ~ c#2 ~ c#2@8",
  L: "b1@5 ~ b1 ~ b1@2 ~ [b2,c#3] b2 a2 g#2 f#2", M: "e2@5 ~ e2@2 e2@8", N: "f#2@5 ~ f#2@2 f#2@8",
  O: "c2@5 ~ c2@2 c2@8", P: "b1@5 ~ b1@2 b1@8", Q: "e2 ~", R: "c2@7 c2 b1@6 b1 a1", S: "g1@6 g1@2 d1@6 a1 b1",
  T: "c2@6 c2@2 b1@6 b1 a1", U: "g1@2 f#1@2 e1@2 d1@5 ~ d1@2 d1@2", V: "g1@6 g1@2 d1@4 d1 a1 b1@2",
  W: "c2@6 c2@2 b1@5 ~ b1@2", X: "b1@3 b1 b2@4", Y: "~ e2@12 d#2@3", Z: "~ c#2@12 b1@3", AA: "~ a1@12 g1@3",
  AB: "[~ f#1@6 a1@2 b1@4 a1@2 b1@2 e2@12 d#2@3]/2", AC: "~ c#2@8 b1@7", AD: "~ f#1@6 g1 a1 b1@7",
})).s("gm_fretless_bass").gain(0.25)

// chords · string ensemble 2 · "String"
const string_ensemble_2 = note("<A@7 B@4 C@4 D E@3 F G@5 H@8 D I@5 J@2 K L J@2 M N@4 O P@3 O Q ~@6>".pickRestart({
  A: "[f#4@3 d#4 ~@12 [e4,g#4]@4 [d4,a4]@4 [c#4,e4,g#4]@4, e6@4 ~@3, e4@3 f#4@3 ~, [g#4,b4]@2 a4@2 b4@3, ~ c#4@3 ~@3]/7", // E D5 C#m G#m
  B: "[~ d#4 [e4,g#4,b4]@2 a4@2 [c4,e4,g4]@2, f#4@3 ~, [b3,a4] ~ d4@2]/4", // E C B7
  C: "[e4@2 d#4@2 ~@3 d#4 c#4@4 [c4,a4]@3 [d#4,f#4,g#4,b4], f#4@7 ~@9, [b3,a4]@4 e4@11 ~, ~ [g#4,b4]@2 ~]/4", // F G#m7 B7 G#m
  D: "[c#4,e4,f#4,a4]@2 [c#4,e4,a4] [d#4,f#4,b4]", // F#m7 A B
  E: "[f#4@4 c#4@4 [c#4,a4]@3 [d#4,f#4,g#4,b4], e4@11 ~, [g#4,b4]@2 ~]/3", F: "[c#4,e4,a4]@3 [d#4,f#4,b4], f#4 ~",
  G: "[f#4@3 d#4 c#4@4 ~@4 [d4,a4]@4 [c#4,e4,g#4]@4, b4, [e4,g#4]@3 ~@2, ~@2 f#4@2 ~]/5", // D5 C#m E
  H: "[~@2 d#4@2 [e4,g#4,b4]@4 a4@4 [c4,g4]@4 ~@2 d#4@2 ~@3 d#4 c#4@4 [c#4,a4]@3 [d#4,f#4,g#4,b4], f#4@12 e4@6 ~@2 e4@11 ~, [b3,a4]@4 ~@4 d4@8 f#4@7 ~@9, ~@4 [b3,a4] [g#4,b4]@2 ~]/8", // E C5 F#m G#m7 B7 G#m
  I: "[f#4@4 c#4@4 [c#4,a4]@3 [d#4,g#4,b4] [c#4,e4,a4]@3 d#4 [e4,g#4]@4, e4@11 f#4@3 ~ [f#4,b4]@5, [g#4,b4]@2 ~@3]/5", // F#m G#m A E B5 G#m
  J: "[[c4,e4] b3@2 [a3,f#4], g4@3 ~, ~ d4@3]/2", K: "[c4,e4] [b3,d4], g4",
  L: "[d4,g4,b4] [d4,f#4,a4] [d4,e4,g4,b4] [d4,f#4,a4]@5", M: "[c4,e4,g4] [b3,d4,g4]",
  N: "[e4@8 d#4@9 ~@12 d#4@4 c#4@16 [c#4,a4]@12 [d#4,f#4,g#4,b4]@3, f#4@29 ~@35, [b3,a4]@17 e4@44 ~@3, ~@17 [g#4,b4]@32 ~@15]/4", // F#m G#m7 B7 G#m
  O: "~ [c#4,e4,a4]@12 [d#4,f#4,b4]@3, ~ f#4@8 ~@7", // A B
  P: "[~ f#4@16 c#4@16 [c4,d4,a4]@12 [d#4,f#4,g#4,b4]@3, ~ e4@44 ~@3, ~ [g#4,b4]@32 ~@15]/3", // D7 G#m7 G#m
  Q: "~ f#4@12 d#4@3, ~ [e4,g#4,b4]@15", // E
})).s("gm_string_ensemble_2").gain(0.1)

// other · oboe
const oboe = note("<~@2 [~@4 c#5 d#5 e5 b4] [a4@3 ~] ~@16 [~@2 e4 b4] [e5@15 ~] ~@40>").s("gm_oboe").gain(0.26).pan(0.2)

// other · french horn
const french_horn = note("<~@3 [~@2 e4 f#4 e4@2 d#4@2] ~@17 [e4 f#4 g#4 b4 a4@3 ~] ~@40>")
  .s("gm_french_horn").gain(0.44).pan(0.7)

// other · orchestral harp · "Harp" · D#m Asus2 D#m
const orchestral_harp = note("<~@3 [~@12 b3 [d#4,f#4] [a4,b4] [d#5,f#5]] [b5 ~@15] ~@57>")
  .s("gm_orchestral_harp").gain(0.57)

// drums · kick
const kick = s("bd").struct("<~@12 x!5 [x ~@14 x] x!3 ~ [x ~@2 x!2 ~@3]!25 [~ x ~@5 x ~ x ~@6]!9 ~@6>").gain(0.36)

// drums · snare
const snare = s("sd").struct("<~@15 A ~@3 A ~ A B@16 C B@3 D B@4 E@9 ~@6>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@4 x!2 ~ x ~@3", D: "x!3 ~@2 x!2 ~", E: "~@5 x ~@7 x ~@2",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@21 [~@13 x!2 ~] ~@16 [~@13 x!2 ~] ~@3 [~@13 x!2 ~] ~@19>").gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@12 [~ x ~ x]!27 [x ~ x ~ x!3 ~ x ~ x ~ x!3 ~]!8 [~@5 x ~@7 x ~@2]!7 ~@8>").gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@29 [~@13 x!2 ~] ~@32>").gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@29 [~@4 x!3 ~] ~@32>").gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@22 A ~@7 A ~@8 A ~@3 A ~@3 B ~@14>".pickRestart({
  A: "x", B: "~ x ~@14",
})).gain(0.48)

// drums · ride
const ride = s("rd").struct("<~@4 A B ~ B ~ B@3 C B@8 ~ B@4 C B@20 D@9 E F ~ F ~@2>".pickRestart({
  A: "x", B: "~@3 x", C: "x ~@2 x", D: "~@13 x ~@2", E: "~ x ~@14", F: "~@3 x ~@4",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@42>".pickRestart({
  A: "~@3 x",
})).gain(0.48)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@3 [~@15 x] ~@7 [~@15 x] ~@13 [~@15 x] ~@36>").gain(2.86)

stack(
  piano, bass, string_ensemble_2, oboe, french_horn, orchestral_harp, kick, snare, low_tom, hihat, mid_tom, high_tom,
  crash, ride, tambourine, bell_tree
)

More by Mariah Carey