Strudelify

Gabriel's Message (51324)

G Hutch

KeyB♭ majorTempo98 bpm
0:00/0:00
// Gabriel's Message (51324) — G Hutch
// 98 bpm, 12/8, key Bb 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 (3/4 at bar 1, 4/4 at bar 6, 9/8 at bar 7, 12/8 at bar 7, ...) are rendered on a constant 12/8 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5905349; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 45 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(98/6)

// 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, Staff-6"
const piano = note(`<
  A@2 B@4 C D E F G H I J K L M@2 N O P@3 Q@2 R S T U V W X Y Z AA@2 AB@2 AC AD@3 AE ~@2
>`.pickRestart({
  A: "[~@24 bb5@3 a5@4 bb5@4 g5@4 f5@4 g5@4 bb5@3 a5@4 bb5@4 g5@4 f5@4 g5@4 [bb5,d6]@3 [a5,c6]@4 [bb5,d6]@4 [g5,bb5]@4 [f5,a5]@4 [g5,bb5]@4 [bb5,d6]@3]/2", // Bb Am Bb Gm F Gm Bb
  B: "[~ [a5,c6]@3 [bb5,d6]@4 [g5,bb5]@4 [f5,a5]@4 [g5,bb5]@4 bb5@4 a5@3 [bb5,c6,eb6]@4 g5@4 f5@4 [g5,a5,c6]@4 d5@4 c5@4 d5@3 bb4@4 a4@4 bb4@4 f5@4 eb5@4 [f5,bb5,d6]@3 d5@4 c5@4 [d5,g5,bb5]@4 a4@4 g4@4 a4@3 f4@4 eb4@4 f4@4 [f3,f4,a4]@11 ~ [f3,f4,a4]@4 [g3,g4,bb4]@4 [a3,f4,a4]@4 bb3@11 ~ a3@4 g3@4 f3@4 [g3,g4,b4,d5]@23 ~@5 [d3,d4]@4, ~@20 [d6,f6]@7 ~@4 [bb5,d6]@7 ~@5 [g5,bb5]@11 [d5,g5]@11 ~ [c6,eb6]@7 ~@4 [a5,c6]@7 ~@5 [f5,a5]@11 [c5,f5]@11 ~@25 [f4,a4,d5]@15 ~ c5@8 ~@32]/4", // Am Bb Gm F Gm Cm7 Am7 Bb …
  C: "[bb3,g4]@8 [d4,g4,bb4]@4 [c4,g4,a4]@8 [eb4,g4,c5]@4 [d4,g4,bb4]@8 [c4,g4,a4]@4 [bb3,d4,g4]@11 ~", // Eb Gm Am7 Cm Gm Am7 Gm
  D: "[c4,eb4,a4]@11 ~ [a3,d4]@19 ~ d4@4 [bb3,g4]@8 [d4,g4,bb4]@4", // Adim D5 Eb Gm
  E: "[c4,g4,a4]@8 [eb4,g4,c5]@4 [d4,g4,bb4]@8 [c4,g4,a4]@4 bb3@11 ~@9 [d4,f4]@4, ~@24 [d4,g4]@19 ~@5, ~@36 c4@11 ~", // Am7 Cm Gm Am7 Dm G5
  F: "[d4,g4]@19 ~ bb4@4 bb4@8 c5@4 bb4@8 a4@4, bb3@23 ~@25", G: "bb4@8 c5@4 d5@8 d5@4 c5@11 ~ bb4@11 ~",
  H: "a4@19 ~ [bb3,f4,bb4]@4 [c4,eb4,c5]@8 [c4,eb4,bb4]@4 [c4,eb4,a4]@8 [c4,eb4,g4]@4", // Bb5 Cm Cm7 Adim Cm
  I: "[a3,d4,a4]@11 ~ g3@8 f3@4 [g3,bb3,g4]@11 ~ bb4@4 a4@4 bb4@4, ~@12 [d3,d4]@11 ~ eb4@23 ~, ~@36 [g3,c4]@11 ~", // D5 Gm D C5
  J: "[d3,bb3]@11 ~ [d3,a3]@8 [f3,a3,d4,f4]@4 [d3,g3,bb3,d4,g4]@23 ~, [d4,g4]@19 ~@29", // Gm D5 Dm Gm G5
  K: "~@2 d4 bb5 a5 [bb4,bb5] g5 f5 [c5,g5] bb5 a5 [a4,bb5], ~@3 g4@2 ~ a4@2 ~ bb4@2 ~", // Bb C5 Bbmaj7
  L: "g5 f5 g5 [f5,a5] [eb5,g5] [f5,a5] [d5,g5] [c5,f5] [d5,g5] [bb4,eb5] [a4,d5] [d4,bb4,eb5], g4@11 ~ a4@11 ~ d4@19 ~@5", // F Eb F G5 F5 G5 Eb5 D5 …
  M: "[[bb5,d6] [a5,c6] [bb4,bb5,d6] [g5,bb5] [f5,a5] [c5,g5,bb5] [bb5,d6] [a5,c6] [a4,bb5,d6] [g5,bb5] [f5,a5] [g5,bb5] [bb5,d6] [a5,c6] [f4,bb5,d6] [a5,c6] [g5,bb5] [a5,c6] [bb5,d6] [a5,c6] [bb4,bb5,d6] [c6,eb6] [bb5,d6] [c5,c6,eb6], g4@8 ~@4 a4@8 ~@4 bb4@8 ~@4 g4@19 ~@5 g4@19 ~@5 bb4@8 ~@4]/2", // Bb Am Bb Gm F C7 Bb Am …
  N: "[bb5,d6] [a5,c6] [a4,bb5,d6] [g5,bb5] [eb5,g5] [c5,g5,bb5] [bb5,d6] [a5,c6] [d5,bb5,d6] [a5,c6] [g5,bb5] [a5,c6], bb4@8 ~@4 bb4@8 ~@4 d5@8 ~@4 c5@11 ~", // Bb Am Bbmaj7 Gm Eb C7 Bb Am …
  O: "[g5,bb5] [f5,a5] [g5,bb5] [f5,a5] [eb5,g5] [f5,a5] [d5,f5] [c5,eb5] [f4,bb4,d5] [c4,eb4,c5]@2 [c4,eb4,bb4], bb4@11 ~ a4@19 ~@17", // Gm F Gm F Eb F Dm Cm …
  P: "[[c4,eb4,a4]@8 [c4,eb4,g4]@4 [a3,d4,a4]@11 ~ g3@8 f3@4 [g3,bb3,g4]@11 ~ bb4@4 a4@4 bb4@4 [d3,bb3]@11 ~ [d3,a3]@8 [f3,a3,d4,f4]@4 [d3,g3,bb3,d4,g4]@23 ~@9 [d3,d4,bb4]@4 a5@4 g5@4 [bb3,bb4,bb5]@4 a5@4 g5@4 [c4,c5,bb5]@4, ~@24 [d3,d4]@11 ~ eb4@23 ~ [d4,g4]@19 ~@41 eb5@11 ~ eb5@11 ~, ~@48 [g3,c4]@11 ~@61 [g3,g4]@8 ~@4 [a3,a4]@8 ~@4]/3", // Adim Cm D5 Gm D5 Dm Gm Bb …
  Q: "[c6 bb5 [a3,a4,d6] c6 d6 c6 a5 bb5 a5 g5 a5 g5 f5 g5 [d3,d4,bb4,f5] a5 g5 [bb3,bb4,bb5] a5 g5 [c4,c5,bb5] c6 bb5 [a3,a4,d6], eb5@11 ~@25 eb5@23 ~ eb5@11 ~ eb5@11 ~ eb5@11 ~, [bb3,bb4]@8 ~@4 [g3,g4,g5]@11 ~ [a3,a4,f5]@11 ~ [d3,d4]@19 ~@5 [g3,g4]@8 ~@4 [a3,a4]@8 ~@4 [bb3,bb4]@8 ~@4]/2", // D5 Bb C7 D5 Bb G Dm D …
  R: "c6 bb5 a5 g5 f5 [f3,f4,a5] bb5 c6 bb5 a5 g5 [bb3,bb4,g5,c6], [g3,g4]@19 ~@5 [g3,g4]@19 ~@5, g5@11 ~ bb4@11 ~ eb5@23 ~", // F C7 G
  S: "d6 eb6 [c4,c5,c6] d6 eb6 [a3,a4,c6] bb5 a5 [c4,c5,a5] d6 eb6 [d4,d5,bb5], g5@11 ~ g5@11 ~ g5@11 ~ g5@11 ~, [bb3,bb4]@2 ~ [bb3,bb4]@2 ~ [bb3,bb4]@2 ~ [d4,d5]@2 ~", // C Am F Gm Bb D
  T: "f5@4 g5@4 a5@4 bb5@4 c6@4 bb5@4 [a3,a4,d5,a5]@19 ~ [bb3,f4,bb4]@4, [c4,c5]@11 ~ [bb3,bb4,c5]@11 ~@25", // D5 Bb5 C Bbsus2
  U: "[g3,eb4,c5]@8 [g3,eb4,bb4]@4 [g3,eb4,a4]@8 [g3,eb4,g4]@4 [g3,d4,a4]@11 ~ [f3,d4]@11 ~", // Cm Eb Am7b5 Cm Gsus2 Dm
  V: "[bb3,g4]@11 ~ bb4@4 a4@4 bb4@4 bb3@11 ~ a3@8 [a3,d4,f4]@4, eb4@23 ~ [d4,g4]@19 ~@5, ~@12 c4@11 ~@25", // Eb Dm G5
  W: "[bb3,d4,g4]@23 ~@5 bb3@4 c4@4 d4@4 c4@4 [bb3,d4]@4", // Gm Bb
  X: "[c4,eb4] [d4,f4] [c4,eb4] [d4,f4] [c4,eb4] [d4,f4] [eb4,g4] [d4,f4] [eb4,g4] [bb3,d4,f4] [c4,eb4,g4] [d4,f4,a4]", // Cm Dm Cm Dm Cm Dm Eb Dm …
  Y: "[c4,eb4,g4] [d4,f4,a4] [c4,eb4,g4] [d4,f4,a4] [eb4,g4,bb4] [d4,f4,a4] [eb4,g4,bb4] [bb3,d4,f4,a4] [c4,eb4,g4,bb4] [d4,f4,a4,c5] [c4,eb4,g4,bb4] [d4,f4,a4,c5]", // Cm Dm Cm Dm Eb Dm Eb Bbmaj7 …
  Z: "[c4,eb4,g4,bb4] [d4,f4,a4,c5] [eb4,g4,bb4,d5] [bb3,d4,f4,a4,c5] [c4,eb4,g4,bb4,d5] [d4,f4,a4,c5,eb5] [eb4,g4,bb4,d5,f5] [f4,a4,c5,eb5,g5] [g4,bb4,d5,f5,a5] [f3,c4,f4,a4]@3", // Cm7 Dm7 Ebmaj7 Bbmaj7 Cm7 Dm7 Ebmaj7 F7 …
  AA: "[~ [f3,f4,a4]@4 [g3,g4,bb4]@4 [a3,f4,a4]@4 [c4,eb4,g4,c5]@16 ~ ab3@4 bb3@4 [ab3,c4,eb4,c5,eb5,ab5]@24 ~@5 [eb3,eb4]@4 [eb3,b3,ab4]@8 ~ [ab3,eb4,ab4,b4]@4 [f3,db4,ab4,bb4]@8 [ab3,f4,ab4,db5]@4, ~@15 [c5,f5]@4 ~@29]/2", // F Gm Dm Cm Ab Eb Abm Bbm7 …
  AB: "[[b3,eb4,ab4,b4]@8 ~ [f3,db4,ab4,bb4]@4 [eb3,b3,eb4,ab4]@12 [f3,db4,f4,bb4]@12 ~ [eb3,gb3,bb3,eb4]@20 ~ [gb3,b3,eb4]@4 [f3,b3,ab4]@8 [ab3,eb4,ab4,b4]@4 [f3,db4,ab4,bb4]@8 ~ [ab3,f4,ab4,db5]@4 [b3,eb4,ab4,b4]@8]/2", // Abm Bbm7 Abm Bbm Ebm B Fdim Abm …
  AC: "[f3,db4,ab4,bb4]@4 ~ [eb3,b3]@12 ~@8 [eb4,gb4]@4 ~ [eb3,b3,eb4,ab4]@18, ~@5 [eb4,ab4]@20 ~@23, ~@17 [eb3,db4]@12 ~@19", // Bbm7 Abm Ebm Abm Ab5 Eb7
  AD: "[~@2 [gb3,b3,eb4,b4]@4 ~ [gb3,eb4,gb4,b4]@8 [f3,db4,gb4,db5]@4 [gb3,eb4,gb4,b4]@8 [f3,db4,f4,bb4]@4 ~ [gb3,eb4,gb4,b4]@8 [bb3,gb4,bb4,db5]@4 [b3,gb4,b4,eb5]@8 [gb3,b3,gb4,eb5]@4 ~ [f3,ab3,ab4,db5]@12 [gb3,b3,ab4,b4]@12 ~ ab3@12 gb3@8 [gb3,b3,gb4,b4]@4 ~ [f3,db4,f4,db5]@8 [f3,db4,f4,b4]@4 [bb3,db4,f4,bb4]@8 [f3,db4,f4,ab4]@4 ~ [eb3,bb3,eb4,bb4]@12, ~@41 [db4,bb4]@10 ~@21]/3", // B Gbmaj7 B Bbm B Gb B Db …
  AE: "ab3@4 gb3@4 ~ f3@4 ~@35, [eb3,eb4] ~@3", // Eb
})).s("gm_piano").gain(0.72)

// other · piano · "Piano, Staff-2"
const piano_2 = note("<~ A B C D ~ E F@2 G ~ H I J ~@5 K L M@2 ~@4 N O P G Q R B ~ S T U V W@3 X@3>".pickRestart({
  A: "~@18 [d2,eb2,f2]@4 ~@23 [d2,eb2,f2]@3", B: "~@6 [d2,eb2,f2] ~@5", C: "~@3 [d2,eb2,f2]@4 ~@22 [d2,eb2,f2]@4 ~@15",
  D: "~@2 [d2,eb2,f2] ~@9", E: "g2@34 ~@2 g2@11 ~", F: "[g2@11 ~ g2@11 ~ f2@8 d2@4 g2@34 ~@2 g2@11 ~ d3@11 ~]/2",
  G: "g2@23 ~@25", H: "~@5 d3 g2@2 g2 g2@2 g2", I: "g2@11 ~ f2@11 ~ eb3@11 ~ c3@11 ~",
  J: "bb2@8 c3@4 d3@8 d3@4 g2@23 ~", K: "~@8 d3 g2@2 g2", L: "g2@8 g2@4 g2@11 ~ f2@11 ~ eb3@11 ~",
  M: "[c3@11 ~ bb2@8 c3@4 d3@8 d3@4 g2@23 ~@37]/2", N: "~@11 d3", O: "c3@8 c3@4 eb3@8 eb3@4 d3@11 ~ d3@11 ~",
  P: "eb3@11 ~ c3@11 ~ bb2@8 c3@4 d3@8 d3@4", Q: "~@2 [d2,eb2,f2] ~@6 [d2,eb2,f2] ~@2",
  R: "~@4 [d2,eb2,f2] ~@6 [d2,eb2,f2]", S: "~@19 eb3@4 ab2@8 ~ ab2@4 ab2@8 ab2@4",
  T: "ab2@8 ~ ab2@4 ab2@12 ab2@12 ~ gb2@10", U: "~@2 f2@8 ~ eb2@4 ab2@8 ab2@4 ab2@8 ~ ab2@4 ab2@8",
  V: "ab2@4 ~ ab2@12 eb2@12 ~ ab2@18",
  W: "[~@2 eb3@4 ~ b2@8 b2@4 b2@8 b2@4 ~ b2@8 gb2@4 b2@8 eb2@4 ~ f2@12 gb2@12 ~ gb2@20 eb3@4 ~ ab2@8 ab2@4 ab2@8 ab2@4 ~ ab2@12]/3",
  X: "[gb2@12 ~ [f2,b2,ab3,ab4]@12 ~ b4@4 bb4@4 b4@4 ~ b2@8 ~ db3@4 [eb3,bb3]@8 ~ [bb2,g3,db4,eb4,g4]@4 [ab2,eb3,ab3,c4,eb4,ab4]@35 ~@44, ~@13 f4@25 ~ [eb4,ab4]@21 ~@84, ~@26 [db2,db3,ab3]@12 ~ [eb3,b3]@12 ~@93]/3", // Fdim Eb5 Eb7 Ab Ab5 Db5 Abm
})).s("gm_piano").gain(0.72)

stack(piano, piano_2)