Strudelify

Now That I Know

Mariah Carey

KeyF minorTempo115 bpm
0:00/0:00
// Now That I Know — Mariah Carey
// 115 bpm, 4/4, key F minor. 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 127 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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 · "piano high"
const piano = note(`<
  A@3 B C D E@2 F@2 G ~@5 H@2 I J K@2 L M N@3 O P@2 Q@2 R@2 S T@3 U@2 H@2 I V W@2 L X Y ~ Z ~ AA@3 O AB@2 AC@2 R@2 S T@3
  U@2 H@2 AD J AE@2 AF AG AH ~@15 AI@2 AJ@2 AK@2 AL AM AN ~ AO@2 AP@2 I AQ AR@2 AS AT AU@2 AV AW AX@2 L AY AZ BA BB BC@4
>`.pickRestart({
  A: "[~@13 [ab4,c5]@7 ~@3 bb4 ~ ab4 ~ [eb4,g4,bb4]@7 ~@3 ab4 ~ [g4,ab4] f4 g4@7, ~@12 f4@7 ~@29]/3", // Ab Eb Abmaj7
  B: "~@3 ab4@2 ~@2 f4@5 ~@3 eb4", C: "g4 ~ eb4 bb3 ~ [ab3,db4,f4]@5 ~@6",
  D: "~@4 f4 ~ ab4 c5 [db5,eb5] ab5 g5 f5 eb5 db5 c5 bb4", // Dbsus2
  E: "[~@2 c5@7 ~@3 db4@2 ~ f4@3 ~ db4@3 ~ e4@3 ~@2 [db5,f5,ab5,bb5,c6,db6,eb6,f6] [c4,db4,eb4,f4,bb4] ab3 ~, ~ f4@7 ~@20 [c5,eb5,g5]@2 ~@2, ~@29 [bb3,g4,ab4]@2 ~]/2", // Dbmaj7 Bbm Cm Eb
  F: "[f5@3 ~@11 [f4,ab4]@5 ~@13]/2", // Fm
  G: "[c4,f4] ~ [f4,ab4] ~ [g4,bb4] ~ c5@2 [c4,f4] ~ [f4,ab4] ~ [g4,bb4] ~ [c4,f4] ~, ~@6 ab4 ~@9", // F5 Fm Gm F5 Fm Gm F5
  H: "[[f4,ab4] ~@3 [f4,ab4,c5] ~ [eb4,g4,bb4]@3 ~@5 [eb4,g4,bb4]@4 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,eb4] ~@5]/2", // Fm Eb Fm Cm
  I: "[db4,f4,ab4] ~ [eb4,g4,bb4] ~ [c4,f4,ab4] ~ [c4,eb4,ab4] ~@9", // Db Eb Fm Ab
  J: "[db4,f4,ab4] ~ [g4,bb4] ~ [c4,f4,ab4] ~ [eb4,g4]@3 ~ [e4,g4]@4 ~@2, ~ eb4 ~ c5@2 ~@3", // Db Gm Fm Eb Em
  K: "[[ab4,c5,f5] ~@3 [f4,c5] ~ [eb4,g4,bb4]@3 ~@5 [eb4,g4,bb4]@4 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,eb4] ~@5, ~@2 ab4 ~@13]/2", // Fm F5 Eb Fm Cm
  L: "[db4,f4,ab4] ~ [eb4,g4,bb4] ~ [c4,f4,ab4] ~ [bb3,eb4,ab4] ~@9", // Db Eb Fm Ebsus4
  M: "[f4,ab4] ~ [eb4,g4] ~ [f4,ab4] ~ [eb4,g4,bb4]@3 ~ [c4,e4]@4 ~@2, db4 bb4 c4 ~@5", // Fm Eb Fm Eb C
  N: "[~@8 [ab4,c5] ~@5 [c4,e4,g4,bb4]@8 ~@8 [ab4,c5]@4 ~@14, ~@8 f4@2 ~@20 eb4@11 ~@7]/3", O: "[c4,d4]@11 ~@5",
  P: "[[db4,f4,ab4]@4 ~@4 [db4,f4]@4 ~@2 [eb4,ab4]@4 ~@2 [bb3,eb4,ab4]@4 ~@2 [bb3,eb4,ab4] ~@5]/2", // Db Ab5 Ebsus4
  Q: "[db4@5 ~@3 [db4,f4,ab4] ~ [eb4,g4,bb4] ~ [db4,ab4] ~ [db4,f4,ab4]@8 [e4,g4,bb4]@4 ~@6, ~@6 f4 ~@9]/2", // Db Eb Db5 Db Edim
  R: "[[ab4,c5]@4 ~@4 [ab4,c5] ~@5 [c4,e4,g4]@8 ~@10, ~@2 f4 ~@5]/2", S: "[f4,ab4]@5 ~@3 f4@5 ~@3",
  T: "[[c4,d4]@5 ~@9 [c4,f4,ab4]@11 ~@5 [eb4,g4]@8 ~@10]/3", // Csus2 Fm Eb
  U: "[[f4,ab4]@3 ~@11 [db4,f4,ab4]@8 ~@2 [e4,g4,bb4]@5 ~@3, c4@4 ~@3 c5@8 ~]/2", // Fm Db Edim
  V: "[f4,ab4] ~ [eb4,g4,bb4] ~ [f4,ab4] ~ [eb4,g4]@3 ~ [e4,g4]@4 ~@2, db4 ~ c4 c5@2 ~@3", // Fm Eb Fm Eb Em
  W: "[[ab4,c5,f5] ~@3 [f4,ab4,c5] ~ [eb4,g4,bb4]@3 ~@5 [eb4,g4,bb4]@4 [c4,ab4] ~@3 [c4,f4] ~@3 [c4,eb4] ~@5, ~@9 f4 ~ ab4 ~@4]/2", // Fm Eb Fm F5 Cm
  X: "[db4,f4]@2 [eb4,g4,bb4] ~ [c4,f4,ab4] ~ [eb4,g4,bb4]@3 ~ [c4,e4]@4 ~@2, ab4 ~@15", Y: "[ab3,c4]",
  Z: "[bb3,db4,f4] ~ [c4,eb4,g4] ~ [db4,f4,ab4] ~ [g3,c4,eb4]@5 ~@5", // Bbm Cm Db Cm
  AA: "[~@8 [f4,ab4,c5] ~@5 [c4,e4,g4,bb4]@8 ~@8 [ab4,c5]@4 ~@14, ~@30 eb4@11 ~@7]/3", // Fm C7 Ab
  AB: "[[db4,f4,ab4]@4 ~@4 [db4,f4]@4 ~@2 [eb4,ab4]@4 ~@2 [bb3,eb4,ab4]@4 ~@2 [bb3,eb4] ~@5, ~@13 ab4 ~@2]/2", // Db Ab5 Ebsus4 Eb5
  AC: "[db4@5 ~@3 [f4,ab4] ~ [eb4,g4,bb4] ~ [db4,f4,ab4] ~ [db4,f4,ab4]@8 [e4,g4,bb4]@4 ~@6, ~@4 db4 ~@11]/2", // Fm Eb Db Edim
  AD: "[db4,f4,ab4] ~ [eb4,g4,bb4] ~ [c4,f4,ab4] ~ [c4,eb4] ~@9, ~@3 ab4 ~@4", // Db Eb Fm Cm
  AE: "[[ab4,c5] ~@3 [f4,ab4,c5] ~ [eb4,g4,bb4]@3 ~@5 [eb4,g4,bb4]@4 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,eb4] ~@5, f5 ~@15]/2", // Ab Fm Eb Fm Cm
  AF: "[db4,f4] ~ [eb4,g4] ~ [c4,f4,ab4] ~ [bb3,ab4]@2 ~@8, ab4@2 bb4@2 ~@2 eb4 ~@9", // Db Eb Fm Bb7
  AG: "[db4,f4] ~ [eb4,g4,bb4] ~ [f4,ab4] ~ [eb4,g4,bb4]@3 ~ [c4,e4]@4 ~@2, ab4 ~ c4 ~@5", AH: "[c4,f4,ab4]@3 ~@13",
  AI: "[db4@8 ~@6 [db4,f4,ab4]@8 ~@8 [ab4,c5,eb5] ~]/2", AJ: "[~@4 [c4,eb4]@5 ~@5 [gb4,bb4,db5]@8 ~@10]/2",
  AK: "[d4@4 ~@3 [f4,ab4]@2 ~@7, ~@14 c4@11 ~@7]/2", AL: "eb4@2 ~ d4@4 ~",
  AM: "~@2 [c4,eb4,g4] ~@3 [db4,f4,ab4] ~@3 [f4,ab4]@4 ~@2", AN: "[ab4,db5]",
  AO: "[[ab4,db5]@5 ~@9 [db5,f5,ab5]@8 [e4,bb4,eb5]@4 ~@6]/2", // Db5 Db Eb
  AP: "[[f4,ab4] ~@3 [f4,c5] ~ [eb4,g4,bb4]@3 ~@5 [eb4,g4,bb4]@4 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 c4@2 ~@4, ~@4 ab4@2 ~@20 eb4 ~@5]/2", // Fm F5 Eb Fm
  AQ: "[db4,f4,ab4] ~ [eb4,g4,bb4] ~ [c4,f4,ab4] ~ [eb4,g4]@3 ~ [e4,g4]@4 ~@2, ~@3 c5@2 ~@3", // Db Eb Fm Eb Em
  AR: "[[ab4,c5,f5] ~@3 [f4,ab4,c5] ~ [eb4,g4,bb4]@3 ~@5 [eb4,g4,bb4]@4 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 c4@2 ~@4, ~@26 eb4 ~@5]/2", // Fm Eb Fm
  AS: "[db4,f4,ab4] ~ [eb4,g4] ~ [c4,f4,ab4] ~ [bb3,eb4,ab4] ~@9, ~ bb4 ~@6", // Db Eb Fm Ebsus4
  AT: "[db4,f4] ~ [g4,bb4]@2 [c4,f4,ab4] ~ [eb4,g4,bb4]@3 ~ [c4,e4]@4 ~@2, ab4@2 eb4 ~@13", // Db Gm Fm Eb C
  AU: "[f4@2 ~@2 [f4,ab4,c5] ~ [eb4,g4,bb4]@3 ~@5 [eb4,g4,bb4]@4 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,eb4] ~@5, ab4 ~@31]/2", // Fm Eb Fm Cm
  AV: "[db4,f4,ab4] ~ [eb4,g4,bb4] ~ [c4,ab4] ~ [c4,eb4,ab4] ~@9, ~@2 f4 ~@5", // Db Eb Fm Ab
  AW: "[f4,ab4] ~ [eb4,g4,bb4] ~ [c4,f4,ab4] ~ [eb4,g4]@3 ~ [e4,g4]@4 ~@2, db4 ~@2 c5@2 ~@3", // Fm Eb Fm Eb Em
  AX: "[[ab4,c5]@2 ~@2 [f4,ab4,c5] ~ [eb4,g4,bb4]@3 ~@5 [eb4,g4,bb4]@4 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,eb4] ~@5, f5 ~@31]/2", // Ab Fm Eb Fm Cm
  AY: "[db4,f4,ab4] ~ [g4,bb4] ~ [c4,f4,ab4] ~ [eb4,g4,bb4]@3 ~ [c4,e4]@4 ~@2, ~ eb4 ~@6", AZ: "~ [ab3,c4,f4]@3",
  BA: "~@7 [eb5,ab5]@2 ~ [c5,f5]@4 ~@2", BB: "~ [g4,eb5]@2 ~ [g4,eb5]@6 ~@3 db5 c5 ~, ~@13 f4@2 ~",
  BC: "[db5@6 ~@3 c5@2 ~@2 bb4@10 ~ f4@3 [e4,c5]@11 ~@6 [ab3,f4]@17 ~@3, ~@13 f4@7 ~@44]/4", // C Db
})).s("gm_piano").gain(0.5)

// chords · piano · "piano low"
const piano_2 = note("<A@5 B C@2 ~@113 D E@5>".pickRestart({
  A: "[~@16 c3@2 ~ f3@5 ~@6 g3@3 ~ c4@5 ~@5 ab3@2 ~@2 db4@5 ~@2 [ab3,c4]@5 ~@2 [c3,g3]@5 ~@2 bb1@3 ~ f2@2 ~ bb2@2 f3@2, ~@13 f2@10 ~@3 c3@10 ~@5 db3@14 ~@25]/5", // Ab C5
  B: "ab3@2 ~ db4@10 ~@3", C: "[~@4 g3@2 ~@2 c4@15 ~@9, ~ c3@19 ~@12]/2", D: "~@5 db4@10 ~",
  E: "[~@7 f3@2 ~ bb3@6 ~@3 f3@2 ~ bb3@4 ~@6 db3@3 g3@5 ~@3 c3@11 ~@6 f2@17 ~@3, ~@4 bb2@16 ~@9 g2@10 ~@41]/5",
})).s("gm_piano").gain(0.44)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@11 A B@2 C D E@2 F G E@2 F G H@2 I J K L M N H@2 O J P Q R S T@2 F G T@2 F G T@2 F G H@2 I J K L M N H@2 O J P Q R S
  T@2 F G T@2 F G U ~@5 V W X W X Y T@2 F G Z@3 AA@5 AB AC AD AE T@2 F G T@2 F G T@2 F G T@2 F G AF AG ~@5
>`.pickRestart({
  A: "~@15 f3", B: "f3@3 ~ f3 ~ f3 ~@7 f3!2", C: "f3@3 ~ f3 ~ f3 ~@7 f3 ~", D: "f3@3 ~ f3 ~ f3 ~@9",
  E: "[f3@3 ~ f3 ~ c3@4 ~@4 c3@4 db3 ~ db3@3 ~ db3 ~ c3@3 ~ c3 ~]/2", F: "bb2 ~ c3 ~ db3 ~ c3@3 ~ c3 ~ c3@3 ~",
  G: "bb2 ~ c3 ~ db3 ~ eb3@3 ~ e3@4 ~@2", H: "[f3@3 ~ f3@3 ~ f3@3 ~ f3 ~ e3@4 e3 ~ e3@3 ~ e3 ~ e3@3 ~ eb3 ~]/2",
  I: "eb3@3 ~ eb3@3 ~ eb3 ~ bb2 ~ eb3 ~ bb2 ~", J: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ c3 ~ c3 ~",
  K: "db3@3 ~ db3@3 ~ ab2 ~ db3@3 ~ c3 ~", L: "c3 ~ c3 ~ c3@3 ~ c3@3 ~ c3@3 ~",
  M: "bb2 ~ bb2 ~ c3 ~ c3 ~ c3 ~ db3 ~ d3 ~ eb3 ~", N: "eb3 ~ eb3 ~ eb3 ~ c3 ~ c3 ~ c3 ~ c3@3 ~",
  O: "eb3 ~ eb3 ~ f3 ~ f3 ~ ab3 ~ f3 ~ eb3 ~ bb2 ~", P: "db3@3 ~ db3@3 ~ ab2 ~ db3@3 ~ db3 ~",
  Q: "db3 ~ db3 ~ db3@3 ~ ab2 ~ db3@3 ~ db3 ~", R: "db3@3 ~ db3@3 ~ ab2 ~ db3 ~ d3 ~ eb3 ~",
  S: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ c3 ~ c3 ~ c3 ~ c3 ~",
  T: "[f2 ~ g2 ~ ab2 ~ c3@3 ~ bb2 ~ c3 ~ db3@4 db3 ~ db3@3 ~ db3 ~ c3@3 ~ c3 ~]/2", U: "f2@3 ~@13",
  V: "f2@3 ~ f2 ~ bb2 c3 ~@3 db3 ~@2 f3 ~", W: "f2@3 ~ f2 ~ bb2 c3 ~@3 db3 ~@2 c3 ~",
  X: "f2@3 ~ f2 ~ bb2 c3 ~@3 eb3 ~ eb3 f3 ~", Y: "f2@3 ~ f2 ~ bb2 c3 ~@3 f3 ~ f3 c3 ~",
  Z: "[d3@3 ~ d3@3 ~ d3 ~ bb2 ~ d3 ~ db3@5 ~ db3@3 ~ db3 ~ c3 ~ bb2 ~ ab2@4 ab2 ~ ab2@3 ~ ab2 ~ ab2 ~ ab2@3 ~]/3",
  AA: "[ab2 ~ ab2 ~ bb2@3 ~ c3 ~ c3 ~ db3 ~ d3@4 d3 ~ d3@3 ~ bb2 ~ d3@3 ~ db3@4 db3 ~ ab2@3 ~ db3 ~ ab2@3 ~ c3@4 db3 ~ c3 ~ b2@3 ~ c3 ~ b2 ~ bb2@4 c3 ~@3 db3 ~@3 d3@4 ~@2]/5",
  AB: "eb3@3 ~ eb3@3 ~ eb3@3 ~ eb3 ~ eb3 ~", AC: "eb2@3 ~ eb2@3 ~ eb2 ~ eb2@3 ~ eb2 ~",
  AD: "eb2@3 ~ eb2@3 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~", AE: "eb3 ~ d3 ~ db3 ~ c3@3 ~ c3@3 ~ c3 ~", AF: "f3@5 ~@3 c3@5 ~@3",
  AG: "~@5 db4@10 ~",
})).s("gm_electric_bass_finger").gain(0.6)

// chords · lead 2 sawtooth · "effects"
const lead_2_sawtooth = note(`<
  ~@11 A ~@3 A ~@7 A ~@15 A ~@3 A ~@3 A ~@3 A ~@15 A ~@3 A ~@3 A ~@15 A ~@15 A ~@3 A ~@3 A ~@3 A ~@7
>`.pickRestart({
  A: "[bb3,eb4] [c4,f4] [bb3,eb4] [c4,f4] [eb4,ab4] [f4,bb4] [eb4,ab4] [f4,bb4] [bb4,eb5] [c5,f5] [bb4,eb5] [c5,f5] [eb5,ab5] [f5,bb5] [eb5,ab5] [f5,bb5]", // Eb5 F5 Eb5 F5 Ab5 Bb5 Ab5 Bb5 …
})).s("gm_lead_2_sawtooth").gain(0.55)

// chords · synth strings 1 · "sinth"
const synth_strings_1 = note(`<
  ~@24 A B@2 C D@2 E@2 A B@2 C F G H@2 I@2 J K I@2 J K ~@4 A B@2 C D@2 E@2 A B@2 C F G H@2 I@2 J K I@2 J K ~@16 L F M N
  L F O P Q@3 ~ I@2 J K I@2 J K I@2 J K I@2 J K R@2 ~@5
>`.pickRestart({
  A: "[f4,ab4,c5]", B: "[~@7 [eb4,ab4,c5]@8 ~, [e4,g4,bb4] ~]/2", C: "[d4,f4,bb4]",
  D: "[ab4@7 [c4,eb4,ab4]@8 ~, [db4,f4] ~]/2", E: "[[db4,f4]@7 [db4,f4,ab4]@4 ~ [e4,g4,bb4]@4, bb4 ~]/2",
  F: "[db4,f4,ab4]", G: "[eb4,g4,c5]", H: "[[f4,ab4]@7 [db4,f4,ab4]@4 ~ [e4,g4,bb4]@4, c4 ~]/2",
  I: "[[f4,ab4,c5]@3 [eb4,g4,bb4]@4 ~@6 [bb3,eb4,g4]@3, ~@7 [db4,f4,bb4]@8 ~]/2", // Fm Eb Bbm
  J: "[db4,f4,ab4] ~ [eb4,g4,bb4] ~ [c4,f4,ab4] ~ [c4,eb4,ab4]@8 ~@2", // Db Eb Fm Ab
  K: "[db4,f4,ab4] ~ [eb4,g4,bb4] ~ [c4,f4,ab4] ~ [eb4,g4]@3 ~ [e4,g4]@4 ~@2, c5 ~@2 c5@2 ~@3", L: "[d4,f4,ab4]",
  M: "[eb4,ab4,c5]", N: "[gb4,bb4,db5]", O: "[eb4,ab4,c5]@3 [d4,f4,bb4]@4 ~",
  P: "[f4,bb4,db5] [eb4,g4,c5]!2 [f4,ab4,db5]!2 [f4,ab4,d5]@3", Q: "[~@19 [eb4,g4,bb4,c5]@4 ~, [f4,ab4,db5]@47 ~]/3",
  R: "[[f4,ab4,c5]@29 ~@3]/2", // Fm
})).s("gm_synth_strings_1").gain(0.24)

// chords · string ensemble 1 · "strings"
const string_ensemble_1 = note(`<
  ~@40 A@2 B C A@2 B C ~@2 D ~@17 A@2 B C A@2 B C ~@4 E@2 ~@10 F G H I F G J K L@3 ~ A@2 B C A@2 B C A@2 B C A@2 B C ~@7
>`.pickRestart({
  A: "[[f4,ab4,c5]@3 [eb4,g4,bb4]@4 ~@6 [bb3,eb4,g4]@3, ~@7 [db4,f4,bb4]@8 ~]/2", // Fm Eb Bbm
  B: "[db4,f4,ab4] ~ [eb4,g4,bb4] ~ [c4,f4,ab4] ~ [c4,eb4,ab4]@8 ~@2", // Db Eb Fm Ab
  C: "[db4,f4,ab4] ~ [eb4,g4,bb4] ~ [c4,f4,ab4] ~ [eb4,g4]@3 ~ [e4,g4]@4 ~@2, c5 ~@2 c5@2 ~@3", // Db Eb Fm Eb Em
  D: "[bb3,db4,f4] ~ [c4,eb4,g4] ~ [db4,f4,ab4] ~ [g3,c4,eb4]@5 ~@5", E: "[~@8 g3 ~ ab3 ~ bb3 ~ f3@11 ~@7]/2",
  F: "[d4,f4,ab4]", G: "[db4,f4,ab4]", H: "[eb4,ab4,c5]", I: "[gb4,bb4,db5]", J: "[eb4,ab4,c5]@3 [d4,f4,bb4]@4 ~",
  K: "[f4,bb4,db5] [eb4,g4,c5]!2 [f4,ab4,db5]!2 [f4,ab4,d5]@3", L: "[~@19 [eb4,g4,bb4,c5]@4 ~, [f4,ab4,db5]@47 ~]/3",
})).s("gm_string_ensemble_1").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@8 [x!4]!8 ~@4 [x!4]!100 ~@7>").gain(0.48)

// drums · clap
const clap = s("cp").struct("<~@16 [x!4]!4 ~@107>").gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@7 A B@7 C ~@3 D B@19 E B@27 E B@52 ~@7>".pickRestart({
  A: "~@7 x", B: "~ x ~ x", C: "~@4 x ~@3 x!7 ~", D: "~@14 x!2", E: "~@4 x ~@7 x ~ x!2",
})).gain(0.48)

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

// drums · open hat
const open_hat = s("oh").struct("<~@8 [~@7 x]!8 ~@4 [~@7 x]!100 ~@7>").gain(0.48)

stack(piano, piano_2, bass, lead_2_sawtooth, synth_strings_1, string_ensemble_1, kick, clap, snare, hihat, open_hat)

More by Mariah Carey