Strudelify

What's Left? in G Minor

KingMusicYT

KeyF majorTempo50 bpm
0:00/0:00
// What's Left? in G Minor — KingMusicYT
// 50 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 5/4 at bar 7, 4/4 at bar 8, 6/4 at bar 24, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/6115765; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 30 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(50/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 · "Grand Piano"
const piano = note("<A@4 B@4 ~ C@4 D@5 ~@7 E@5>".pickRestart({
  A: "[~@169 g3@8 f2@15, ~@40 d5@22 c6@38 d4@34 bb3@43 ~@15, ~@49 f5@26 ~@12 g5@9 f5@81 ~@15, ~@57 g5@9 bb4@43 ~@21 d5@47 ~@15, ~@59 a5@15 ~@5 a5@30 ~@4 e5@64 ~@15]/4",
  B: "[~@2 d2@16 ~@10 a5@26 ~@8 f5@26 ~@17 [e6,g6]@17 ~@26 a3@17 ~@27, ~@20 [d3,f3,bb5]@34 [f3,g5]@34 [c3,bb5]@34 ~@9 [d3,f3,g3,d5]@34 ~@27, ~@24 d6@30 ~@4 bb5@30 ~@4 d6@30 bb5@43 ~@27, ~@97 [f6,a6]@26 ~@69]/4", // Em Bb Fsus2 C7 G7 F
  C: "[~@55 f5@3 ~@24 a5@3 ~@24 e5@3 ~@23 c6@3 ~@24 f5@3 a4@3 ~@22 a4@2, ~@32 d3@17 f5@3 d6@7 f6@6 f6@4 a5@3 f6@3 f3@37 ~@3 d5@7 d5@7 d5@10 f4@13 d6@5 g4@2 [a4,d6]@7 ~@3 a4@20 [c5,a5]@3, ~@32 d6@7 f3@20 ~@3 a5@7 g3@16 c6@7 c6@7 c6@3 e5@3 c6@7 bb5@7 bb5@6 bb5@7 bb5@7 d6@6 d6@7 c4@13 ~@7 g4@20, ~@35 f5@7 f5@3 d6@2 a3@12 ~@3 a3@13 a5@4 f6@7 ~@3 e5@6 e5@7 d3@37 ~@3 f5@7 f5@6 [f4,f5]@10 f6@7 f6@3 a5@4 f6@3 a5@3 f6@7, ~@39 d6@6 g3@4 c4@37 ~@3 e3@23 ~@27 d4@27 ~@3 a5@6 f4@17]/4", // D5 F
  D: "[~@23 [e4,e5]@2 g4@2 ~@20 d4@3 [d4,c6]@2 d4 ~@14 a4 f4@2 d5@2 ~@5 f5@3 f5@3 ~@17 f4@2 ~ [e4,a5]@2 f4@2 d5@3 ~@17 d4 d4@2 [c4,e5]@2 ~@25 c6@3 [d2,f2,d3,f3,d4,f4,a4,d6]@53 ~@27, c5@20 [c5,c6]@7 ~@26 f4@15 a4@12 f6@7 f6@6 f6@7 f6@7 c6@6 c6@7 c6@7 c6@6 bb5@7 bb5@7 d4@6 [bb3,bb5]@7 ~@80, c6@7 c6@6 d5@13 ~@4 d5@7 d5@6 d5@10 d6@7 d6@7 [c5,d6]@5 [f4,d5]@8 ~@3 [f5,a5]@7 f5@17 ~@6 c5@20 bb4@27 ~@80, ~@3 e5@7 e5@7 e5@6 ~@4 bb5@6 bb5@7 ~@7 bb5@7 ~@3 f5@6 f5@7 f5@3 [e4,g4,c5,d6]@7 ~@7 e5@20 ~@3 [d5,e5]@7 d5@17 ~@3 d5@6 d5@4 bb5@3 d5@10 ~@80, ~@13 c6@7 ~@2 a4@5 d4@13 [d4,bb5]@7 ~@6 [d3,f3,a3,d4]@27 ~@10 a5@7 a5@5 f4@3 ~@12 e5@6 e5@7 ~@2 d4@2 ~@6 g4@20 ~@80]/5", // E D7 A5 C Dm C Bb Csus2 …
  E: "[~@25 d5@11 ~@4, ~@4 d5@5 c6@11 ~@20, ~@6 f5@6 ~@5 f5@11 ~@12, ~@8 g5@4 ~@3 g5@5 ~ e5@7 ~@12, ~@17 a5@7 ~@2 a5@14 ~@40]/5",
})).s("gm_piano").gain(0.3)

// other · string ensemble 1 · "Violoncello"
const string_ensemble_1 = note("<~@7 A B@4 C D@5 ~@3 E F G H@2 ~@4>".pickRestart({
  A: "~@7 f3@9", B: "[a3@27 e3@26 d3@27 d3@7 f3@6 g3@2 a3@2 c4@13 a3@7 g3@6 f3@13 ~ e3@13 d3@37 [d3,f3]@5]/4",
  C: "~@8 g3@2 ~ c4@10 a3@3 ~@7 g3@7 f3@10, ~ f3@20 ~@27, ~@10 a3@2 ~@13 a3@23",
  D: "[e3@3 ~@14 d3@36 f3@27 a3@27 e3@26 d3@27 d3@53 ~@27, ~@3 e3@23 ~@214]/5", E: "~ f3@7", F: "g3 a3@2 g3",
  G: "f3@2 e3 d3", H: "[c3 a2@2 ~]/2",
})).s("gm_string_ensemble_1").gain(0.3)

// other · string ensemble 1 · "Contrabasses"
const string_ensemble_1_2 = note("<~@7 A B@5 C@5 ~@3 D E F G@2 ~@4>".pickRestart({
  A: "~@7 d2@9", B: "[f2@27 c2@26 bb1@27 d2@27 f2@26 c2@27 bb1@27 d2@26 f2@27]/5",
  C: "[c2@27 bb1@26 d2@27 f2@27 c2@26 bb1@27 d2@53 ~@27]/5", D: "~ d2@7", E: "e2 f2@2 eb2", F: "d2@2 c2 bb1",
  G: "[a1 d2@2 ~]/2",
})).s("gm_string_ensemble_1").gain(0.3)

stack(piano, string_ensemble_1, string_ensemble_1_2)