Strudelify
Red River Rock cover art

Johnny & The Hurricanes' Red River Rock

Red River Rock

Johnny & The Hurricanes

KeyC majorTempo167 bpm
0:00/0:00
// Red River Rock — Johnny & The Hurricanes
// 167 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(167/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 · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~ A@6 B@2 A@2 C D A E A F A@6 B@2 A@2 C@2 A B G F A@4 C@2 A@2 B C A F A@6 B@2 A@2 C@2 A B H F A@6 B@2 A@2 C@2 A B I F
  A@5 J B@2 A@2 C@2 A B A F K
>`.pickRestart({
  A: "[c4,g4] ~ [c4,g4] ~ [c4,a4] ~ [c4,g4] ~ [c4,g4] ~ [c4,g4] ~ [c4,a4] ~ [c4,g4] ~", // C5 F C5 F C5
  B: "[g3,d4] ~ [g3,d4] ~ [g3,e4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,e4] ~ [g3,d4] ~", // G5 C G5 C G5
  C: "[f3,c4] ~ [f3,c4] ~ [f3,d4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,d4] ~ [f3,c4] ~", // F5 Dm F5 Dm F5
  D: "[f3,c4] ~ [f3,c4] ~ [f3,d4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,d4]@2 [f3,c4] ~", // F5 Dm F5 Dm F5
  E: "[g3,d4] ~ [g3,d4] ~ [g3,e4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,e4]@2 [g3,d4] ~", F: "[c4,g4] ~@15",
  G: "[c4,g4,a4] ~ [c4,g4] ~ [c4,a4] ~ [c4,g4] ~ [c4,g4] ~ [c4,g4] ~ [c4,a4] ~ [c4,g4] ~", // Am7 C5 F C5 F C5
  H: "[c4,g4] ~ [c4,g4] ~ [c4,a4] ~ [c4,g4] ~ [c4,g4] ~ [c4,g4] ~ [c4,g4,a4] ~ [c4,g4] ~", // C5 F C5 Am7 C5
  I: "[c4,d4,g4] ~ [c4,g4] ~ [c4,a4] ~ [c4,g4] ~ [c4,g4] ~ [c4,g4] ~ [c4,a4] ~ [c4,g4] ~", // Csus2 C5 F C5 F C5
  J: "[c4,g4] ~ [c4,g4] ~ [c4,a4] ~ [c4,g4] ~ [c4,g4] ~ [c4,g4] ~ [c4,a4] ~ [c4,g4,a4] ~", K: "[c4,g4] ~@7",
})).s("gm_electric_guitar_muted").gain(0.5).pan(0.7)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~ A@5 B C@2 A@2 D E A C A F A@6 C G A@2 H E A C A F A@3 I D J@2 A C K A L A@6 C M A@2 D E A C A N A@6 C@2 A I O P A C
  A Q R A@5 C S A I H E A C A T@2
>`.pickRestart({
  A: "c2@2 e2@2 g2@2 a2 g2", B: "c2@4 e2@4 g2@4 a2@2 g2 ~", C: "g1@2 b1@2 d2@2 e2 d2", D: "f1@2 a1@2 c2@2 d2 c2",
  E: "f1@4 a1@4 c2@4 d2@2 c2 ~", F: "c2@2 ~ g1 g1@2 ~ g1!2 ~@2 g1!2 ~@2 g1", G: "g1@2 b1@2 d2@2 e2 f2",
  H: "f2@2 d2@2 c2@2 a1 d2", I: "c2 d2 d#2 e2", J: "[f1@2 a1@2 c2@2 d2 c2@3 e2@2 g2@2 a2 g2]/2",
  K: "f1@2 a1@2 c2@2 e2 d2", L: "c2 ~@2 g1!2 ~@2 g1!2 ~@2 g1 g1@2 ~ g1", M: "g1@2 b1@2 d2@2 f2 e2",
  N: "c2@2 ~ g1!2 ~@2 g1!2 ~@2 g1!2 ~@2 g1", O: "f2@4 a2@3 ~ c3@4 d3@2 c3@2", P: "f1@2 a1@2 c2@2 d#2 d2",
  Q: "c2 ~@2 g1!2 ~@2 g1!2 ~@2 g1!2 ~@2 g1", R: "~@2 e2@2 g2@2 a2 g2", S: "g1 a1 b1 d2",
  T: "[c2 ~@2 g1 g1@2 ~ g1 g1@2 ~ g1 g1@2 ~@2 c2@4 ~@12, ~@15 g1@2 ~@15]/2",
})).s("gm_electric_bass_finger").gain(0.5)

// other · tenor sax
const tenor_sax = note(`<
  ~@17 A@2 B A@2 C D E F B G H B D I J ~@28 A B@5 D K B@2 L G B D B J M N@3 O P Q R N S T U S V W X Y
>`.pickRestart({
  A: "c3@3 ~@3 e3@2 ~@2 g3@2 a3@2 g3@2", B: "c3 ~@2 e3 ~ g3 a3 g3", C: "c3@2 ~@4 e3@3 ~ g3@2 a3@2 g3@2",
  D: "g2@3 ~@3 b2@2 ~@2 d3@2 e3@2 d3@2", E: "g2@3 ~@3 b2@2 ~@2 d3@2 e3@2 d3 ~", F: "c3 ~@2 e3 ~ g3 a3 g3, ~@6 f3 ~@9",
  G: "f2@3 ~@3 a2@2 ~@2 c3@2 d3@2 c3@2", H: "f2@3 ~@3 a2@2 ~@2 c3@2 d3@2 c3 ~", I: "c3@2 ~@4 e3@2 ~@2 g3 ~ a3@2 g3@2",
  J: "c3 ~@7", K: "g2@2 ~@4 b2@2 ~@2 d3@2 e3@2 d3 ~", L: "f2@2 ~ a2 ~ c3 d3 c3, g2 ~@15",
  M: "c4 ~@2 e4 ~ g4 a4 g4, ~@10 f#4 ~@5", N: "c4 ~@2 e4 ~ g4 a4 g4", O: "c4@3 ~@3 e4@2 ~@2 g4@2 a4@2 g4@2",
  P: "c4@2 ~@4 e4 ~@3 g4@2 a4@2 g4@2", Q: "g3@3 ~@3 b3@2 ~@2 d4@2 e4@2 d4@2", R: "g3 ~@2 b3 ~ d4 e4 d4",
  S: "c4@2 ~@4 e4@2 ~@2 g4@2 a4@2 g4 ~", T: "f3@3 ~@3 a3@2 ~@2 c4@2 d4@2 c4@2", U: "f3@2 ~@4 a3@2 ~@2 c4@2 d4@2 c4 ~",
  V: "g3@2 ~@4 b3@2 ~@2 d4@2 e4@2 d4 ~", W: "c4@2 ~@4 e4@2 ~@2 g4 ~ a4@2 g4 ~", X: "c4 ~@15", Y: "c3@3 ~@13",
})).s("gm_tenor_sax").gain(0.45)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted_2 = note("<~@32 A B C D E F G H I J K L ~@50>".pickRestart({
  A: "~@10 [c4,e4]@3 ~ [c4,e4] ~", B: "[c4,e4]@2 ~ [e4,g4]@2 ~ [e4,g4] ~ [e4,g4]@2 [c4,e4] ~ e4 ~ [c4,e4] ~",
  C: "[c4,e4]@2 [e4,g4] ~@3 [e4,g4] ~@3 c4@2 e4 ~ [c4,e4] ~, ~@10 e4 ~@5", // C Em C
  D: "[c4,e4]@2 [e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [c4,e4] ~ [a#3,c4,e4] ~ [a#3,c4,e4] ~", // C Em C C7
  E: "[c4,e4] [e4,g4] ~ [e4,g4] ~@3 g#4", F: "a4 [c5,f5] g#4 a4 [c5,f5] g#4 a4 [c5,f5]",
  G: "g#4@2 a4@2 [c5,f5]@2 g#4@2 a4@2 [c5,f5]@2 g#4 ~@3", // F5
  H: "[f#4,c5]@2 [g4,c5] ~ [g4,c5] ~ [f#4,c5] ~ [g4,c5] ~ [g4,c5]@2 ~@2 [f#4,c5]@2", // F#dim C5 F#dim C5 F#dim
  I: "~@2 [g4,c5] ~ [g4,c5] ~ [f#4,c5] ~ [g4,c5] ~ [g4,a#4,c5] ~@3 g4@2", J: "~@2 g4@2 b4@2 d5@2 f5 ~ f5@2 e5@2 d5@2",
  K: "f4 ~ f4@2 a4@2 c5@2 d#5 ~ d#5@2 d5@2 c5 ~", L: "~ [g4,c5] ~ [a#4,d#5]@5",
})).s("gm_electric_guitar_muted").gain(0.66)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~ A@8 B@8 C@8 D@8 E@8 F G@3 H@8 I@7 J@8 ~ K@7 L@8 ~ M@7 N O>".pickRestart({
  A: "[[c4,e4]@95 [b3,d4]@33, g3]/8", // C Bm
  B: "[e4@32 f4@32 e4@15 ~ b3@16 [c4,e4]@17 ~ [g3,b3,d4]@13 ~, c4@77 ~@2 d4@16 ~@33, ~@32 a3@30 ~@2 g3@49 ~@15]/8", // C G
  C: "[[c4,e4]@3 d4, g3, ~@48 b3@15 ~]/8", // C
  D: "[e4@31 f4@33 e4@16 [b3,d4]@16 [c4,e4]@17 ~ [g3,b3]@12 ~@2, c4@79 ~@35 d4@14, ~@31 a3@31 ~@2 g3@49 ~@15]/8", // Bm C G
  E: "[e4@63 f4@33 e4@32, c4, g3@62 ~ a3@31 ~@2 g3@30 ~@2]/8", F: "[d4,g4], b3@7 ~",
  G: "[[a3,f4]@16 [g3,e4]@17 ~@2 [g3,b3,d4]@12 ~, c4@11 ~@5]/3", H: "[[c4,e4]@96 [b3,d4]@31 e4, g3]/8",
  I: "[~@2 f4@2 e4 [b3,d4] [c4,e4], c4@79 ~@33, ~@16 a3@15 ~ g3@24]/7", // Bm C
  J: "[~@3 b3@13 [c4,e4]@95 [b3,d4]@17, ~ d4@7 ~@56, ~@3 g3@125]/8", // C Bm
  K: "[e4@2 f4@2 e4 [b3,d4] [c4,e4], c4@79 ~@33, ~@16 a3@15 ~ g3@24]/7", // Bm C
  L: "[~@3 b3@13 [c4,e4]@95 ~ b3@16, ~@2 d4@13 ~@96 d4@17, ~@3 g3@125]/8", // C
  M: "[e4@32 f4@32 e4@15 ~ d4@15 ~ c4@16, c4@79 b3@16 ~@17, ~@32 a3@30 ~@2 g3@30 ~ [g3,e4]@17]/7", N: "~ [g3,b3,d4]@7",
  O: "[g3,c4,e4]@5 ~@11", // C
})).s("gm_string_ensemble_1").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~ A@15 B A@15 B A@11 B A@15 B A@15 B A@15 B C>".pickRestart({
  A: "x!2", B: "x ~ x!2", C: "x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~ A@13 B C D A@14 C D A@9 B C D A@13 B C E A@13 B C D A@13 B C D ~>".pickRestart({
  A: "~@2 x ~@3 x!2", B: "~ x ~ x", C: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", D: "x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x",
  E: "~@3 x!2 ~@2 x!2 ~@2 x!2 ~@2 x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~ A@15 B A@15 B A@11 B A@14 C B A@14 D B A@15 B@2>".pickRestart({
  A: "x!8", B: "x", C: "x!5 ~ x!2", D: "x!3 ~ x!4",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~ A ~@15 A ~@15 A ~@11 A ~@15 A ~@15 A ~@15 A>".pickRestart({
  A: "x",
})).gain(0.35)

stack(electric_guitar_muted, bass, tenor_sax, electric_guitar_muted_2, string_ensemble_1, kick, snare, hihat, crash)

More by Johnny & The Hurricanes