Strudelify

heartbeats

José González

KeyE♭ majorTempo80 bpm
0:00/0:00
// heartbeats — José González
// 80 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5924576; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 56 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.

// other · string ensemble 1 · "Violin"
const string_ensemble_1 = note(`<
  ~@8 A@8 ~@2 A@7 B C D@2 E F G@2 H@2 I@2 J@2 K@2 J@2 K@2 L@2 H@2 M@2 H@2 I@2 F
>`.pickRestart({
  A: "~ eb4!5 eb4@2", B: "~@4 d4!3 eb4", C: "eb4@3 ~", D: "bb3/2", E: "c4", F: "bb3", G: "eb5/2",
  H: "[~ eb4!2 bb3 d4!3 eb4@4 bb3 g4@2 d4@2]/2", I: "[~ eb4!3 d4@2 eb4 bb3@7 ~@2]/2", J: "eb4", K: "c4/2", L: "g3/2",
  M: "[~ eb4!3 d4@2 eb4 bb3@4 bb3 g4@2 eb4@2]/2",
})).s("gm_string_ensemble_1").gain(0.25)

// other · cello · "Violoncello"
const cello = note(`<
  ~@4 A@2 B C D@2 B E D@2 B E F@2 G@2 H I G@2 H I G J@2 K E F@2 J@2 H I G@2 L@2 G@2 L@2 M@2 J@2 H I J@2 H I G
>`.pickRestart({
  A: "eb4/2", B: "c4", C: "eb4", D: "bb3", E: "ab3", F: "eb2/2", G: "bb2", H: "c3", I: "ab2", J: "eb3/2", K: "g3",
  L: "ab2/2", M: "c3/2",
})).s("gm_cello").gain(0.3)

// chords · piano
const piano = note(`<
  A@2 B C A@2 B C A@2 B C A@2 B C A@4 B C A@2 B C A@3 B C A@4 B D@2 E F G@2 H I J K L A@2 B C A@2 B C M
>`.pickRestart({
  A: "~@2 bb2 [eb4,g4]@2 [eb4,g4]@2 [eb4,g4] [d4,f4] [eb4,g4]@2 [eb4,g4]@2 [eb4,g4] [bb2,bb3]@2, eb2@15 ~, ~@3 eb3@10 ~@3", // Eb Dm Eb Bb
  B: "~@2 g3 [eb4,g4]@2 [eb4,g4]@2 [eb4,g4] [d4,f4] [eb4,g4]@2 [eb4,g4]@2 [eb4,g4] [g2,bb3]@2, c3@8 c3@7 ~, ~@3 c4@5 ~@8", // Eb Dm Eb Gm
  C: "~@2 eb3 [eb4,g4]@2 [eb4,g4]@2 [eb4,g4] [d4,f4] [eb4,g4]@2 [eb4,g4]@2 [eb4,g4] [bb2,bb3]@2, ab2@15 ~, ~@3 ab3@10 ~@3", // Eb Dm Eb Bb
  D: "[~@2 eb3 [eb4,g4]@2 [eb4,g4]@2 [eb4,g4] [d4,f4] [eb4,g4]@2 [eb4,g4] ~@2 eb5 ~ bb2@3 eb3@2 g3 f3@2 bb2@3 eb3@2 g3 f3@2, ab2@15 [bb4,bb5]@12 ~@5, ~@3 ab3@10 ~ bb2@2 ~@16]/2", // Eb Dm Eb Bb
  E: "bb2@2 ~@3 g3 [f3,g4,g5]@2 [bb2,bb4,bb5]@2 ~@3 g3 f3@2, ~ [g4,g5]!2 ~@2 [g4,g5] [bb4,bb5]@2, ~@3 eb3@2 ~@6 eb3@2 ~@3", // Fsus2 Bb G Bb
  F: "[d4,d5] ~@2 eb3@2 g3 eb3@2 ab2@3 eb3@2 g3 eb3@2, ab2@3 ~@13, ~ [c4,c5]@7 ~@8", // D C
  G: "[ab2@3 eb3@2 g3 eb3@2 ab2@3 eb3@2 g3 eb5 ~ bb2@3 eb3@2 g3 f3@2 bb2@3 bb3@2 g3 f3@2, ~@7 eb3 ~@8, ~@15 [bb4,bb5]@12 ~@5]/2", // Bb
  H: "bb2@2 ~@3 g3 [f3,g4,g5]@2 [bb2,bb4,bb5]@3 ~@2 g3 f3@2, ~ [g4,g5]!2 ~@3 [g4,g5]@2, ~@3 eb3@2 ~@6 eb3@2 ~@3", // Fsus2 Bb G
  I: "[ab2,c4,c5]@3 ~@2 g3 eb3@2 [ab2,bb4,bb5]@2 ~@3 g3 [eb3,g4,g5]@2, ~@3 eb3@2 ~@6 eb3@2 ~@3, ~@2 [c4,c5]@2 ~ [g4,g5] [bb4,bb5] ~", // Ab Absus2 Eb C G Bb
  J: "[ab2,eb4,eb5]@3 ~@2 g3 eb3@2 [ab2,ab4,ab5]@3 ~@2 g3 ~ [ab4,ab5], ~@3 eb3@2 ~@6 eb3@2 ~ bb2@2, ~@4 [c4,c5]@4 ~@4 [g4,g5]@3 ~", // Ab5 Ab C G
  K: "c3@3 g3@3 c3@2 c3@3 g3@2 c4 c3@2, [g4,g5]@15 ~", L: "c3@3 g3@3 c3@2 c3@3 g3@2 c4 bb2@2", M: "[eb2,eb3,bb3]@15 ~",
})).s("gm_piano").gain(0.3)

stack(string_ensemble_1, cello, piano)