Strudelify
American Beauty Rag (Lamb) cover art

1960 · A Study in Classic Ragtime

American Beauty Rag (Lamb)

Joseph Lamb

KeyE♭ majorTempo100 bpm
0:00/0:00
// American Beauty Rag (Lamb) — Joseph Lamb
// 100 bpm, 2/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 151 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/2)

// 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 - Right Hand"
const piano = note(`<
  A B@3 C D E F G B@3 C D E H@2 B@3 C D E F I B@3 C D E J@3 K L M N O P Q N K L R S T U V@2 K L M N O P Q N K L R S T U
  W B@3 C D E F I B@3 C D E X@2 Y Z AA AB@2 AC AD AC AE AF AG@2 AH AC AD AC AI AJ AK AL@2 AC AD AC AE AF AM@3 AC AD AC
  AI AJ AK AN AO AP AQ AR AS@2 AT@2 AO AP AQ AR AS@2 AU AV AO AP AQ AR AS@2 AT@2 AO AP AQ AR AS@2 AU AW ~@2
>`.pickRestart({
  A: "~@7 bb4",
  B: "[eb5 f5 g5 bb5@2 [c5,ab5]@2 eb6@2 [bb4,g5]@2 eb6 ~ b5@2 [bb4,g5,bb5]@2 c6 bb5 g5 eb5 c5 bb4 g4, ~@4 [b4,gb5] ~@3]/3", // Fm Eb B5
  C: "eb4 f4 gb4 g4@2 d5 [eb4,a4,c5]@2", D: "[d4,ab4,bb4]@5 a4 bb4 b4", E: "c5 db5@2 [ab4,d5]@2 g5 [ab4,d5,f5]@2",
  F: "[g4,eb5] g5 eb5 bb4 ~ gb5@2 ~, ~ a4", G: "~@2 f5@3 ~ [g4,eb5]@7 ~ bb4 ~, ab4@7 ~@9",
  H: "[[g4,eb5]@21 ~@9 bb4@2]/2", I: "~@2 f5@3 ~ [g4,eb5]@7 ~ bb4@2, ab4@7 ~@9",
  J: "[[g4,eb5]@10 eb5 eb4@2 ~@2 [g4,c5,eb5,g5]@2 g6 d6 f6 eb6 g5 [eb5,a5,d6] c6, ~@26 f5@5 ~@17, ~@28 f4@5 ~@15]/3", // Cm D
  K: "c6 bb5 ab5 d5@2 bb4 c5 db5, [d5,ab5]@3 ~@5", L: "~ c6 ~ c6 ~ c6 ~ c6, d5 [e5,ab5] [f5,ab5] [gb5,ab5]",
  M: "[eb5,g5,bb5] c6 g5 [eb5,g5,bb5]@2 ~ [g4,d5,f5]@2, ~@5 g5@3", // Eb G7
  N: "~ g6 d6 f6 eb6 g5 [eb5,a5,d6] c6, [g4,c5,eb5,g5]@3 ~@5", O: "~ bb5 f5 d5@2 d5 ~ g5, [d5,f5,c6] ~@2 [bb4,e5,a5]",
  P: "~ f5 eb5 a4@2 a4 ~ c5, [a4,eb5,g5] ~@2 [eb4,a4,d5]", // Am7b5 D
  Q: "c5 bb4@2 [ab4,d5,f5]@2 ~ [g4,d5,f5]@2, [d4,ab4]@7 ~@3 g5@4 ~@2", // Ddim G7 Ddim
  R: "~ c6 g5 [eb5,g5,bb5]@2 c6 [eb5,g5,bb5]@2, [eb5,g5,bb5] ~@3", // Eb
  S: "~@7 a4, [eb5,gb5,a5] c6 gb5 c5, ~ eb6@2 a5@2 eb5@2 ~", // Ebdim
  T: "~ [f4,ab4] [gb4,a4] [g4,bb4]@2 d5 [eb4,a4,c5]@2, [eb4,g4,bb4] ~@3", // Fm Gbm Gm Adim Eb
  U: "bb4 c5 db5 [ab4,d5]@2 g5 [ab4,d5,f5]@2, [d4,ab4]@5 ~@11", // Abdim Ddim
  V: "[[g4,eb5]@2 eb5 eb4@2 f5 f4 ~@2 g6 d6 f6 eb6 g5 [eb5,a5,d6] c6, ~@14 [g4,c5,eb5,g5]@7 ~@11]/2", // Cm D Cm
  W: "[g4,eb5]@4 [eb5,g5,bb5,eb6] ~@2 bb4", X: "[[g4,eb5]@21 ~@3 [eb5,g5,bb5,eb6]@3 ~@5]/2",
  Y: "~ f5@2 g5@2 f5 eb5 d5, eb5 ~@3", Z: "db5@2 a4 c5@2 bb4 g4 f4",
  AA: "eb4@2 [eb4,gb4,c5,eb5] ~@3 [eb4,gb4,c5,eb5]@2", // Cdim
  AB: "[eb5@3 ~ eb4@3 ~ f4@3 ~ g4@3 ~ [ab4,c5,eb5]@4 ~@2 [f4,c5,eb5,f5]@5 ~ [gb4,c5,eb5]@4, [eb4,g4,db5]@5 ~@27, ~@3 eb5@4 f5@4 g5@4 ab5@6 ~@6 f5@2 ~@3]/2", // Ab F7 Cdim Eb7
  AC: "[g4,db5,f5]@3 eb5@3 ~ [g4,db5,g5]@4 ~ [f4,db5,f5]@3 eb5, ~@11 eb5@2 ~@3", // Gm7b5 Gdim Db
  AD: "[ab4,c5,eb5,ab5]@6 [f4,c5,eb5,f5]@5 ~ [gb4,c5,eb5]@4, ~@11 f5@2 ~@3", // Ab F7 Cdim
  AE: "[ab4,c5,eb5,ab5]@7 [f4,c5,eb5,f5]@4 ~ [gb4,a4,eb5]@4, ~@11 gb5@3 ~@2", // Ab F7 Ebdim
  AF: "[g4,bb4,eb5,g5]@7 [bb4,eb5,g5,bb5]@4 d6 [eb5,a5,c6]@4", // Eb Adim
  AG: "[[d5,ab5,bb5]@4 [c5,ab5]@3 ~ [bb4,g5]@3 ~ [ab4,f5]@3 ~ eb5@2 ~@12 ab5@2, ~@7 bb5@3 ~ bb5@3 ~ bb5@3 eb5@4 f5@4 g5@4 ~@2, ~@4 g4 eb4 f4 g4]/2", // Bb7 Fm Eb Db
  AH: "[ab4,c5,eb5]@4 ~@2 [f4,c5,eb5,f5]@5 ~ [gb4,c5,eb5]@4, ~@11 f5@2 ~@3", // Ab F7 Cdim
  AI: "[ab4,c5,eb5,ab5]@7 [f4,c5,eb5,f5]@4 ~ [eb4,bb4]@4, ~@11 eb5@5", // Ab F7 Eb5
  AJ: "[db4,ab4,db5]@7 [ab3,eb4,ab4]@4 ~ [ab3,db4]@4, ~@11 ab4@5", // Db5 Ab5 Db5
  AK: "[ab3,c4,ab4]@3 f5@4 [ab4,c5,eb5]@4 c5 [db4,g4,bb4]@4", // Ab Gdim
  AL: "[[c4,ab4]@3 eb5 [eb4,ab4,c5]@3 f5 [f4,ab4,b4]@3 g5 [g4,bb4,eb5]@3 ~ [ab4,c5,eb5]@4 ~@2 [f4,c5,eb5,f5]@5 ~ [gb4,c5,eb5]@4, ~@15 ab5@7 ~@5 f5@2 ~@3]/2", // Fm Ab Fdim Eb Ab F7 Cdim
  AM: "[[d5,ab5,bb5]@4 [c5,ab5]@3 ~ [bb4,g5]@3 ~ [ab4,f5]@3 ~ [g4,eb5]@3 ~ eb4@3 ~ f4@3 ~ g4@3 ~ [ab4,c5,eb5]@4 ~@2 [f4,c5,eb5,f5]@5 ~ [gb4,c5,eb5]@4, ~@7 bb5@3 ~ bb5@3 ~ bb5@3 ~ eb5@4 f5@4 g5@4 ab5@4 ~@8 f5@2 ~@3]/3", // Bb7 Fm Eb Db Cm Ab F7 Cdim
  AN: "[c4,ab4] [eb4,eb5] [f4,ab4,f5] [eb4,ab4,eb5]", AO: "[d4,ab4,d5]@3 [ab4,ab5]@4 [f4,b4,f5]@4 d5 [d4,ab4]@4",
  AP: "~@3 [ab5,d6,ab6]@4 [f5,b5,f6]@4 d6 [d5,ab5]@4", AQ: "~@3 [ab4,c5,ab5]@4 [f4,c5,f5]@4 eb5 [eb4,c5]@4",
  AR: "~@3 [ab5,c6,ab6]@4 [f5,c6,f6]@4 gb6 [gb5,c6]@4", // Ab F5 Gbdim
  AS: "[~@2 eb4@2 f4@2 gb4@2 g4@3 db5@4 [g4,db5,eb5]@5 ~@2 eb5@2 ~@2 eb5@2 ~@2 eb5@2, [g5,db6,g6]@4 ~@7 f5@7 ~@2 [f4,db5]@4 [eb4,c5]@4 [db4,bb4]@4]/2", // Eb7 Gdim Db Cm Gb
  AT: "[~@8 [ab4,c5]@3 g5@4 [ab4,c5,f5]@5 [ab4,c5,eb5]@4 [f4,ab4,c5,f5]@4 [eb4,ab4,c5,eb5]@4, ~ [c4,ab4]@2 b4@2 ~@11, ~ bb4 ~@6]/2", // Ab Fm Ab Fm Ab Fm
  AU: "[c4,ab4]@11 [eb4,g4,db5,eb5]@5", AV: "[ab4,c5,eb5,ab5] [eb4,ab4,c5,eb5] [f4,ab4,c5,f5] [eb4,ab4,c5,eb5]",
  AW: "[ab4,c5,eb5,ab5]@3 ~@13", // Ab
})).s("gm_piano").gain(0.48).pan(0.6)

// other · piano · "Piano- Left Hand"
const piano_2 = note(`<
  A B C D E F G H I B C J K F G L M B C D E F G H I B C J K F G L N O P@2 Q R S T U R P@2 V W X G Y O P@2 Q R S T U R
  P@2 V W X G Z B C D E F G H I B C J K F G L AA AB AC AD AE@2 AF AG AF AH AI AJ AK@2 AF AG AF AL AM AN AO@2 AF AG AF AH
  AI AJ AK@2 AF AG AF AL AM AN AP AQ AR AS AT AU AV AW AX AQ AR AS AT AU AV AY AZ AQ AR AS AT AU AV AW AX AQ AR AS AT AU
  AV AY BA ~@2
>`.pickRestart({
  A: "~@12 [bb1,bb2] ~@3", B: "[eb2,eb3]@2 [bb3,eb4,g4] ~ [eb2,eb3]@2 [c4,eb4,ab4] ~",
  C: "[eb2,eb3]@2 [bb3,eb4,g4] ~ [a3,eb4,gb4]@4", D: "[bb3,eb4,g4]@11 ~@5", E: "~@8 [g2,g3]@3 ~ [gb2,gb3]@3 ~",
  F: "[f2,f3]@2 [ab3,bb3,f4] ~ [bb1,bb2]@2 [ab3,bb3,d4] ~", G: "[f2,f3]@2 [ab3,bb3,d4] ~ [bb1,bb2]@2 [ab3,bb3,d4] ~",
  H: "eb2 eb3 c2 c3", I: "d2@4 d3@4 [eb2,eb3]@4 [bb1,bb2]@3 ~", J: "[bb3,eb4,g4]", K: "~@2 [g2,g3] [gb2,gb3]",
  L: "[eb2,eb3]@2 a3 bb3@2 gb3 g3@2", M: "eb3@4 [bb1,bb2] ~@3 [c2,c3] ~@3 [d2,d3] ~@3",
  N: "eb3@4 ~@4 [eb2,eb3]@2 ~@2 [d2,d3] ~@3", O: "[c2,c3]@4 [g3,c4,eb4]@2 ~@2 [g2,g3]@2 ~@2 [gb2,gb3] ~@3",
  P: "[f2,f3]@2 [bb3,d4,ab4] ~ [bb1,bb2]@2 [bb3,d4,ab4] ~", // F Bb7 Bb Bb7
  Q: "[eb2,eb3]@4 [bb3,eb4,g4]@3 ~ [bb2,bb3]@2 ~@2 [b2,b3] ~@3", // Eb Bb B
  R: "[c3,c4]@4 [g3,c4,eb4]@2 ~@2 [g2,g3]@2 ~@2 [gb2,gb3] ~@3", // C Cm G Gb
  S: "[f2,f3]@4 [f3,bb3,d4]@2 ~@2 [d2,d3]@2 ~@2 [db2,db3] ~@3", T: "[c2,c3]@2 [f3,a3,eb4] ~ [f2,f3]@2 [f3,a3] ~",
  U: "[bb1,bb2]@8 [bb2,bb3]@2 ~@2 [b2,b3] ~@3", V: "[eb2,eb3]@4 [bb3,eb4,g4]@3 ~ [eb2,eb3]@2 ~@2 [d2,d3] ~@3",
  W: "[c2,c3]@2 ~@2 [eb2,eb3] ~@3 [gb2,gb3]@2 ~@2 [a2,a3] ~@3", X: "[bb2,bb3]@6 [gb2,gb3] ~",
  Y: "[eb3,bb3]@5 ~@3 [eb2,eb3]@2 ~@2 [d2,d3] ~@3", Z: "[eb3,bb3]@5 ~@3 [eb2,eb3]@2 ~@2 [bb1,bb2] ~@3",
  AA: "eb3@4 ~@4 [eb2,eb3]@3 ~@5", AB: "eb4 f4@2 g4@2 f4 eb4 d4", AC: "db4@2 a3 c4@2 bb3 g3 f3",
  AD: "eb3@2 [eb3,a3] ~@3 [eb3,a3]@2", // Ebdim
  AE: "[[eb3,bb3]@3 ~ eb3@3 ~ d3@3 ~ db3@3 ~ c3@3 ~ [eb3,ab3,c4]@2 ~@2 [ab2,ab3]@3 ~ [a2,a3] ~@3, ~@3 eb2@4 d2@4 db2@4 c2@4 ~@13]/2", // Eb5 Ab A
  AF: "[bb2,bb3]@2 [eb3,g3,db4] ~ [eb2,eb3] ~ [db2,db3] ~", // Bb Eb7 Eb Db
  AG: "[c2,c3]@4 [eb3,ab3,c4]@2 ~@2 [ab2,ab3]@3 ~ [a2,a3]@2 ~@2", // C Ab A
  AH: "[c2,c3]@4 [eb3,ab3,c4]@2 ~@2 [c2,c3]@3 ~ [b1,b2]@3 ~", // C Ab C B
  AI: "[bb1,bb2]@4 [bb3,eb4,g4]@2 ~@2 [g2,g3]@3 ~ [gb2,gb3]@2 ~@2", // Bb Eb G Gb
  AJ: "[f2,f3]@2 [bb3,d4,ab4] ~ [bb1,bb2]@2 [ab3,bb3,d4] ~", // F Bb7 Bb Bb7
  AK: "[[eb2,eb3]@2 eb2@2 eb3@2 d2@2 d3@2 db2@2 db3@2 ~@2 c3@3 ~ [eb3,ab3,c4]@2 ~@2 [ab2,ab3]@3 ~ [a2,a3] ~@3, ~@7 c2@3 ~@6]/2", // Eb Ab A
  AL: "[c2,c3]@4 [eb3,ab3,c4]@2 ~@2 [ab2,ab3]@3 ~ [gb2,gb3] ~@3", AM: "~@4 f3 ~@3 e2@4 e3 ~@3, f2@7 ~@9",
  AN: "[eb2,eb3]@9 ~@3 [eb2,eb3]@3 ~", // Eb
  AO: "[[ab2,eb3]@3 ~ eb3@3 ~ d3@3 ~ db3@3 ~ c3@3 ~ [eb3,ab3,c4]@2 ~@2 [ab2,ab3]@3 ~ [a2,a3] ~@3, ~@3 eb2@3 ~ d2@3 ~ db2@3 ~ c2@5 ~@12]/2", // Ab5 Ab A
  AP: "[ab2,eb3]@5 ~@3 [ab2,ab3]@3 ~ [gb2,gb3]@3 ~", AQ: "[f2,f3]@2 ~@2 [b2,b3]@2 ~@2 [ab2,ab3]@3 ~ [f2,f3]@2 ~@2",
  AR: "[d2,d3]@3 ~ [b1,b2]@2 ~@2 [ab1,ab2]@3 ~ [f1,f2]@2 ~@2", // D B Ab F
  AS: "[eb1,eb2]@2 [eb3,ab3,c4] ~ [c2,c3]@2 [eb3,ab3,c4] ~", // Eb Ab C Ab
  AT: "[ab2,ab3]@4 [eb3,ab3,c4]@2 ~@2 [c3,c4]@3 ~ [a2,a3]@2 ~@2", // Ab C A
  AU: "[bb2,bb3]@2 [eb3,g3,db4] ~ [eb2,eb3]@2 [eb3,g3,db4] ~", AV: "[bb2,bb3]@4 [eb3,g3,db4]@2 ~@2 eb2@4 eb3@3 ~",
  AW: "[ab1,ab2]@2 [eb3,ab3,c4] ~ [c2,c3]@2 [eb3,ab3,c4] ~", AX: "[ab2,ab3]@2 [eb3,ab3,c4] ~ [ab2,ab3] ~ [gb2,gb3] ~",
  AY: "~@6 e3@2 f3@4 [eb2,eb3] ~@3, ab2 ~, ~ d3@2 ~@5, ~ eb3 ~@2", AZ: "[ab2,ab3]@3 ~@5 [ab2,ab3] ~@3 [gb2,gb3] ~@3",
  BA: "[ab2,ab3]@3 ~ [eb2,eb3] ~@3 [ab1,ab2]@2 ~@6", // Ab Eb Ab
})).s("gm_piano").gain(0.4).pan(0.4)

stack(piano, piano_2)

More by Joseph Lamb