Strudelify

Charlie's Here Duet

altocolon

KeyA majorTempo160 bpm
0:00/0:00
// Charlie's Here Duet — altocolon
// 160 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2, 1/4 at bar 50, 4/4 at bar 50) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5979080; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 98 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/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(`<
  ~ A B C D E B F G H I J@4 K@2 A B C L E B M N H I O@4 P@2 Q R S T U V W X Y Z AA AB AC AD AE AF AG@2 AH@4 AI@6 AJ@3
  AK@3 AL@2 AM@2 AN@6 AO@5 AP AQ AR AS AT AU AV@2 AW@2 AX AY AZ@2 BA@2
>`.pickRestart({
  A: "c3@11 ~ g2@11 ~, [g4,a4,c5,e5]@23 ~", B: "c3@11 ~ g3@6 f#3@6", C: "f3@11 ~ d#3@11 ~, [d#4,f4,a4,c5]@23 ~",
  D: "b2@11 ~ d3@11 ~, d5@23 ~", E: "c3@11 ~ g2@11 ~, [e4,g4,b4,c5]@23 ~", F: "f3@11 ~ c3@11 ~, [f4,g#4,c5,d#5]@23 ~",
  G: "a#2@11 ~ d3@11 ~, [f4,g#4,a#4,d5]@23 ~", H: "d#3@11 ~ a#2@11 ~, [d#4,g4,a#4]@23 ~",
  I: "[a2,d#4,g4,a4,c5]@11 ~ [d3,d4,f#4,a4,c5]@11 ~", // Am7b5 D7
  J: "[g2@15 ~ a#2@2 b2@3 ~ c3@17 ~ c#3@2 d3@3 ~ d#3@14 g#2@9 ~ d3@14 g2@11 ~, [d4,f4,g4,a#4]@23 ~@73]/4", // Gm7
  K: "[c3@15 ~ e3@2 f3@3 ~@3 [d4,f4,g4,g5,d6]@23 ~, ~@11 g3@7 ~@6]/2", L: "b2@9 ~ b2@2 c3@6 d3@6",
  M: "f3@9 ~ f3@2 c3@11 ~, [c5,d#5,g5,g#5,a#5]@23 ~", N: "a#2@11 ~ d3@11 ~, [g#4,a#4,d5,g5]@23 ~",
  O: "[g2@15 ~ a#2@2 b2@3 ~@19 c#3@2 d3@3 ~@3 [c#5,d#5,f#5,a#5]@11 ~ [c5,d#5,f#5,g#5]@10 ~@2 [c5,d5,f5,a5]@11 ~ [g2,b4,d5,f5,g5]@11 ~, [d4,f4,g4,a#4]@22 c3@17 ~@7 d#3@14 g#2@9 ~ d3@14 ~@12, ~@24 [a#3,c#4,e4,g4]@23 ~@49]/4", // D#m7 G#7 Dm7 G7 Gm7 A#dim
  P: "[c3@15 ~ e3@2 f3@3 ~@3 [g4,d5,f5,g5]@23 ~, [c5,e5,g5,a5]@11 g3@7 ~@6]/2", // G7 Am7
  Q: "~ b2 c3 d3, b2 ~@3, ~@2 [f#4,a4,d5]@3 ~@7", R: "~ c3 b2 g2, e3 ~@3, ~@2 [f#4,a4,c5,d5]@3 ~@7",
  S: "~ d#3 d3 c3, a2 ~@3, ~@2 [f4,a4,c5,d5]@3 ~@7", T: "b2 c3 [d3,d4,f4,a4,c5] d3", U: "[b2,f#4,g4,b4,d5] a3 g3 f#3",
  V: "[e3,f#4,g4,b4,d5] d3 c3 g2", W: "a#2 g2 g#2 a2, [d#4,g4,g#4,c5]@11 ~@13",
  X: "b2 a2 d3 c3, [f4,a4,a#4,d5]@11 ~ [a4,a#4,d5,g#5]@11 ~", Y: "d#3 a#2 d#3 a#2, [d#4,g4,a#4]@11 ~@13",
  Z: "a2 d#3 d3 a#2, [d#4,g4,a#4,d5]@11 ~ [d#4,f#4,a#4]@11 ~", AA: "g2 g#2 a2 a#2, [f4,g4,a#4,d5]@11 ~@13",
  AB: "c3!2 g2 c3, [f#4,a#4,c5,d#5]@11 ~@13", AC: "d#3!2 g2!2, [c#4,d#4,f#4,a#4]@11 ~@13",
  AD: "d3!2 f#2 b2, [f4,a4,c5,d5]@11 ~ [f#4,a4,c5,d5]@11 ~", AE: "c3 d3 e3 d3, [f4,g4,b4,d5]@11 ~@13",
  AF: "~@4 [d#4,f#4,a#4,c5]@6 ~@2 [d4,f4,g4,b4]@11 ~, g2@11 ~@13", // Cm7b5 G7
  AG: "[~@6 c3@11 ~ g2@11 ~ c3@11 ~ g3@6, ~@6 [g4,a4,c5,e5]@23 ~@19]/2", // Am7
  AH: "[f#3@6 f3@11 ~ d#3@11 ~ b2@11 ~ d3@11 ~ c3@11 ~ g2@11 ~ c3@11 ~ g3@6, ~@6 [d#4,f4,a4,c5]@23 ~ d5@23 ~ [e4,g4,b4,c5]@23 ~@19]/4", // F7 Cmaj7
  AI: "[f#3@6 f3@11 ~ c3@11 ~ a#2@11 ~ d3@11 ~ d#3@11 ~ a#2@11 ~ [a2,d#4,g4,a4,c5]@11 ~ [d3,d4,f#4,a4,c5]@11 ~ g2@15 ~ a#2@2 b2@3 ~ c3@17 ~ c#3@2, ~@6 [f4,g#4,c5,d#5]@23 ~ [f4,g#4,a#4,d5]@23 ~ [d#4,g4,a#4]@23 ~@25 [d4,f4,g4,a#4]@23 ~@19]/6", // Am7b5 D7 Fm7 A#7 D# Gm7
  AJ: "[d3@3 ~ d#3@14 g#2@9 ~ d3@14 g2@11 ~ c3@15 ~ e3@2]/3",
  AK: "[f3@3 ~@3 [d4,f4,g4,g5,d6]@23 ~ c3@11 ~ g2@11 ~ c3@11 ~ g3@6, ~@4 g3@14 ~@12 [g4,a4,c5,e5]@23 ~@19]/3", // G7 Am7
  AL: "[f#3@6 f3@11 ~ d#3@11 ~ b2@9 ~ b2@2 c3@6, ~@6 [d#4,f4,a4,c5]@23 ~@19]/2", // F7
  AM: "[d3@6 c3@11 ~ g2@11 ~ c3@11 ~ g3@6, ~@6 [e4,g4,b4,c5]@23 ~@19]/2", // Cmaj7
  AN: "[f#3@6 f3@9 ~ f3@2 c3@11 ~ a#2@11 ~ d3@11 ~ d#3@11 ~ a#2@11 ~ [a2,d#4,g4,a4,c5]@11 ~ [d3,d4,f#4,a4,c5]@11 ~ g2@15 ~ a#2@2 b2@3 ~@19 c#3@2, ~@6 [c5,d#5,g5,g#5,a#5]@23 ~ [g#4,a#4,d5,g5]@23 ~ [d#4,g4,a#4]@23 ~@25 [d4,f4,g4,a#4]@22 c3@17 ~@3, ~@7 [a#3,c#4,e4,g4]]/6", // Am7b5 D7 Cm7 Gm D# Gm7 A#dim
  AO: "[d3@3 ~@3 [c#5,d#5,f#5,a#5]@11 ~ [c5,d#5,f#5,g#5]@10 ~@2 [c5,d5,f5,a5]@11 ~ [g2,b4,d5,f5,g5]@11 ~ c3@15 ~ e3@2 f3@3 ~@3 [g4,d5,f5,g5]@23 ~@7 b2@6 c3@6, ~@4 d#3@14 g#2@9 ~ d3@14 ~@12 [c5,e5,g5,a5]@22 g3@14 ~@12 b2@6 ~@12, ~@53 [f#4,a4,d5]@3 ~@4]/5", // D#m7 G#7 Dm7 G7 Am7 D
  AP: "d3 ~ c3 b2, ~ e3 ~@2, ~@5 [f#4,a4,c5,d5]@3 ~@4", AQ: "g2 ~ d#3 d3, ~ a2 ~@2, ~@5 [f4,a4,c5,d5]@3 ~@4",
  AR: "c3 b2 c3 [d3,d4,f4,a4,c5]", AS: "d3 [b2,f#4,g4,b4,d5] a3 g3", AT: "f#3 [e3,f#4,g4,b4,d5] d3 c3",
  AU: "g2 a#2 g2 g#2, ~@6 [d#4,g4,g#4,c5]@11 ~@7", // G#maj7
  AV: "[a2 b2 a2 d3 c3 d#3 a#2 d#3, ~@6 [f4,a4,a#4,d5]@11 ~ [a4,a#4,d5,g#5]@11 ~ [d#4,g4,a#4]@11 ~@7]/2", // A#maj7 A#7 D#
  AW: "[a#2 a2 d#3 d3 a#2 g2 g#2 a2, ~@6 [d#4,g4,a#4,d5]@11 ~ [d#4,f#4,a#4]@11 ~ [f4,g4,a#4,d5]@11 ~@7]/2", // D#maj7 D#m Gm7
  AX: "a#2 c3!2 g2, ~@6 [f#4,a#4,c5,d#5]@11 ~@7", AY: "c3 d#3!2 g2, ~@6 [c#4,d#4,f#4,a#4]@11 ~@7",
  AZ: "[g2 d3!2 f#2 b2 c3 d3 e3, ~@6 [f4,a4,c5,d5]@11 ~ [f#4,a4,c5,d5]@11 ~ [f4,g4,b4,d5]@11 ~@7]/2", // Dm7 D7 G7
  BA: "[d3@6 ~@4 [d#4,f#4,a#4,c5]@6 ~@2 [d4,f4,g4,b4]@11 ~@19, ~@6 g2@11 ~@31]/2", // Cm7b5 G7
})).s("gm_piano").gain(0.25)

stack(piano)