Strudelify

Red River

Alabama

KeyC majorTempo133 bpm
0:00/0:00
// Red River — Alabama
// 133 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 71 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(133/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 · "A.PIANO 1"
const piano = note(`<
  A B@2 C@2 D E F@2 G@2 H@4 I@2 J K L@5 M@3 N@2 O@2 P@2 Q R S T U@4 V@2 W X Y@2 Z@2 AA@3 AB AC@2 AD@2 AE AF@3 AG@2 AH@2
  AI@3 AJ@3
>`.pickRestart({
  A: "~@12 d4@4 ~@2 d4@3 ~@3", B: "[d4@12 g4@9 ~ c4@2 d4@11 ~ d4@2 e4@4 c4 d4@4 ~, ~@21 g4@14 ~ g4@6 g4@6]/2",
  C: "[[c4,g4]@10 ~@3 g4@8 f4 ~@2 e4@24, ~@10 g5@13 d4@2 ~@23, ~@10 c5@2 c5@9 [g4,c5]@27, ~@11 d5@13 ~@24, ~@11 f4 ~@12]/2", // C5
  D: "[c4,e4]@11 f4, ~@22 c4 ~", E: "[c4,e4]@17 ~ d4@6", F: "[c4@21 g4@2 [d4,g4], ~@7 c4]/2",
  G: "[d4@2 ~@32 c4@2 d4 ~ e4@4 ~@3 e4@3, g4@36 g4@6 ~ d4@5, ~ e4@18 ~@2 [c4,g4]@3]/2", // C5
  H: "[~@22 [a4,d5]@3 a4 ~@22 f4 ~@36 e4@4 ~ d4@3 ~@3, [d4,g4]@25 d5@25 ~@22 e4@12 ~@12, ~@26 b4@23 ~@21 [d4,f4]@4 ~@22, ~@45 c5@28 ~@23, ~@46 f4 g4@2 [c4,g4]@24 c4@16 ~@7]/4", // D5 G5 Dm C5
  I: "[~@22 a#4@3 a4@17 [c4,f4,a4]@6, c4 ~, ~@11 f4@10 ~@3, ~@22 d4@5 ~@21]/2", J: "d4 e4@2 d4@21, g4",
  K: "g4@12 [c4,g4]@4 ~@3 d4@5, ~@18 g4@5 ~, ~@9 c4 ~@2", // C5
  L: "[[c4,g4]@22 c5 ~ [g4,c5]@16 f4 ~@5 [d4,g4,c5]@2 d4 ~@48 c4@15 c4@2 [d4,f4,a4]@6, ~@22 g5@26 c5@24 [g4,e5]@19 ~@5 c5@18 ~@6, ~@23 d5@25 g4@22 d5@4 ~@17 d5@7 ~@22, ~@40 [g4,c5]@2 c4@8 ~@14 f4@2 d5@2 f4@6 ~@15 f4@9 ~@22, ~@41 f4@9 e4@24 ~@21 e4@19 ~@6]/5", // C5 Csus2 Dm C C5
  M: "[~ e4@17 f4@6 e4@30 ~ e4@3 ~@2 c4@2 d4@2 ~@4 e4@4, g4@19 ~@35 g4@5 ~ g4@4 ~@8, d4 ~@8 c4@18 d4 ~@5 [d4,g4]@3]/3", // G5
  N: "[g4@10 c4 c#4 d4@9 [c4,f4,a4]@2 ~, d4@11 ~@13, ~@10 g4@11 ~@3]/2", // F
  O: "[d4 ~@23 f4@3 ~ e4@8 [e4,c5]@3 ~@3 [d4,a#4]@3 ~@3, g4@2 c5 ~, c4@22 ~ c4@3 ~@22, ~ e4@12 ~@11]/2", // C Gm
  P: "[~@22 [d4,a#4]@2 ~@12 [c4,f4]@3 ~@3 [c4,f4]@3 ~@3, a4@24 ~ a4@13 ~@10, f4@11 f4@7 ~@6, ~ c4@23 c4@11 ~@13]/2", // Gm F5
  Q: "g4@11 [e4,g4], d4", R: "~@2 f4@10 d4@2 e4@3 ~@2 [d4,g4]@4 ~, ~ g4@11 g4@5 ~@7, ~ e4@2 ~@21", S: "[c4,g4]",
  T: "~@4 a6@2 ~@4 g6@2 e6@2 c6@2 [c4,e4,a5] ~ g5@4 f5 ~", // Am
  U: "[~ d#5 ~@10 e5@3 ~ g5@2 d5 d#5 e5@2 g5 ~ d5 d#5 e5@8 ~@2 d5 ~ d#5 d5 ~ c5 d5@3 ~ c5@6 ~@2 g4 a4@4 ~ [g4,c5]@3 ~ c4 ~ [f4,g4]@3 ~ d4 e4@5 ~@6 g4 ~ [c5,g5]@3 ~@3 [d5,g5]@3 ~@3, d5@2 ~ e5@5 ~@26 e4@25 ~@11 g4@7 ~@19, ~@5 [c4,e4]@27 ~@2 c4@28 ~@14 c4@16 ~@4, ~@18 c5 ~@13]/4", // C5 Fsus2 C5 G5 C
  V: "[g5@4 e5 ~ [e5,g5]@2 ~@2 e5@2 d5@3 ~ e5@2 [e5,g5]@2 ~@2 e5@2 ~ d5@3 [e5,g5] ~ [e5,g5]@2 ~@2 [e5,g5]@2 ~ f5@3 e5@2 d5@4 c5@2, [c4,e4]@12 ~@3 c4@8 ~@5 [c4,e4]@17 ~@3, d5@3 ~@7 g5@5 ~ e4@8 ~@24, ~@16 g5 ~@5 g5@5 ~@9 g5@3 ~ g5@7 ~]/2", // Em C
  W: "~ c#5 ~@14 g4 ~ [c5,g5]@3 ~ [b4,g5]@2, d4@4 ~ d4@7, ~ g5@15 ~@8, ~ d5@7 ~@4", // C5 Em
  X: "~@4 d4 ~@6 f6@2 ~ c6 ~ g5 ~ f5@3 ~ c5 ~, ~@11 e6 ~ e6@2 ~@9",
  Y: "[d5 d#5 e5@2 a5 ~ g5@3 ~ c5 ~@2 d#5 ~ e5 a5@2 g5@3 ~ c5 ~ d5 d#5 e5@2 a5@2 ~@10 [c4,e4] ~ c6@2 ~@2 d6@2, [c4,e4]@19 ~@3 [c4,e4]@15 ~@11, ~@6 d5 ~@17]/2", // C
  Z: "[~@8 d#6 d6 c6 ~ d6@2 ~@2 c6 ~ f5@2 ~@2 [a#5,c6]@2 [a5,c6]@3 ~ f5@2 c5@2 ~@2 [c4,a#4] ~ g#4 a4@2 ~@3 f4@4 ~@2, ~@3 d6@5 ~@20 c6 ~@5 f5@2 ~@12, ~@4 c4@26 ~@10 c4@5 ~@3]/2", // A#sus2 Am C7
  AA: "[~ a#4 ~ b4@2 ~ b4@2 ~@5 c#5 ~@2 b5@6 ~@3 f#5 ~@2 d6@4 ~@2 [a5,f6]@2 ~ e6@3 ~@2 d6@3 ~ [e5,c6]@5 ~ g5 a5 ~@4 [a5,c6] ~@2 [c5,d5] e5 d5 ~ c5 [d5,g5]@3 ~ [c5,g5]@2, d4@9 ~ d4@9 ~@3 d4@14 ~@4 [d4,f5]@4 ~@2 c4@26, a4@2 ~@3 g5@5 ~@2 c5@2 d5@7 ~@3 f5@2 g5@5 ~@5 g5@2 ~@8 d6 ~@5 c6@2 ~@6 g5@3 ~@9]/3", // Dm C Am Csus2 G5 C5 Dm
  AB: "~@4 g4 a4 ~@4 c4 ~ [c4,g4]@3 ~@3 [d4,g4]@3 ~@3, ~@2 c5 ~@9", // C5 G5
  AC: "[d4 ~ e4@15 ~ [c4,f4]@4 [c4,e4]@13 ~ [c4,e4]@3 ~@3 d4@4 ~@2, [c4,g4]@17 ~@31]/2", // F5 C C5
  AD: "[~@10 g4 ~ [d5,g5]@4 ~@2 d5 ~ e5@2 [d5,g5]@4 ~@8 c4 ~@7 [d4,f4]@3 ~@3, c4@31 ~@17, ~@18 g5@4 ~@6 [c5,g5]@11 ~@9]/2", // G5 Dm C5
  AE: "[c4,e4]@11 ~ [c4,e4]@3 ~@3 [c4,f4]@3 ~@3", // C F5
  AF: "[d4 ~ e4@9 ~ [d4,g4]@3 ~ [e4,g4]@2 ~@4 [d4,g4]@10 ~@3 g4 ~ g5@3 [f5,g5]@2 [e5,g5]@3 ~@7 d4@7 ~@2 d4@3 ~@3 d4@2 ~@3, [c4,g4]@10 ~@2 c4@6 ~@16 d4@15 ~@23, ~@46 [d5,g5]@13 ~ g5@3 ~@3 [f5,g5]@3 ~@3]/3", // G5 Em G5 Fsus2 Em C5 G5 Fsus2
  AG: "[d5 e5@10 ~@2 e5@3 ~@2 [d5,g5]@4 [c5,g5]@12 ~@2 [d5,g5]@3 ~@3 [e5,g5]@3 ~@3, [c4,e4]@12 d5@2 ~@2 [c4,e4]@15 ~@3 [c4,e4]@11 ~@3, g5@5 ~ g5@2 ~@16]/2", // G5 C5 G5 Em C
  AH: "[[a#4,g5]@5 ~ a4@11 ~ a#4@4 ~ a4@11 ~@2 d5@2 b4@2 ~@2 [a4,d5]@4 b4 a4, c4@8 ~ d4 ~ c4@7 ~@6, ~@6 f5@27 ~@3 a4 ~@11]/2", // D# D5
  AI: "[[g4,d5]@11 ~ [b4,g5]@8 ~@2 c5@2 ~@10 g4 ~ d5 ~ e5@4 d5@4 ~ [c4,e4]@2 ~@3 d6@2 ~@4 c6 ~ c6@2 a5@2 [g5,c6] ~ [g5,a5]@2 e5 ~ [d5,g5] ~, d4@24 d5@10 ~@12 c5@3 ~@17 d5 ~@5, ~@22 g5@12 ~@2 g5@5 ~ g5@7 ~@11 g5 ~@11, ~@7 d4@4 ~@7]/3", // G5 Em C C5 Gsus2 G5
  AJ: "[[c5,g5]@2 ~@2 g4 ~ [d4,f4,b4]@3 ~@3 [c4,e4,c5]@49 ~@11]/3", // C5 Bdim C
})).s("gm_piano").gain(0.26).pan(0.7)

// chords · piano · "A.PIANO 1"
const piano_2 = note(`<
  A B@2 C D E F G@2 H@2 I J K@2 L M N@2 O ~ P ~ Q R S@2 T U V@2 W X Y Z AA AB AC@3 AD AE AF AG AH@3 AI@2 AJ@3 AK AL@2
  AM@2 AN AO@3 AP@2 AQ@2 AR AS ~ AT@3
>`.pickRestart({
  A: "~@12 a3 b3@3 ~@2 a3@3 ~@3", B: "[g3@5 g3 ~@11 g3 ~@2 g3 ~@3, g2, ~ b3 ~@2, ~@18 d3@29 ~]/2", C: "[c3,e3]",
  D: "c3", E: "g3@22 a3 ~", F: "g3@8 ~ [f3,a3]@3, ~@2 [g2,d3]", G: "[g3@10 g3!2, [c3,e3]]/2",
  H: "[~ c3@37 ~@2 [e3,g3]@8, e3@37 ~@11]/2", I: "g3", J: "~ [g3,b3]@23",
  K: "[~@37 g3@4 ~@2 [c3,f3]@3 ~@2, ~ [e3,g3]@23 e3@10 e3@6 ~@8, ~@22 a3@3 c3@16 ~@7, ~@25 g3@12 ~@5 a#3@3 ~@3]/2", // F5 Em
  L: "~@11 a#3, [f3,a3]", M: "~ a3@15 a3@8",
  N: "[g3@11 g3 ~@5 g3@2 ~@5, ~@22 g2@25 ~, ~@24 b3@13 ~@11, ~@33 d3@14 ~]/2", O: "[c3,e3]@23 ~", P: "g3, c3 ~@3",
  Q: "~@2 f3", R: "~@16 g3@2 a3@5 ~, e3@19 ~@5", S: "[g3@14 g3 ~@2 g3 ~@2 g3 ~@3]/2", T: "~@10 a3 a#3, [g2,d3]@23 ~",
  U: "b3@18 a3 ~@5", V: "[~@23 e3@3 ~@8 [e3,g3]@5 ~@3 [e3,a#3]@3 ~@3, ~@22 g3@3 ~@23]/2", W: "~ f3@23, a3",
  X: "~@10 f3@2 a3@3 ~@3 [f3,a3]@3 ~@3", Y: "a3 ~@10 g3, ~ b3@11", Z: "~ g3@9 g3@2 g3@5 ~ g3@4 ~@2", AA: "[c3,e3,g3]",
  AB: "~@16 g3 ~@7", AC: "[~@5 g3@27 ~@2 g3@36 ~@2]/3", AD: "~@4 [e3,g3]@15 ~@5", AE: "g3@3 ~ g3@2",
  AF: "~@4 g3@17 ~@3", AG: "[g3,b3]@4 ~ [g3,b3]@7",
  AH: "[~@4 [g3,b3] ~@12 [g3,b3] ~@4 g3@20 ~@4 g3@15 ~@3 [g3,a#3] ~@7, ~@22 b3 ~@49]/3", // G Gm
  AI: "[~@4 [f3,a3]@27 ~@3 [f3,a3] ~@5 a3@6 ~@2, ~@10 f3 ~]/2", // F
  AJ: "[[f3,b3]@8 ~@3 [f3,b3]@9 ~@2 [f3,b3]@14 ~@4 b3@5 ~ [e3,g3]@26, ~@40 f3@3 ~@29]/3", // Fdim Em
  AK: "~@10 e3 g3 ~@7 c3 ~@4, ~@9 g3 ~@2",
  AL: "[[c3,e3,g3]@13 ~@3 [c3,e3,g3] ~ a3@2 ~@2 g3@12 f3 ~ g3@3 ~@3 [f3,a3]@3 ~@3]/2", // C F
  AM: "[[e3,g3]@31 ~@3 [e3,g3] ~@5 [e3,g3] ~ a3@3 ~@3]/2", // Em
  AN: "[c3,e3]@12 ~ [c3,e3]@2 ~@4 c3@2 ~@3, g3@10 ~@2 g3@3 ~@3 [f3,a3]@3 ~@3", // C F
  AO: "[~ c3@7 ~@2 [c3,g3]@3 ~@5 c3 ~@3 [g3,b3]@27 ~@3 [g3,b3]@7 ~@2 [g3,b3]@3 ~@3 [g3,b3]@2 ~@3, g3@7 ~@65]/3", // C5 G
  AP: "[g3@13 ~@9 a#3@9 ~@3 g3@8 a#3@2 ~@4, ~@16 g3@15 ~@17]/2", AQ: "[[f3,a3]@17 ~ a#3@4 a3@14 ~@12, ~@3 f3@3 ~@2]/2",
  AR: "[g3,b3]", AS: "~ g3@5, ~@2 b3@9 ~", AT: "[~@6 [f3,b3]@2 ~@4 [e3,g3]@49 ~@11]/3",
})).s("gm_piano").gain(0.22).pan(0.7)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E@2 F G E H I J K L M N O P Q R S T U V S W X Y Z AA M AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS
  AT AU AV AW AH AX AY AW AZ BA Y BB BC BD AR AS BE BF BG@3
>`.pickRestart({
  A: "g2@6 d2@4 ~ d2", B: "g1@11 ~ a1@5 ~ b1@4 ~@2", C: "c2@9 ~@3 g1@11 ~", D: "c2@5 ~ g1@6 a1@5 ~ b1@4 ~@2",
  E: "c2@5 ~ g2@5 ~", F: "c2@5 ~ g2@6", G: "c2@11 ~ g2@10 ~@2", H: "c2@10 ~@2 e2@5 ~ f2@5 ~", I: "g2@10 ~@2 d2@11 ~",
  J: "g2@2 a1 b1", K: "c2@11 ~ g2@11 ~", L: "c2@11 ~ d2@5 ~ e2@5 ~", M: "f2@11 ~ c2@8 ~@2 c2@2", N: "f2@11 ~ c2@10 ~@2",
  O: "g2@11 ~ d2@11 ~", P: "g1@11 ~ a1@6 b1@6", Q: "c2@9 ~ c2@2 g2@12", R: "c2@4 ~@2 g1@6 a1@6 b1@5 ~",
  S: "c2@4 ~ c2 g2@4 ~ g2", T: "c2@9 ~ c2@2 g1@11 ~", U: "c2@11 ~ g2@8 ~@2 g2@2", V: "c2 g1 a1 b1",
  W: "c2@9 ~ c2@2 e2@6 f2@6", X: "g2@4 ~ g2 d2@4 ~ d2", Y: "g1 f2 e2 d2", Z: "c2@9 ~ c2@2 g1@8 ~@2 g1@2",
  AA: "c2@5 ~ c2@6 d2@5 ~ e2@5 ~", AB: "f2@11 ~ e2@6 f2@6", AC: "g2@11 ~ d2@8 ~@2 d2@2", AD: "g1@9 ~ g1@2 a1@6 b1@5 ~",
  AE: "c2@4 ~ c2 g1@4 ~ g1", AF: "c2@4 c2 ~ g1@6 a1@5 ~ b1@5 ~", AG: "c2@6 e2@5 ~ g2@6 a2@4 c2 ~", AH: "c3 a2 g2 e2",
  AI: "c2@6 e2@6 g2@6 a2@5 c2", AJ: "c3@5 c2 a2@6 g2@6 e2@6", AK: "c2@3 a1@3 g1@3 a1@2 g1",
  AL: "c2@6 e2@6 a2@6 g#2@5 ~", AM: "g2@6 d2@6 b1@6 d2@5 ~", AN: "g1@3 f2@3 e2@3 d2@2 g1",
  AO: "c2@5 ~ c2@6 g2 a2@5 g2@6", AP: "c2@4 ~@2 c2@6 d2@6 e2@5 ~", AQ: "f2@6 d2@6 c2@6 a1@5 c2", AR: "f1 e1 f1 f#1",
  AS: "g1@3 b1@3 d2@3 e2@2 g1", AT: "g2@3 f2@2 g1 e2@2 g1 d2@3", AU: "c2 a2 g2 e2", AV: "c2@4 ~ c2 g1@6 a1@6 b1@6",
  AW: "c2@3 e2@3 g2@3 a2@2 c2", AX: "c2@2 c3 b2@3 a2@3 g#2@3", AY: "g2@2 g1 f2@3 e2@3 d2@3", AZ: "c3@6 e2@6 f2@7 f#2@5",
  BA: "g2 d2 b1 a1", BB: "c2@5 ~ c2@6 e2@6 g2@4 c2@2", BC: "c3 a#2 a2 g2", BD: "f2@6 d2@6 c2@6 a1@4 c2 ~",
  BE: "g2 f2 e2 d2", BF: "c2 ~@5", BG: "[~@4 c2 ~ g1@4 ~@2 c2@44 ~@16]/3",
})).s("gm_acoustic_bass").gain(0.45)

// drums · kick
const kick = s("bd").struct("<~ A@3 B A@15 C A@11 D A@35 E ~@2>".pickRestart({
  A: "x ~@4 x!2 ~@4 x", B: "~@7 x!2 ~@3", C: "x ~@10 x", D: "x", E: "x ~@4 x!2 ~@5",
})).gain(0.24)

// drums · rim
const rim = s("rim").struct("<~ [~ x ~ x]!3 ~ [~ x ~ x]!15 ~@13 [~ x ~ x]!35 [~ x ~@2] ~@2>").gain(0.28)

// drums · snare
const snare = s("sd").struct("<~@4 A ~@15 B C@2 D C@2 D E C@2 F C G ~@38>".pickRestart({
  A: "x ~@4 x!2 ~@2 x ~@2", B: "~@3 x ~ x ~@2 x!2 ~@2", C: "~ x ~ x", D: "~@3 x ~ x ~@3 x ~@2", E: "~@3 x ~@5 x ~ x",
  F: "~@3 x ~ x ~@3 x ~ x", G: "x ~@8 x!3",
})).gain(0.28)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@4 [~ x!4 ~@7] ~@15 [~ x ~@4] ~@11 [~@7 x!2 ~@3] ~@38>").gain(0.16)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@3 ~ B C@3 A C A@9 ~@2 D ~@5 D ~@2 D E B A C A@2 F@4 A F@2 C A@6 F A@2 F@2 A@4 F@2 A@3 F@2 G ~@2
>`.pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~@2 x ~ x!2 ~@2", C: "x ~ x!2 ~ x!5 ~ x", D: "~@5 x ~@6",
  E: "x ~@2 x!6 ~@3", F: "x ~ x!2 ~ x!2 ~ x!2 ~@2", G: "x ~ x!2 ~ x!2 ~@5",
})).gain(0.28)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~ B ~@3 A ~@4 A ~ A ~@2 A C ~ D ~@5 D ~@2 D E B A ~@2 A B@4 A B@2 ~@4 A ~@2 B ~@2 B@2 A@2 ~@2 B@2 ~ A@2 B@2 ~@3
>`.pickRestart({
  A: "~@5 x", B: "~@11 x", C: "x", D: "~ x ~", E: "~@3 x",
})).gain(0.24)

// drums · crash
const crash = s("cr").struct("<~ A ~@3 A ~@15 A ~@11 A ~@18 B A ~@14 C ~@2>".pickRestart({
  A: "x", B: "~@11 x", C: "~@5 x ~@6 x ~@11",
})).gain(0.24)

// drums · ride
const ride = s("rd").struct(`<
  ~@21
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!6
  [x!4 ~ x!2 ~ x!2 ~ x]
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!2
  [x ~ x!5 ~ x!2 ~ x]
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]
  ~@39
>`).gain(0.12)

stack(piano, piano_2, bass, kick, rim, snare, snare_soft, hihat, open_hat, crash, ride)

More by Alabama