Strudelify

cabinet man

Amy Kelly

KeyF majorTempo172 bpm
0:00/0:00
// cabinet man — Amy Kelly
// 172 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5702906; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(172/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 · "Honky Tonk Piano"
const piano = note(`<
  A B C D A B C D E F G H I J K H L M N O P Q R S T U V@2 W X@2 D Y Z AA AB AC AD AE AF AG AH@2 H E AI AJ AK AL@2 AM@2
  AN AO AP AQ AR AS AT@2 AU@2 AV@2
>`.pickRestart({
  A: "bb2!2 bb3!2 bb2!2 bb3!2", B: "c3!2 c4!2 c3!2 c4!2", C: "f3!2 f4!2 f3!2 f4!2", D: "d3!2 d4!2 d3!2 d4!2",
  E: "[bb2,bb4] bb2 [bb3,bb4] bb3 [bb2,d5] [bb2,e5] [bb3,f5] bb3", // Bb Bbdim Bb5
  F: "c3!2 c4!2 c3 [c3,g5] c4 [c4,a5], g5@4 ~@4 f5 ~@7", G: "[f3,c5] f3 f4!2 f3!2 f4!2",
  H: "[d3,g5] d3 [d4,f5] d4 [d3,d5] [d3,e5] [d4,f5] d4", // G5 Dm D Dsus2 Dm
  I: "[bb2,bb4] bb2 [bb3,bb4] bb3 [bb2,d5] [bb2,e5] bb3!2, ~@3 f5", J: "c3!2 c4!2 c3 [c3,g5] c4!2, g5@4 ~@4 f5 ~@7",
  K: "[f3,a5] f3 [f4,c5] f4 f3!2 f4!2", L: "bb2!2 bb3!2 [bb2,bb4]!2 bb3!2, ~ bb4 ~@2",
  M: "c3!2 [c4,c5] c4 c3!2 c4!2, c5 ~@15", N: "[f3,a4] [f3,c5] [f4,c5] f4 [f3,g4] f3 [f4,a4] f4",
  O: "d3!2 d4!2 d3!2 d4!2, f4 c4 d4 ~", P: "bb2!2 bb3 [bb3,bb4] [bb2,bb4] bb2 [bb3,c5] bb3",
  Q: "[c3,c5] c3 [c4,c5] c4 c3!2 [c4,g4] c4", R: "[f3,a4] [f3,c5] f4!2 [f3,g4] f3 [f4,a4] f4",
  S: "d3!2 d4 ~ d3!2 d4!2, f4@2 ~ d4@3 ~@2", T: "[bb2,d5,f5] bb2 [bb3,d5,f5] bb3 [bb2,d5,f5] bb2 [bb3,d5,f5] bb3",
  U: "[c3,c5,e5] c3 [c4,c5,e5] c4 c3 [c3,b4,d5] [c4,c5,e5] c4", // C G C
  V: "[[f3,d5,f5] [f3,a4,c5] f4 [f4,a4,c5] [f3,f4,a4] f3 f4!2 d3!2 d4!2 d3!2 d4!2, ~@7 [a4,d5]@3 [a4,d5]@4 ~@2]/2", // Dm F D5
  W: "[bb2,bb3] bb2 bb3!2 [bb2,d4] bb2 [bb3,f4] bb3", // Bb Bb5
  X: "[[c3,g4] c3 c4 [c4,f4] [c3,g4] c3 [c4,a4] ~ f3!2 f4!2 f3!2 f4!2, ~@7 c4@4 ~@5]/2", // C5 F5 C5 F
  Y: "[bb2,bb4]!2 ~ bb4 c5@2 c5 ~, ~@4 bb3 ~@3", Z: "c3!2 g4 ~ [c4,a4] c5 ~@2",
  AA: "f2!2 ~@2 a4@2 f4 ~, g4@2 ~@2 f3 ~@3", AB: "[d3,d4]!2 d4!4 f4 d4", AC: "bb2!2 bb4!2 bb3 ~ c5 ~",
  AD: "[c3,c5] c3 ~@2 c4 ~ g4 ~, ~ c5@2 ~", AE: "[f2,a4] [f2,c5] ~ g4 f3 ~ a4 ~",
  AF: "[d3,f4]@2 d3@2 d4@4 d4@7 ~, ~@4 a3@11 ~", AG: "[bb2,a4] bb2 [bb3,bb4] bb3 [bb2,d5] [bb2,e5] [bb3,f5] bb3",
  AH: "[[c3,g5] c3 c4 [c4,f5] c3 [c3,g5] [c4,a5] c4 f3!2 f4!2 f3!2 f4!2, ~@7 c5@2 ~@7]/2", // C5 F5 C5 F
  AI: "[c3,g5] c3 c4!2 [c3,f5] c3 [c4,g5] [c4,a5]", AJ: "f3!2 f4!2 f3!2 f4!2, c5 ~@3",
  AK: "[d2,d3,e4,g4,e5,g5] [d2,d3] [d2,d3,d4,f4,d5,f5] [d2,d3] [d2,d3,a3,d4,b4,d5] [d2,d3,b3,e4,c5,e5] [d2,d3,c4,f4,d5,f5] [d2,d3]", // Em7 D Dm D Bm7 Cmaj7 Dm7 D
  AL: "[bb2@2 bb2@2 ~ a4 ~@2 c3@2 c3@2 c2@2 c2@2, f4 ~ d4 ~ bb1@2 bb1@2 ~@8, ~@7 g4@2 ~@3 e4 ~ c4 ~]/2",
  AM: "[f3 [f3,g4] f2!2 d3!2 d2!2, ~@8 f4@15 ~@9]/2", AN: "bb2!2 bb3!2, f4 ~ d4 ~ f4 ~@3",
  AO: "[c3,a4] [c3,g4] c4!2, ~@4 e4 ~@3", AP: "f3!2 f4!2, g4 ~",
  AQ: "[b1,g2,b2,f4,b4] [a1,f2,a2,e4,a4] [g1,e2,g2,d4,g4] [e1,d2,f2,c4,f4]", // G7 Fmaj7 Em7 Dm7
  AR: "bb2!4 bb3!4 bb2!4 bb3!4, ~ [c4,f4]@2 [a3,d4]@2 ~ [f4,a4]@2", AS: "c3!4 c4!4 c3!4 c4!4, [e4,g4] ~ [c4,e4] a3",
  AT: "[f3!4 f4!3 ~ f3!4 f4!3 ~ d3!4 d4!4 d3!4 d4!4, [e4,g4]@4 d4@11 ~ c4@11 ~@5, ~@7 f4@5 ~@3 f4@12 ~@5]/2", // Em
  AU: "[bb2!4 bb3!4 bb2!4 bb3!4 c3!4 c4!4 c3!4 c4!4, ~ [d4,f4]@2 [b3,d4]@2 [f4,a4]@2 [e4,g4]@2 ~ e4@2 [a3,c4]@2 [e4,g4]@2]/2", // Dm Bm F Em Am Em
  AV: "[[f3,d4,f4] f3!3 f4!3 ~ f3!4 f4!3 ~ d3!4 d4!4 d3!4 d4!4, ~@2 f4@2 ~@3 f4@5 ~@3 f4@10 ~@7, ~@16 c4@9 ~@7]/2", // Dm
})).s("gm_piano").gain(0.3)

stack(piano)