Strudelify

Pretty Red Wing

The Bluegrass Cardinals

KeyC majorTempo242 bpm
0:00/0:00
// Pretty Red Wing — The Bluegrass Cardinals
// 242 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 135 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(242/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 · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A@2 B A C A D C A@2 B A C A C A B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@4 B A C A D C A@2 B A C A E A B@2 A@2 C@2 A F B@2 A@2
  C@2 A@4 B A C G D C A@2 B A C G H A B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@4 B A C A D C A@2 B A C A C A B@2 A@2 C@2 A@2 B@2
  A@2 C@2 A I ~@3 J@3
>`.pickRestart({
  A: "c3 [e3,g3,c4,e4] g2 [e3,g3,c4,e4]", B: "f3 [f3,a3,c4,f4] d3 [f3,a3,c4,f4]",
  C: "g2 [d3,g3,b3,f4] d3 [d3,g3,b3,f4]", D: "d3 [d3,a3,c4,f#4] a2 [d3,a3,c4,f#4]",
  E: "g2 [d3,g3,b3,g4] d3 [d3,g3,b3,g4]", F: "c3 [e3,a#3,c4,e4] g2 [e3,a#3,c4,e4]",
  G: "c3 [e3,g3,c4,e4] a2 [e3,g3,c#4,e4]", H: "d3 [d3,a3,c4,f#4] d3 [d3,g3,b3,f4]", I: "[c3,g3,c4,e4]",
  J: "[~@11 e4@28 ~@9, ~@8 e3@25 ~@15, ~@9 g3@26 ~@13, ~@10 c4@27 ~@11]/3",
})).s("gm_acoustic_guitar_steel").gain(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A@2 B A C A D C A@2 B A C A C A B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@4 B A C A D C A@2 B A C A C A B@2 A@2 C@2 A@2 B@2 A@2
  C@2 A@4 B A C E D C A@2 B A C E F A B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@4 B A C A D C A@2 B A C A C A B@2 A@2 C@2 A@2 B@2
  A@2 C@2 A G ~@3 H@3
>`.pickRestart({
  A: "c2@3 ~ g1@3 ~", B: "f2@3 ~ d2@3 ~", C: "g1@3 ~ d2@3 ~", D: "d2@3 ~ a1@3 ~", E: "c2@3 ~ a1@3 ~",
  F: "d2@3 ~ d2@3 ~", G: "c2", H: "[~@8 c2@25 ~@15]/3",
})).s("gm_acoustic_bass").gain(0.45)

// chords · banjo
const banjo = note(`<
  A B@2 C@2 D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF@2 AG AH AI AF AJ AK AF@2 AG AH AI AF AI AH
  AG@2 AF AH AI@2 AF AL AG@2 AF AH AI@2 AF AH AF@2 AG AH AI AM AJ AK AF@2 AG AH AI AM AN AH AG@2 AF AH AI@2 AF AH AG@2
  AF AH AI@2 AF AO B@2 C@2 D E F G H I J K L M AP O P Q R S T U V W AQ AR Z AA AB AC AD AE ~@3 AS@3
>`.pickRestart({
  A: "~ [e4,g4,c5]@3 g3@3 ~ a3@3 ~ b3@3 ~", // C
  B: "[c4@3 ~ c4@2 ~@2 c4@2 g4@2 e4@2 ~@2 g4@3 ~ [e4,g4,c5]@2 g4@2 e4@2 ~@2 g4@2 e4 ~, ~@3 e4@2 ~@2 c5@2 ~@4 c5@2 ~]/2", // C
  C: "[e4@2 f4@2 a4@2 f5@2 c5@2 ~@2 a4@2 ~@2 g4@3 ~ [e4,g4,c5]@2 f4@2 e4@2 c4@2 [g4,c5]@2 e5@2, ~@5 g4@2 c5@2 ~@7]/2", // C C5
  D: "f4 c5 f4 e4 d4 b3 f4 c5", E: "e4@3 ~ [e4,c5]@2 d4@2 c4@2 g4@2 e4@2 c4@2", F: "d4 g4 a3 d4 b3 g4 c4 c5",
  G: "d4@3 ~ [b3,g4]@2 e4@2 a3@2 g4@2 g3@2 g4@2", H: "c4@3 ~ [c4,g4]@2 e4@2 c4@2 g4@2 e4@2 c5@2",
  I: "g4@2 c4@2 [e4,g4,c5]@3 ~ e4@2 e5@2 g4@2 e4@2", J: "e4 f4 a4 f5 c5 f4 a4 c5",
  K: "g4@3 ~ [e4,g4,c5]@2 g4@2 e4@2 c4@2 [g4,c5]@2 e4@2", L: "f4 c5 f4 e4 d4 a4 f4 c4", M: "e4 g4 e4 d4 c4 g4 e4 c5",
  N: "d4 e4 a4 g4 e4 c4 d4 c5", O: "c4@2 g4@2 c5@3 ~ b4@3 ~ a#4@3 ~, ~ g4@3", P: "a4 c4 f4 c5 a4 f4 g4 f4",
  Q: "a4 f4 c5 a4 b4 f4 a4 c4", R: "g4@3 ~ [e4,g4,c5]@2 g4@2 e4@2 c4@2 [e4,g4,c5]@2 g4@2",
  S: "c4@3 ~ g4@2 e4@2 a4@2 g4@2 e4@2 c5@2", T: "g4@3 ~ [d4,g4,b4]@2 g4@2 d4@2 g4@2 b3@2 e4@2",
  U: "g3 b3 g4 c5 a4 g4 e4 b4", V: "g4@2 a4@2 [g4,c5]@3 ~ e4@2 c4@2 [e4,g4,c5]@2 g4@2", W: "c4 g4 c5 g4 b4 e4 a#4 c4",
  X: "a4 c5 f4 c4 a4 ~ f4 c5, ~@5 f5@2 ~", Y: "a4 c4 c5 ~ b4 f4 a4 d4, ~@3 f5@2 ~@3",
  Z: "g4 a4 [e4,g4,c5] g4 e4 c4 [e4,g4,c5] g4", AA: "c4 e4 g4 c5 a4 g4 e4 f4", AB: "g4 a4 [d4,g4,b4] f5 d4 g4 b3 b4",
  AC: "g3 b3 f4 b4 e4 f4 d4 e4", AD: "c4 c5 d4 d#4 e4 g4 a4 g4", AE: "[e4,c5] ~", AF: "~ [e4,g4,c5] ~ [e4,g4,c5]",
  AG: "~ [f4,a4,c5] ~ [f4,a4,c5]", AH: "~@2 [e4,g4,c5]@2 ~@2 c5!2, ~@3 [e4,g4]", AI: "~ [d4,g4,b4] ~ [d4,g4,b4]",
  AJ: "~ [d4,a4,c5] ~ [d4,a4,c5]", AK: "~@2 [d4,g4,b4]@2 ~@3 c5, ~@3 [d4,g4,b4]",
  AL: "~@2 [e4,a#4,c5]@2 ~@2 c5!2, ~@3 [e4,a#4]", AM: "~ [e4,g4,c5] ~ [e4,g4,c#5]", AN: "~ [d4,a4,c5] ~ [d4,g4,b4]",
  AO: "~@4 g3@3 ~ a3@3 ~ b3@3 ~, ~ [e4,g4,c5]@2 ~@5", AP: "d4 e4 a4 g4 e4 c4 d4 g4", AQ: "a4 c5 f4 c4 a4 f5 f4 c5",
  AR: "a4 c4 c5 f5 b4 f4 a4 d4", AS: "[~@10 c4@27 ~@11, ~@8 c5@25 ~@15, ~@9 g4@26 ~@13]/3",
})).s("gm_banjo").gain(0.63).pan(0.4)

// chords · fiddle
const fiddle = note(`<
  ~ A@2 B A C A D C A@2 B A C A C A B@2 A@2 C@2 A@2 B@2 A@2 C@2 A E F G H I J K L M N O H I J K P Q R S T U V W X Y Z AA
  AB AC AD AE AF AG A@2 B A C AH D C A@2 B A C AH AI A B@2 A@2 C@2 A@2 B@2 A@2 C@2 A@4 B A C A D C A@2 B A C A C A B@2
  A@2 C@2 A@2 B@2 A@2 C@2 A AJ ~@3 AK@3
>`.pickRestart({
  A: "~@4 [g4,c5,e5] ~@7 [g4,c5,e5] ~@3", B: "~@4 [a4,c5,f5] ~@7 [a4,c5,f5] ~@3",
  C: "~@4 [g4,b4,f5] ~@7 [g4,b4,f5] ~@3", D: "~@4 [a4,c5,f#5] ~@7 [a4,c5,f#5] ~@3", E: "~@4 g4 ~ g4@2 a4@3 ~ b4@3 ~",
  F: "[g4,c5]@3 ~ c5@2 b4@2 c5@2 d5@2 e5@2 f5@2", G: "[c5,g5] a5 g5 e5 d5 c5 d5 e5", H: "f5 a5 c6 a5 b5 g5 a5 f5",
  I: "[c5,g5]@3 ~ g5@2 a5@2 e5@2 c5@2 g5@2 e5@2", J: "f5 g5 f5 e5 d5 e5 f5 d5", K: "e5 f5 e5 d5 c5 d5 e5 c5",
  L: "[g4,d5]@3 ~ a4@3 ~ b4@3 ~ c5@3 ~", M: "[a4,d5] e5 d5 c5 b4 g4 a4 b4", N: "c5@2 c5 b4 c5 d5 e5 f5, g4 ~@7",
  O: "g5 a5 g5 e5 d5 c5 d5 e5", P: "d5 c#5 d5 f5 e5 c5 d5 b4", Q: "c5@2 g4@2 c5@3 ~ [g4,b4]@3 ~ [a#4,c5]@3 ~",
  R: "[a4,c5]@3 ~ [f4,a4]@3 ~ [a4,c5]@3 ~ [f4,a4]@3 ~", S: "a4 g#4 a4 b4 c5 d5 c5 a4", T: "g4 a4 g4 d#4 e4 g4 a4 g4",
  U: "[g4,c5]@3 ~ [e4,g4]@3 ~ a4@2 g4@2 e4@2 f4@2", V: "g4 a4 b4 c5 d5 e5 f5 f#5", W: "g5 e5 f5 d5 e5 c5 d5 b4",
  X: "c5 d5 e5 a5 g5 d#5 e5 c5", Y: "a4 g4 c5 a4 g4 e4 d4 e4",
  Z: "[c4,f4] ~ [c4,a4] ~ [f4,c5] ~ [c4,f4] ~ [c4,a4] ~ [f4,d5] ~ [c4,f4] ~ [c4,a4] ~", // F5 F F5 F Dm F5 F
  AA: "[a4,d#5] ~ [c4,f4] ~ [c4,a4] ~ [f4,d5] ~ [c4,f4] ~ [c4,a4] ~ [f4,c5]@4", // Adim F5 F Dm F5 F F5
  AB: "[c4,e4] ~ [c4,g4] ~ [g4,c5] ~ [c4,e4] ~ [c4,g4] ~ [g4,d5] ~ [c4,e4] ~ [c4,g4] ~", // C C5 C C5 G5 C C5
  AC: "[g4,c5] ~ [c4,g4] ~ [c4,e4] ~ [g4,d5] ~ [c4,g4] ~ [c4,g4] ~ [g4,c5]@4", AD: "b4 a4 g4 b4 a4 g4 e4 f4, f4 ~@3",
  AE: "g4 f#4 a4 f4 g4 f4 e4 d4", AF: "c4 e4 g4 a4 b4 a4 a#4 b4", AG: "[g4,c5] ~",
  AH: "~@4 [g4,c5,e5] ~@7 [g4,c#5,e5] ~@3", AI: "~@4 [a4,c5,f#5] ~@7 [g4,b4,f5] ~@3", AJ: "[g4,c5,e5]",
  AK: "[~@8 [g4,c5,e5]@25 ~@15]/3", // C
})).s("gm_fiddle").gain(0.2).pan(0.6)

stack(acoustic_guitar_steel, bass, banjo, fiddle)