Strudelify

All I've Ever Wanted

Mariah Carey

KeyA majorTempo60 bpm
0:00/0:00
// All I've Ever Wanted — Mariah Carey
// 60 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 62 bars on a 32-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@3 B C D E F G H I J K L M N O P Q R S T U E F V W X Y Z AA AB AC AD P Q AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS
  AT@2 AU AV AW AX AY AZ BA@3
>`.pickRestart({
  A: "[~@30 b4@3 ~ b4@3 ~ c#5@3 ~ e5@11 ~@5 e5@4 e4@4 ~ b4@20 ~@9, ~@13 a4@11 ~@24, ~@14 e4@8 ~@7 g#3@13 ~@6]/3",
  B: "~@4 b4@6 ~@2 c#5@3 ~ e5@8 ~@5 d5@3, g3@11 ~@5, ~ b4@3 ~@28, ~@2 c#4@17 ~@13",
  C: "c#5@2 ~ d5@2 ~ a5@8 ~@2, [f#3,d4]@11 ~@5", D: "~@16 [c#4,e4]@11 ~@5, a3@11 ~@5", E: "~@16 b3@11 ~@5, e3@11 ~@5",
  F: "[e3,b3]@11 ~@5", G: "[a3,d4] ~, d3@11 ~@5", H: "~ [f3,a3]@11 ~ [f3,a3]@11 ~@8, c4@11 ~ d4@11 ~@9",
  I: "[a3,c#4]@11 ~@2 c#4@7 c#4@3 ~ a4@6 ~@2, ~@12 e4@11 ~@9, ~@13 b3@11 ~@8", // A
  J: "[f3,a3,c4]@11 ~@6 [f3,a3,c4]@11 ~@4, ~@16 d4@11 ~@5", K: "[a3,b3,e4] ~",
  L: "e4@8 ~@4 a4@3 ~ e4@4 c#5@3 ~@9, c#4@21 ~@11, ~ e4 ~@2", M: "c#4@16 c#4@4 e4@3 ~ c#4@3 ~ a4@3 ~, e4@5 ~@3",
  N: "f#4@12 ~@4 a4@5 ~@11, [d4,c#5]@11 ~@5, ~@6 f#4@5 ~@5", // Dmaj7
  O: "~@9 d4@5 ~@2 [a3,d4,e4]@10 b4@4 ~@2, d4@9 ~@23, ~ [g4,b4]@11 ~@20", // Asus4 G
  P: "e4@12 ~@5 a4@3 ~ e4@3 c#5@6 ~@2, [c#4,c#5]@11 ~@5, ~@12 e4@9 ~@11", Q: "~@16 f#4@5 ~@11, [c#4,e4,c#5]@11 ~@5",
  R: "~@4 b4@3 ~ a4@3 ~ g4@4 e4@8 e4@6 ~@2, [d4,f4,c5]@11 ~@5 [a3,d4]@11 ~@5", // Dm7 D5
  S: "~@5 a4@3 b4@3 ~ c#5@3 ~@5 b4@3 ~ b4@3 ~ c#5@3 ~, [c#4,e4]@11 ~@5 e5@3 ~@13, ~@17 a4@11 ~@4", // C#m
  T: "a4@3 ~ b4 ~ b4@4 ~@3 c#5@3 e5@6 ~@2 f#3@2 a3 ~ d4@3 ~, [c#4,e4]@11 ~@21", U: "~@16 [c#4,e4]@11 ~@5, ~ a3@21 ~@10",
  V: "[a3,d4] ~, d3@21 ~@11", W: "~ [f3,a3]@11 [f3,a3,d4]@11 ~@9, c4@11 ~@21",
  X: "[a3,c#4]@11 ~@9 c#4@4 ~ a4@5 ~@2, ~@12 e4@11 ~@9, ~@3 c#4@2 ~@3, ~@13 b3@11 ~@8", // A
  Y: "~ [f3,a3]@11 ~@5 [f3,a3]@11 ~@4, c4@11 ~@5 [c4,d4]@11 ~@5", Z: "~ e4@17 ~@14, [a3,b3] ~",
  AA: "e4@8 ~@4 a4@3 ~ e4@4 c#5@3 ~@9, c#4@11 ~@5, ~ e4 ~@2", AB: "~ c#4@15 c#4@4 e4@3 ~ c#4@3 ~ a4@3 ~, e4@5 ~@3",
  AC: "~@16 a4@5 ~@11, d4@11 ~@5, f#4@6 f#4@5 ~@5, ~ c#5@22 ~@9",
  AD: "~ d4@7 d4@6 ~@2 [a3,d4,e4]@10 b4@4 ~@2, ~ [g4,b4]@11 ~@20", // Asus4 G
  AE: "~@4 b4@3 ~ a4@3 ~ g4@4 [a3,d4,e4]@9 e4@5 ~@2, d4@11 ~@21, ~ [f4,c5]@11 ~@20", AF: "[c#4,e4]@11 ~@21",
  AG: "~ [b3,d4]@6 ~@2 b3@6 ~ [b3,d4]@6 ~@2 d4@3 ~ b3@3 ~, ~@4 d4@3 ~@9", // Bm
  AH: "[a3,c#4]@6 ~@3 [a3,c#4]@6 ~ [a3,c#4]@6 ~@2 [a3,c#4]@5 ~@3", // A
  AI: "~ b3@6 ~ [b3,d4]@6 ~@2 [b3,d4]@6 ~@2 d4@3 ~ b3@3 ~, d4@5 ~@27", // Bm
  AJ: "[c#4,e4]@6 ~@2 [c#4,e4]@6 ~@3 [c#4,e4]@6 ~ c#4 ~ e4@2 a4@3 ~", // C#m
  AK: "~ b3@6 ~ [b3,d4]@6 ~@2 [b3,d4]@6 ~@3 b3@6 ~, d4@5 ~@19 d4@5 ~@3", // Bm
  AL: "~ [g3,c4]@6 ~@5 c4@3 ~ [g3,g4]@4 e4@3 ~ g3@6 ~@2, e4@5 ~@3, g4@16 ~@8 c5@3 ~@5, ~@9 g3@6 ~@17", // C5 G
  AM: "[a3,c4]@6 ~@2 a3@5 c4@3 a3@4 e4@3 ~@2 a3@5 ~@2, [e4,g4]@21 ~@11, ~@16 a4@3 ~@5 c5@3 ~@5", // Am Em
  AN: "~ a3@5 ~@2 c4@4 f4@4 c4@5 f4@3 c4@5 ~@3, ~ [a4,c5]@17 ~@6 c5@3 ~@5, ~ f4@11 ~@4 a4@3 ~@13", // Am
  AO: "[d4,e4,a4,b4]@12 [d4,e4,a4,b4]@4 [d4,e4,a4,b4]@11 ~@5", AP: "[b3,e4,b4]@25 ~@7",
  AQ: "~@7 e4@8 ~@4 a4@3 e4@5 c#5@3 ~@2, ~@7 c#4@21 ~@4, ~@15 e4@7 ~@10",
  AR: "~@6 c#4@16 c#4@4 e4@3 ~ c#4@2, ~@3 e4@10 ~@3",
  AS: "~@2 a4@3 ~ f#4@11 ~@5 a4@5 ~@5, ~@3 [d4,c#5]@11 ~@2, ~@17 f#4@10 ~@5", // Dmaj7
  AT: "[~@13 d4@5 ~@3 [a3,d4,e4]@10 b4@4 ~@2 e4@11 ~@4 a4@3 ~@2 e4@3 c#5@4, ~@5 d4@8 ~@24 [c#4,c#5]@21 ~@6, ~@6 [g4,b4]@11 ~@31 e4@9 ~@7]/2", // Asus4 C# G
  AU: "~@20 f#4@5 ~@7, ~@4 [c#4,e4,c#5]@21 ~@7", // C#m
  AV: "~@8 b4@3 ~ a4@3 g4@4 e4@8 e4@5, ~@4 [d4,f4,c5]@11 ~@4 [a3,d4]@11 ~@2", AW: "~@3 [c#4,e4]@22 ~@7",
  AX: "~@3 [d4,f4]@11 ~@5 [a3,e4]@7 ~@6, ~@18 d4@7 ~@7", // Dm A5
  AY: "~@6 b4@3 ~ a4@3 ~ b4@3 c#5@3 ~@6 b4@3 ~ b4@2, ~@6 [c#4,e4]@11 ~@4 e5@3 ~@8, ~@11 a4@5", // C#m
  AZ: "~@2 c#5@3 a4@6 ~@2 b4@3 ~@2 c#5@3 ~ e5@6 ~@2 c#5@2, ~@5 e4@11 ~@16",
  BA: "[~@3 d5@3 ~ c#5@3 ~@2 b4@3 ~ a4@4 ~ b4@3 ~@2 a4@5 d5@4 d4@6 b4@3 ~@2 [e3,a3]@29 ~@21, ~@7 e4@12 ~@7 e5@3 ~@6 a4@3 ~@58]/3", // A5
})).s("gm_piano").gain(0.46)

// bass · fretless bass · "bass"
const bass = note(`<
  ~@5 A B C D E F G H I J K L M N O P Q A B C R E S T U I V K L W N X Y Z AA Z AB Z AC AB AD Z AE AF AG AH AI AJ AK AL
  AM AN AO AP AQ@3
>`.pickRestart({
  A: "a2@2 ~ a2@4 ~", B: "g#2@2 ~ g#2@4 ~", C: "g2@8 ~@4 g2@11 ~@5 a2 ~ g2@2", D: "f#2@8 ~@4 f#2@11 ~@5 d2 ~ e2 ~",
  E: "f2@2 ~ d2@4 ~", F: "a2@8 ~@4 a2@8 ~@6 a2 ~ e2 ~ e2@2", G: "f2@8 ~@4 d2@11 ~@7 d2@2",
  H: "e2@8 ~@4 e2@8 ~@4 e2@2 e2@2 e2@3 ~", I: "a2@8 ~@4 a2@3 ~ a2@8 ~@4 a2 ~ g#2 ~",
  J: "f#2@8 ~@4 f#2@3 ~ f#2@8 ~@4 f#2 ~ e2 ~", K: "d2@8 ~@4 d2@3 ~ d2@8 ~@6 d2 ~", L: "g2@8 ~@4 g2@3 ~ e2@11 ~@5",
  M: "a2@8 ~@4 a2@3 ~ a2@6 ~@4 e2@2 a2 ~ g#2 ~", N: "f#2@8 ~@4 f#2@3 ~ f#2@11 ~@5", O: "d2@8 ~@4 d2@3 ~ e2@8 ~@6 e2 ~",
  P: "a2@21 ~@11", Q: "f#3@16 ~@8 e3@5 ~@3", R: "f#2@8 ~@4 f#2@11 ~@5 d2@2 e2@2", S: "a2@8 ~@4 a2@8 ~@6 a2 ~ e2 ~ e2 ~",
  T: "f2@8 ~@4 d2@11 ~@7 d2 ~", U: "e2@8 ~@4 e2@8 ~@4 e2@2 e2 ~ e2@3 ~", V: "f#2@8 ~@4 f#2@3 ~ f#2@8 ~@4 f#2@2 e2@2",
  W: "a2@8 ~@4 a2@3 ~ a2@5 ~@5 e2@2 a2 ~ g#2 ~", X: "d2@8 ~@4 d2@3 ~ e2@8 ~@6 e2@2",
  Y: "a2@8 ~@4 a2@3 ~ a2@3 ~ a2@3 ~ a2@3 ~ a2@3 ~", Z: "e2@8 ~@4 e2@3 ~ e2@11 ~@5",
  AA: "a2@8 ~@4 a2@3 ~ a2@8 ~@4 a2@3 ~", AB: "a2@8 ~@4 a2@3 ~ a2@11 ~@5", AC: "c3@8 ~@4 c3@3 ~ c3@8 ~@4 b2@3 ~",
  AD: "f2@8 ~@4 f2@3 ~ f2@11 ~@5", AE: "e2@6 ~@2 e2@6 ~@4 e2@7 ~@3 e2@4", AF: "~ e2@4 ~@2 a2@8 ~@4 a2@3 ~ a2@8 ~",
  AG: "~@2 a2 ~ g#2 ~ f#2@8 ~@4 f#2@3 ~ f#2@8 ~@2", AH: "~@2 f#2@2 e2 ~ d2@8 ~@3 d2@3 ~ d2@8 ~@3",
  AI: "~@3 d2 ~ g2@8 ~@4 g2@3 ~ e2@11", AJ: "~@5 a2@8 ~@3 a2@3 ~ a2@5 ~@5 e2 ~",
  AK: "a2 ~ g#2@2 f#2@8 ~@4 f#2@3 ~ f#2@11 ~", AL: "~@3 d2@8 ~@4 d2@3 ~ e2@8 ~@5", AM: "~ e2 ~ a2@8 ~@4 a2@16 ~",
  AN: "~@2 d2@10 ~@6 e2@7 ~@7", AO: "~@3 a3@11 ~@2", AP: "~@3 g#3@11 ~@2",
  AQ: "[~@7 f#3@12 ~@7 f3@13 ~@7 a2@29 ~@21]/3",
})).s("gm_fretless_bass").gain(0.55)

// chords · synth strings 1 · "sinth"
const synth_strings_1 = note(`<
  A@3 B C B D B C E B F G B H C I B H J B K B D B C E B F G B H C I B H J B L B L B L M N O P Q@8 R S T@5
>`.pickRestart({
  A: "[~@13 [c#5,e5,a5]@16 [e5,g#5,b5]@19]/3", B: "[c#5,e5,a5]", C: "[d5,f#5,a5]", D: "[e5,g#5,b5]",
  E: "[f5,a5]@3 [d5,f5,a5]@4 ~, c5 ~", F: "[c5,f5,a5] [d5,f5,a5]", G: "[b4,e5,g#5]@3 ~", H: "[c#5,f#5,a5]",
  I: "[b4,d5,g5] [b4,e5,g#5]", J: "[d5,f5,a5] [b4,e5,g#5]", K: "[f#5,a5]@3 [d5,f#5,a5], c#5", L: "[b4,e5,g5]",
  M: "[c5,e5,g5]", N: "[c5,e5,a5]", O: "[c5,f5,a5]", P: "[b4,e5,g#5]",
  Q: "[[b4,e5,g#5]@39 [c#5,e5,a5]@31 [c#5,f#5,a5]@32 [d5,f#5,a5]@31 [b4,d5,g5]@16 [b4,e5,g#5]@16 [c#5,e5,a5]@31 [c#5,f#5,a5]@31 ~ [f5,a5]@15 ~ b4@12, ~@227 d5@16 [e5,g#5]@13]/8", // E A F#m D G E A F#m …
  R: "~@3 [c#5,e5,a5]@21 ~@8", S: "~@3 [f5,a5]@15 ~ [b4,g#5]@10 ~@3, ~ d5@8 e5@5 ~@2",
  T: "[~@6 [c#5,e5]@31 ~ a4@33 [c#5,f#5]@38 ~ [a4,c#5,e5]@44 ~@6, ~@37 c#5@33 ~@90]/5", // C#m F#5 A
})).s("gm_synth_strings_1").gain(0.07)

// chords · string ensemble 2 · "strings 1"
const string_ensemble_2 = note("<~@30 A B C D A B E A F A F A F G H I J K@8 L ~@6>".pickRestart({
  A: "[c#4,e4,a4]", B: "[c#4,f#4,a4]", C: "[d4,f#4,a4]", D: "[b3,d4,g4] [b3,e4,g#4]", E: "[d4,f4,a4] [b3,e4,g#4]",
  F: "[b3,e4,g4]", G: "[c4,e4,g4]", H: "[c4,e4,a4]", I: "[c4,f4,a4]", J: "[b3,e4,g#4]",
  K: "[[b3,e4,g#4]@39 [c#4,e4,a4]@31 [c#4,f#4,a4]@32 [d4,f#4,a4]@31 [b3,d4,g4]@16 [b3,e4,g#4]@16 [c#4,e4,a4]@31 [c#4,f#4,a4]@32 [d4,f4,a4]@15 [b3,e4,g#4]@13]/8", // E A F#m D G E A F#m …
  L: "~@3 [c#4,e4,a4]@16 ~@13", // A
})).s("gm_string_ensemble_2").gain(0.35)

// chords · synth strings 1 · "sinth"
const synth_strings_1_2 = note("<~@37 A B A B A B C D E F G@8 H ~@6>".pickRestart({
  A: "[c#4,e4,a4]", B: "[b3,e4,g4]", C: "[c4,e4,g4]", D: "[c4,e4,a4]", E: "[c4,f4,a4]", F: "[b3,e4,g#4]",
  G: "[[b3,e4,g#4]@39 [c#4,e4,a4]@31 [c#4,f#4,a4]@32 [d4,f#4,a4]@31 [b3,d4,g4]@16 [b3,e4,g#4]@16 [c#4,e4,a4]@31 [c#4,f#4,a4]@32 [d4,f4,a4]@15 ~ b3@12, ~@243 [e4,g#4]@13]/8", // E A F#m D G E A F#m …
  H: "~@3 [c#4,e4,a4]@16 ~@13", // A
})).s("gm_synth_strings_1").gain(0.4).pan(0.3)

// other · string ensemble 1 · "strings 2"
const string_ensemble_1 = note("<~@38 A ~ A ~ B C D E F G@8 ~@7>".pickRestart({
  A: "g4@2 b4@2 g4@2 e4@2 b3@2 ~ g3@4 ~", B: "g4 b4 g4 e4 b3 g3 g3@2", C: "g4 c5 g4 e4 c4 g3 g3@2",
  D: "a4 c5 a4 e4 c4 a3 a3@2", E: "a4 c5 f4 c4 a3!2 a3@2", F: "g#4 b4 g#4 e4 g#4 b4 g#4 e4",
  G: "[[e4,g#4,b4]@38 ~ [c#3,e3,a3]@31 [c#3,f#3,a3]@32 [d3,f#3,a3]@31 [b2,d3,g3]@16 [b2,e3,g#3]@16 [c#3,e3,a3]@31 [c#3,f#3,a3]@31 ~ [f3,a3]@15 [b2,e3,g#3]@13, ~@227 d3@16 ~@13]/8", // E A F#m D G E A F#m …
})).s("gm_string_ensemble_1").gain(0.4).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@21 A B@7 C@18 D E F G H I J K L ~@6>".pickRestart({
  A: "~@15 x", B: "x ~@5 x ~@8 x", C: "x ~@5 x ~ x ~@6 x", D: "x ~@3 x ~@8 x ~@3 x ~@14", E: "~@7 x ~@10 x ~@3 x ~@9",
  F: "~@2 x!2 ~@5 x ~ x ~@4", G: "~@4 x ~ x ~@10 x ~@3 x ~@10", H: "~@3 x ~ x ~@11 x ~@3 x ~@10",
  I: "~@3 x ~ x ~@10 x ~@3 x ~@11", J: "~ x!2 ~@5 x ~ x ~@5", K: "~@2 x!2 ~@11 x ~@3 x ~@12", L: "~ x ~@30",
})).gain(0.55)

// drums · snare
const snare = s("sd").struct("<~@21 A B@7 C B@17 D E F@2 E@2 G H ~@7>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@14 x!2", D: "~@27 x ~@4", E: "~ x ~@30", F: "~ x ~@14", G: "x", H: "x ~@30 x",
})).gain(0.55)

// drums · hihat
const hihat = s("hh").struct("<~@22 [x!8]!8 ~@32>").gain(0.55)

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 A B@25 ~ C D@2 E@2 F G ~@7>".pickRestart({
  A: "~@15 x", B: "x", C: "~@7 x ~@24", D: "~@3 x ~@12", E: "~@5 x ~@26", F: "~ x ~@6", G: "~@3 x ~@28",
})).gain(0.55)

// drums · high tom
const high_tom = s("ht").struct("<~@47 [x ~@3 x ~@8 x ~@3 x ~@14] ~@14>").gain(0.55)

// drums · ride
const ride = s("rd").struct("<~@30 A@17 ~ B C D E F A G ~@7>".pickRestart({
  A: "x!8", B: "~@7 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~", C: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
  D: "~@2 x ~@3 x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2", E: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@2",
  F: "~ x ~@3 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3", G: "x ~@2 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x",
})).gain(0.55)

// drums · china
const china = s("cr").struct("<~@22 A@25 B C D@2 E@2 F G ~@7>".pickRestart({
  A: "x", B: "~@4 x ~@6 x ~@4", C: "~@4 x ~@2 x ~@24", D: "~@3 x ~@12", E: "~@5 x ~@26", F: "~ x ~@6", G: "~@3 x ~@28",
})).gain(0.55)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@4 [~@3 x] ~@57>").gain(2.61)

stack(
  piano, bass, synth_strings_1, string_ensemble_2, synth_strings_1_2, string_ensemble_1, kick, snare, hihat, mid_tom,
  high_tom, ride, china, bell_tree
)

More by Mariah Carey