Strudelify

unbreak my heart

Toni Braxton

KeyF majorTempo55 bpm
0:00/0:00
// unbreak my heart — Toni Braxton
// 55 bpm, 2/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Strings," named as a string part, played on string ensemble 1 (its pad sweep patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5985831; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(55/2)

// 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 · string ensemble 1 · "Strings,"
const string_ensemble_1 = note(`<
  ~ A B C D B C E@2 A F G C A F C H B F G C A F I@2 J K L@2 K M N O K M N P Q R S D B F G C A F C H B F G C A F I@2 J K
  T@2 K M N O K M U@2 V R W X@2 Y W Z AA AB Y ~@7 AC AD AE AF AG AD AE AF AH@3 AI AG AD AE AF AG AD AE AF AH@3 AI AG ~@5
>`.pickRestart({
  A: "[d4,gb4,b4]", B: "b4", C: "[e4,a4]", D: "[e4,gb4,bb4]", E: "[[e4,gb4,bb4]@3 ~]/2", F: "[e4,g4,b4]",
  G: "[db4,e4,a4]", H: "[e4,bb4]", I: "[~@8 db5@3 d5@2 e5@3, [e4,a4]]/2", J: "[a4,d5,f5]", K: "[d5,f5]",
  L: "[[g4,c5]@8 db5@3 d5@2 e5@3, e5@11 ~@5, ~ a4]/2", M: "[bb4,d5,f5]", N: "[g4,c5,e5]",
  O: "[db5,e5]@3 ~@3 d5@4 e5@6, a4", P: "db5@6 d5@3 ~ e5@6, a4, e5@5 ~@3", Q: "[bb4,e5]@12 ~@2 bb4 ~, c5, ~@3 e5",
  R: "d5@3 d5, bb4", S: "[a4,db5]", T: "[[g4,c5]@8 db5@3 d5@2 e5@3, e5@13 ~@3, ~ a4]/2",
  U: "[[g4,c5]@16 db5@6 d5@3 ~ e5@3 ~@3, e5@13 ~@3, ~ a4]/2", V: "[bb4,e5]@7 bb4", W: "eb5", X: "b5/2", Y: "gb5",
  Z: "b5@8 bb5 ~ db6@2 ~ eb6 ~@2", AA: "eb6@3 ab5@5", AB: "bb5", AC: "~@5 d4@5 e4@6, db4 ~", AD: "f4", AE: "g4",
  AF: "e4", AG: "db4@3 d4@2 e4@3", AH: "[~@2 bb4, a4@2 ~, ~ d5@2]/3", AI: "[g4,c5]",
})).s("gm_string_ensemble_1").gain(0.15)

// chords · string ensemble 1 · "Strings," · soft notes
const string_ensemble_1_soft = note(`<
  ~@5 A ~@6 B ~@2 B C ~@3 B ~@2 D@2 ~ E ~@17 B ~@2 B C ~@3 B ~@2 D@2 ~ E ~@58
>`.pickRestart({
  A: "[d4,gb4]", B: "db4", C: "gb4", D: "db4/2", E: "bb4",
})).s("gm_string_ensemble_1").gain(0.1)

// chords · pizzicato strings · "Violins"
const pizzicato_strings = note("<~@74 A@2 B C D@2 ~@37>".pickRestart({
  A: "[db4, gb4 ~]/2", B: "[b3,eb4]", C: "[db4,e4]", D: "[db4,gb4]/2",
})).s("gm_pizzicato_strings").gain(0.35)

// chords · piano · "Honky Tonk Piano"
const piano = note("<~@87 A B C D E F G H I J K L I M N O I P Q R I S T U I V W X Y Z>".pickRestart({
  A: "[e3,a3,db4]@2 ~@3 [f3,b3,d4] ~@4 [g3,db4,e4]@3 ~@3", // A Bdim Dbdim
  B: "[a3,d4,f4]@3 ~@4 [d4,f4] a4@2 a3@2 f4@2 a3 ~, ~@3 a3 ~@4", // Dm
  C: "[bb3,d4,g4]@3 ~@3 [bb3,d4] ~@3 bb3@4 d4 ~, ~@3 f4@4 ~", D: "[g3,c4,e4]@3 ~@3 g3@4 [c4,e4]@2 g3@2 ~@2",
  E: "[e3,a3,db4]@3 ~@3 [f3,b3,d4] ~@3 [g3,db4,e4]@3 ~@3", F: "[a3,d4,f4]@3 ~@3 a3@4 [d4,f4]@2 a4 d4 ~@2",
  G: "[bb3,d4,f4,gb4]@3 ~@3 bb3@2 ~@2 [d4,f4]@3 ~@3", H: "[g3,c4,e4]@3 ~@3 e4@4 c4@2 g3@2 ~@2, ~@6 c4 ~@9",
  I: "[e3,a3,db4]@3 ~@3 [f3,b3,d4]@2 ~@2 [g3,db4,e4]@3 ~@3", // A Bdim Dbdim
  J: "[a3,d4,f4]@3 ~@3 a3 ~ [a3,d4,a4] ~ a3@2 [d4,f4]@2 a3 ~", K: "[bb3,d4,f4]@8 ~@2 bb3@2 ~ f4 ~@2",
  L: "[g3,c4,e4]@3 ~@3 g3@2 ~@2 [c4,e4]@3 ~@3", M: "[a3,d4,f4]@3 ~@3 g4 ~ d5 g4 ~@2 c5@2 g4 ~",
  N: "[f4,bb4,d5]@9 ~ bb4@4 f4 ~", O: "[e4,g4,c5]@3 ~@3 g4@4 e4@2 c4@2 ~@2",
  P: "[a3,d4,f4]@3 ~@3 a3@2 ~@2 [d4,a4]@2 a3@2 f4 ~", Q: "[bb3,d4,f4]@3 ~@3 bb3 ~@3 bb4@2 bb3 ~ bb3 ~, ~@10 bb3 ~@5",
  R: "[g3,c4,e4]@3 ~@3 [c4,e4,g4] ~@3 [c4,e4]@3 g3 ~@2, ~@10 g3 ~@5", // C
  S: "[a3,d4,f4]@3 ~@3 d4@2 [f4,c5]@2 a4@2 f4 ~ d4 gb4", T: "bb3@6 [d4,g4] ~@3 bb4@2 bb3@2 ~@2",
  U: "[g3,c4,e4]@6 g3@2 ~@2 g4@2 e4 ~ c4 ~, ~@10 g3 ~@5", V: "[a3,d4,f4]@6 a3@3 ~ f4@2 d4@2 a3 ~",
  W: "e4@3 ~@3 [bb3,d4]@4 bb3@2 d4@2 bb3 ~", X: "[g3,c4,e4]@3 ~@3 g3 ~@3 [g4,a4] ~ g3@2 c4 ~",
  Y: "[e3,a3,db4]@3 ~@3 [f3,d4]@2 ~@2 [g3,db4,e4]@3 ~@3", Z: "[a3,f4]@10 d4@2 f4 ~ a3 ~, d4 ~",
})).s("gm_piano").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B@2 A B A B A B A ~@7 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "x", B: "x ~@6 x",
})).gain(0.35)

// drums · rim
const rim = s("rim").struct("<A@8 B A@23 B A@10 B A@11 B A@11 B A@10 B A C@10 ~ C@17 ~ C@8>".pickRestart({
  A: "~@4 x!2 ~@2", B: "~ x", C: "~@5 x ~@2",
})).gain(0.15)

// drums · snare
const snare = s("sd").struct("<~@87 [~@3 x ~@4] [~ x]!11 [~@3 x ~@4] [~ x]!17>").gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@87 A ~@3 B ~@3 B ~@3 B ~@3 C ~@3 D ~@9>".pickRestart({
  A: "~@3 x ~ x!2 ~", B: "~@6 x!2", C: "~@5 x!3", D: "~@5 x!2 ~",
})).gain(0.35)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D E B F G H I J I K L M I N O P Q J R S B T Q U V W R X Q Y W Z W U AA AB AC AD W U X AC AE S AF W V W@2 V AG AH
  Z S V AC V AC R AC W S AI AC B AC AG AJ AK AL AC V S AM W V U V W V@2 R W AN AC P Y AI S AO V B V I U AI AC AM T@2 H B
  T B T AM T B T B T B T AM
>`.pickRestart({
  A: "x ~ x ~@2 x ~@2", B: "x!3 ~ x!4", C: "~@2 x ~ x!4", D: "x ~@3 x!4", E: "~@2 x!2 ~@4", F: "~ x!2 ~", G: "x!5 ~@3",
  H: "x!4 ~@4", I: "x!3 ~ x ~@3", J: "x!4 ~@3 x", K: "x!3 ~@2 x!3", L: "x!2 ~ x ~ x!2 ~", M: "~@2 x!2 ~ x!3",
  N: "~ x!4 ~@3", O: "~ x!2 ~ x ~@3", P: "x!2 ~@2 x ~@2 x", Q: "x!3 ~ x ~ x ~", R: "x!4 ~ x ~ x", S: "x!2 ~ x!2 ~@2 x",
  T: "x!8", U: "x!5 ~@2 x", V: "x!3 ~ x ~@2 x", W: "x ~ x ~ x ~@2 x", X: "x!4", Y: "x ~ x!3 ~ x!2", Z: "x ~ x ~ x!4",
  AA: "x ~ x!2 ~ x!3", AB: "x ~@2 x!2 ~ x!2", AC: "x ~ x!3 ~@2 x", AD: "x ~ x!2 ~@4", AE: "x!2 ~ x ~ x ~ x",
  AF: "x!3 ~ x!2 ~@2", AG: "x ~ x!2 ~ x ~ x", AH: "x ~@2 x!2 ~@2 x", AI: "x ~ x ~ x!2 ~ x", AJ: "~ x ~ x ~ x ~ x",
  AK: "x!6 ~ x", AL: "~ x ~@2 x ~@2 x", AM: "x!4 ~ x!3", AN: "x ~ x ~ x ~ x!2", AO: "x!3 ~@2 x ~ x",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@87 A ~@3 B ~@3 C ~@3 D ~@3 E ~@3 E ~@9>".pickRestart({
  A: "x", B: "~@5 x ~@2", C: "~@3 x ~ x ~@2", D: "~@4 x!2 ~@2", E: "~@3 x!2 ~@3",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ B ~ A ~@2 A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~@3 A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A
  ~ B ~ A ~ A ~ A ~ B C D A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~@3 A ~ A ~ B ~ A ~ A ~ A ~ B
>`.pickRestart({
  A: "~@3 x ~@4", B: "~ x", C: "x!2", D: "~@3 x",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct(`<
  A ~@7 B ~@31 B ~@16 C ~@11 C ~@2 C ~@15 C ~@3 C ~@3 C ~@3 C ~@2 B C ~ B ~ C ~@8
>`.pickRestart({
  A: "~@3 x ~@4", B: "~ x", C: "x",
})).gain(0.25)

// drums · shaker
const shaker = s("sh").struct("<A B@7 C B@23 C B@10 C B@11 C B@11 C B@10 C B@11 C B@17 C B@8>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2",
})).gain(0.15)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  A B@2 C D B D B C B@2 C B D B C B D C B C D B D C B C D B C B D@2 C B D C@2 D@2 B D C B D C B C B D@2 B C B D C B D C
  B C B@2 C D B C B D C B@4 C B D B C B D C B C D B D C B C D B C B D@2 C B D C@2 D@2 B D C B D C B C B D@2 B C B
>`.pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "~ x ~@6", D: "~@3 x ~@4",
})).gain(0.86)

stack(
  string_ensemble_1, string_ensemble_1_soft, pizzicato_strings, piano, kick, rim, snare, low_tom, hihat, mid_tom,
  open_hat, crash, shaker, triangle
)

More by Toni Braxton