Strudelify

My old Kentucky home

Stephen Foster

KeyG majorTempo56 bpm
0:00/0:00
// My old Kentucky home — Stephen Foster
// 56 bpm, 4/4, key G 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 (1/8 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/4892529; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 18 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(56/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 K L M N O@3>".pickRestart({
  A: "~@7 b4", B: "b4@2 b4@2 g4@2 a4 b4", C: "c5 b4 c5 e5 d5@3 c5", D: "b4 a4@2 g4!2 f#4@2 g4", E: "a4@6 a4!2",
  F: "c5 b4 c5 e5 d5@2 g4 a4", G: "b4@2 b4@2 a4 g4 b4 a4", H: "g4", I: "[g4,d5]@3 [g4,b4] [g4,c5]@3 [g4,e5]",
  J: "[g4,d5] [g4,b4]@5 [d#4,a4]@2", K: "g4@3 a4 [e4,g4]@3 e4, e4 ~", L: "d4@2 c4@2 b3@2 g4 a4, g4@3 ~",
  M: "[g4,b4]@2 [g4,b4]@2 g4@2 [g4,a4] [g4,b4]", N: "[g4,c5] [g4,b4] [g4,c5] [g4,e5] [g4,d5]@2 g4 a4",
  O: "[b4@2 g4@2 c5@2 b4@2 a4@4 [c4,a4]@2 ~ f#4@2 b3@4 c4@4 ~ b3@9 ~@13, ~@4 g#4@4 c#4@2 ~@7 g4@18 ~@13]/3", // F
})).s("gm_piano").gain(0.25)

// chords · piano
const piano_2 = note("<~ A B C D A E F G H I J K L M N O@2>".pickRestart({
  A: "[d3,g3,b3] [f3,g3,b3]", B: "[e3,g3] [d3,g3,b3]", C: "[e3,g3,b3] [c#3,a3]", D: "[d3,f#3,c4] d4 c#4 c4",
  E: "[e3,g3]@4 [d3,g3,b3]@2 e3 d#3", F: "d3 [d3,c4]", G: "[d3,g3,b3] [f#3,d4] [e3,c4] [d3,b3]", H: "b2@3 g2 a2@3 c3",
  I: "b2 g2@5 b2@2", J: "c3!2", K: "b2@2 a2@2 g2@2 e3 d#3", L: "d3@2 d3@2 b2@2 c3 d3", M: "e3 d3 e3 c3 b2@2 d#3@2",
  N: "d3 e3 d#3 d3", O: "[~ [g2,d3]@4 [g2,e3]@4 ~ [d2,g2]@9 ~@13]/2",
})).s("gm_piano").gain(0.2)

stack(piano, piano_2)