Strudelify
Can't Let Go cover art

1991 · Emotions

Can't Let Go

Mariah Carey

KeyF majorTempo80 bpm
0:00/0:00
// Can't Let Go — Mariah Carey
// 80 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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(`<
  ~@13 A@2 B@2 C@2 D@2 E@2 F G H I F G H J@2 K@6 L@2 F G H I F G H J@2 K@6 M@2 N O P Q R S T U V W@6 X@2 W@6 Y@2 Z AA
  AB@2
>`.pickRestart({
  A: "[bb4 a4 g4 f4 bb5 a5 g5 f5@5 f4 g4 ab4 bb4]/2",
  B: "[[eb4,f4,ab4,c5]@2 [eb4,f4,ab4,c5] [eb4,g4,bb4]@3 [g4,bb4] [a4,c5]@2 [g4,bb4] [f4,a4]@2 f4 g4 [f4,ab4] [g4,bb4], db3@3 eb3@4 f3@9]/2", // Fm7 Eb Gm Am Gm F Fm Gm
  C: "[c5@2 c5 [eb4,g4,bb4]@3 f4 [f4,a4]@5 f4 g4 [f4,ab4] [g4,bb4], [db3,eb4,f4,ab4]@3 eb3@4 f3@9]/2", // Eb F Fm Gm Db
  D: "[c5@2 c5 [eb4,g4,bb4]@3 [eb4,g4,bb4] [c4,g4,a4]@5 f4 g4 ab4 bb4, [db3,eb4,f4,ab4]@3 eb3@4 f3@9]/2", // Eb Am7 Db
  E: "[c5@2 c5 [eb4,g4,bb4]@3 [eb4,g4,bb4] [f3,c4,g4,a4]@9, [db3,eb4,f4,ab4]@3 eb3@4 ~@9]/2", F: "[f3,a3,c4]",
  G: "[e3,c4,g4]", H: "[eb3,eb4,g4]", I: "[d3,bb3,f4]@3 [e3,c4,g4]",
  J: "[~ a4 g4 ~@2 a4 g4 f4@3 ~@2 f4 g4 [f4,ab4] [g4,bb4], [d3,bb3]@5 ~@3, bb4!2 ~@2, f4@3 f4@4 ~@9]/2", // Fm Gm
  K: "[[db3,eb4,f4,ab4,c5]@3 [eb3,eb4,g4,bb4]@3 ~ [f3,f4,a4,c5]@3 ~@2 f4 g4 [f4,ab4] [g4,bb4]]/2", // Dbmaj7 Eb F Fm Gm
  L: "[[db3,eb4,f4,ab4,c5]@3 [eb3,eb4,g4,bb4]@3 ~ [f3,f4,a4,c5]@3 ~@6]/2", // Dbmaj7 Eb F
  M: "[[db3,eb4,f4,ab4,c5]@6 [eb3,eb4,g4,bb4]@6 ~@2 [f3,f4,a4,c5]@6 ~@4 c4@2 eb4@2 f4@3 f5]/2", // Dbmaj7 Eb F
  N: "[f3,f4,ab4]@3 [c3,c4]@5", O: "[c3,ab3,c4] bb2", P: "[ab3,c4] ~, f4 ~@3", Q: "[f3,c4]@3 e3@5, ~@3 bb3 ~@4",
  R: "[f3,f4,ab4]@3 c4@5", S: "[ab3,eb4,ab4]@3 [bb3,f4]@5", T: "[db4,f4,ab4]@3 [c4,f4]@5", U: "[c3,f4,bb4]",
  V: "[c3,e4,bb4]@4 gb4 ab4 a4 b4", // C7
  W: "[[d3,e4,gb4,a4,db5]@3 [e3,e4,ab4,b4]@3 ~ [gb3,gb4,bb4,db5]@3 ~@2 gb4 ab4 [gb4,a4] [ab4,b4]]/2", // Dmaj7 E Gb Gbm Abm
  X: "[[d3,e4,gb4,a4,db5]@3 [e3,e4,ab4,b4]@3 ~ [gb3,gb4,bb4,db5]@3 ~@2 gb4 ab4 a4 b4]/2", // Dmaj7 E Gb
  Y: "[[d3,e4,gb4,a4,db5]@6 [e3,e4,ab4,b4]@6 ~@2 [gb3,gb4,bb4,db5]@6 ~@9 db4 gb4 ab4]/2", // Dmaj7 E Gb
  Z: "db5@4 eb5@2 eb5 e5 eb5@2 db5@6, [f3,db4,ab4]", AA: "b4@6 db5 ab4, [e3,e4], ab4@7 ~",
  AB: "[[gb4,b4] bb4 ab4 gb4 b4 bb4 ab4 gb4@5 ~@4, [eb3,b3] ~]/2", // B5 Abm
})).s("gm_piano").gain(0.48)

// bass · fretless bass
const bass = note(`<
  ~@15 A@2 B C D E D E F G H I F G H J@2 D E D E D K D E F G H I F G H J@2 D E D E D K D E L M N O L P N Q R S T S T S U
  S V S T S T S U S W F G H ~
>`.pickRestart({
  A: "[db3@3 eb3@4 f3@9]/2", B: "db3@3 eb3@5", C: "f3@3 f3@5", D: "db2@3 eb2@5", E: "f2@6 f2@3 f2@7", F: "f3", G: "e3",
  H: "eb3", I: "d3@3 e3", J: "[d3@5 ~@3]/2", K: "f2@6 f2@3 f2@5 eb2@2", L: "f2@3 e2@5", M: "eb2@3 ~ d2@4",
  N: "db2@3 db2@5", O: "c2@6 c2@4 e2 f2 g2@2 f2 e2", P: "eb2@3 d2@5", Q: "c2@3 c2@5",
  R: "c2!2 ~ c2 c2@4 gb2@2 db2@2 bb2@2 f2@2", S: "d2@3 e2@5", T: "gb2@6 gb2@3 gb2@7", U: "gb2@6 gb2@3 gb2@5 e2@2",
  V: "gb2@6 gb2@3 gb2@6 ~", W: "gb2@6 gb2@3 ~@7",
})).s("gm_fretless_bass").gain(0.8)

// chords · string ensemble 2
const string_ensemble_2 = note("<A B C D E@2 ~@43 F@8 ~@9 G@16 ~@4>".pickRestart({
  A: "[f2,f3]", B: "[e2,e3]", C: "[eb2,eb3]", D: "[d2,d3]", E: "[db2,db3]/2",
  F: "[[ab2,db3,f3,db4]@3 [g2,bb2,eb3,eb4]@4 [a2,c3,f3,f4]@8 ~]/2", // Db Eb F
  G: "[[a2,d3,gb3,d4]@3 [ab2,b2,e3,e4]@4 [bb2,db3,gb3,gb4]@8 ~]/2", // D E Gb
})).s("gm_string_ensemble_2").gain(0.52)

// chords · drawbar organ
const drawbar_organ = note("<~@6 A B C D E F G H@2 ~@71>".pickRestart({
  A: "[f3,c4,f4,a4]", B: "[e3,c4,g4,c5]", C: "[eb3,bb3,eb4,g4]", D: "[d3,bb3,f4,bb4]@3 [e2,e3,c4,g4]",
  E: "[f2,f3,c4,f4,a4]", F: "[e2,e3,c4,g4,c5]", G: "[eb2,eb3,bb3,eb4,g4]", H: "[[d2,d3,bb3,f4]@3 ~]/2",
})).s("gm_drawbar_organ").gain(0.48)

// other · acoustic guitar steel
const acoustic_guitar_steel = note("<A B C D E@2 ~@80>".pickRestart({
  A: "[c4,a4]@2 c4 [c4,a4]@4 ~", B: "g4@2 a4 bb4 c5@4", C: "g4@2 bb3 g4@4 bb4", D: "bb4 a4 bb4@2", E: "[c5 bb4@3]/2",
})).s("gm_acoustic_guitar_steel").gain(0.29)

// chords · string ensemble 2
const string_ensemble_2_2 = note("<~@66 A B A B A B A B A B A B A B A B C D E@2>".pickRestart({
  A: "[gb4,a4,d5] [e4,ab4,b4]", B: "[gb4,bb4,db5]", C: "[f4,ab4,db5]", D: "[e4,ab4,b4]", E: "[[b3,eb4]@3 ~]/2",
})).s("gm_string_ensemble_2").gain(0.48)

// chords · synth strings 1
const synth_strings_1 = note("<A B C D E@2 ~@9 F@8 ~@9 G@8 ~@9 G@8 H I J K H I J K ~ L@16 ~@4>".pickRestart({
  A: "[c4,a4]", B: "[c4,g4]", C: "[bb3,eb4,g4]", D: "[bb3,f4]", E: "[eb4,f4,ab4]/2",
  F: "[[eb4,f4,ab4,c5]@3 [eb4,g4,bb4]@4 [f4,a4,c5]@9]/2", G: "[[db4,f4,ab4]@3 [eb4,g4,bb4]@4 [f4,a4,c5]@8 ~]/2",
  H: "[f4,ab4,c5] [e4,g4,c5]", I: "[eb4,ab4,c5] [d4,f4,bb4]", J: "[db4,f4,ab4]@3 ~", K: "[e4,g4,c5]",
  L: "[[d4,gb4,a4]@3 [e4,ab4,b4]@4 [gb4,bb4,db5]@8 ~]/2", // D E Gb
})).s("gm_synth_strings_1").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~@15 A B C@3 D C D C D C D C D C D C D C D C D C D C D C D C D C D C@2 D C D C D C D C D C D C D C D C D@2 C D C D C D
  C D C D C D C D C ~@4
>`.pickRestart({
  A: "x ~@2 x ~@3 x", B: "~@3 x ~@4", C: "x ~@2 x ~@4", D: "x ~@5 x ~@2 x ~@6",
})).gain(0.64)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@15 [x!4]!66 [x!2 ~@2] ~@4>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@22 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~@5
>`.pickRestart({
  A: "~@7 x",
})).gain(0.64)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@15 [x ~@2 x!2 ~@3 x ~@2 x!2 ~@3]!66 [x ~@2 x!2 ~@11] ~@4>").gain(4.08)

// drums · agogo bells
const agogo_bells_2 = s("agogo:4").struct("<~@15 [~ x ~@3 x ~@2]!66 [~ x ~@6] ~@4>").gain(4.08)

stack(
  piano, bass, string_ensemble_2, drawbar_organ, acoustic_guitar_steel, string_ensemble_2_2, synth_strings_1, kick,
  pedal_hat, open_hat, agogo_bells, agogo_bells_2
)

More by Mariah Carey