Strudelify

Keep the Fire Burning

REO Speedwagon

KeyC majorTempo135 bpm
0:00/0:00
// Keep the Fire Burning — REO Speedwagon
// 135 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 3 "Guitar" named as a guitar, played on electric guitar clean (its lead 8 bass lead patch is not one)
// note: Full arrangement: all 141 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/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 clean · "Guitar"
const electric_guitar_clean = note(`<
  A@2 B@2 C D E@2 F@2 G@2 H@2 I@2 J@2 K@2 L@2 M@2 N O P@2 Q R S T U V W@2 Q X@2 T Y@2 Z AA@2 AB@2 AC@2 AD@3 F@2 G@2 H@2
  I@2 J@2 K@2 L@2 M@2 N O P@2 Q R S T U V W@2 Q X@2 T Y@2 Z AA@2 AB@2 AC@2 AE@3 F@2 G@2 H@2 I@2 J@2 K@2 L@2 M@2 AF AG AH
  AI AJ@2 AK@2 AL@2 AM@2 AJ@2 AK@2 AL@2 AM@2 AJ@2 AK@2 AL@2 AM@2 ~
>`.pickRestart({
  A: "[[g3,c4]@21 ~@3 [g3,c4] ~ d4@5 ~]/2", B: "[[g3,c4,e4]@21 ~@3 [g3,c4,e4] ~ d4 ~ e4 ~ d4 ~]/2",
  C: "[g3,c4,e4]@5 ~@3", D: "[g3,c4,g4]@3 ~ e4@3 ~ [g3,e4]@3 ~ c4@3 ~",
  E: "[[g3,c4]@3 ~ e4 ~ [g3,e4] ~@3 [g3,d4] ~@3 [g3,c4]@7 ~@11]/2", // C5 C G5 C5
  F: "[[g3,c4,d4]@3 ~ d4 ~ [g3,c4,d4] ~@3 [g3,c4,e4] ~@3 [c4,e4]@5 ~ d4 ~ c4@7 ~@3, ~@14 g3@13 ~@5]/2", // Gsus4 C
  G: "[[a3,c4,e4] ~ d4@3 ~ [a3,c4,d4] ~@3 [a3,c4,d4] ~@3 [a3,d4]@3 ~ c4 ~ a3@8 ~@2 a3 ~, ~@14 e3@13 ~@5]/2", // Am D7 D5
  H: "[[a3,d4,f4]@3 ~ f4 ~ [a3,d4,f4] ~@3 [a3,d4,e4] ~@3 e4@3 ~ d4 ~ d4@9 ~@3, ~@7 [f3,a3]@6 ~@3]/2", // Dm Asus4 F
  I: "[[g3,c4,f4] ~ f4@3 ~ [g3,c4,f4] ~@3 [g3,c4,e4] ~@3 e4@3 ~ d4@3 ~ c4 ~ d4 ~ e4@3 ~ d4 ~, ~@14 [g3,b3]@13 ~@5]/2", // Csus4 C G
  J: "[[g3,c4,d4] ~ d4@3 ~ [g3,c4,d4] ~@3 [g3,c4,e4] ~@3 [c4,e4]@5 ~ d4 ~ c4@5 ~ e4 ~ e4 ~, ~@14 g3@13 ~@5]/2", // Gsus4 C
  K: "[[a3,c4,e4] ~ d4 ~ d4 ~ [a3,c4,d4] ~ d4 ~ [a3,c4,d4] ~@3 [a3,d4]@3 ~ c4 ~ a3@7 ~ d4 ~ e4 ~, ~@14 e3@13 ~@5]/2", // Am D7 D5
  L: "[[a3,d4,e4]@3 ~ f4 ~ [a3,d4,f4] ~@3 [a3,d4,e4] ~@3 e4@3 ~ d4 ~ d4@8 ~@2 a3 ~, ~@7 [f3,a3]@7 ~@2]/2", // Asus4 Dm Asus4 F
  M: "[[g3,d4,f4]@3 ~ f4 ~ [g3,c4,f4] ~@3 [g3,c4,e4] ~@3 e4@3 ~ d4 ~ d4@3 ~ e4@3 ~ d4 ~ c4 ~, ~@14 [g3,b3]@13 ~@5]/2", // G7 Csus4 C G
  N: "[e3,g3,c4]@5 ~@3 e4 ~ c4 ~ g3@3 ~", O: "[a3,c4,f4]@5 ~@3 f4 ~ c4 ~ a3@3 ~",
  P: "[[a#3,d4,f4]@4 ~@2 [a3,c4,f4]@5 ~ [g3,c4,e4]@15 ~@5]/2", Q: "~@4 [d3,b3]@4 ~@2 [d3,b3]@5 ~",
  R: "[d3,b3]@4 ~@2 [e3,c4]@3 ~ [f3,d4]@5 ~", S: "[f3,d4]@3 ~ [f3,d4]@4 ~@2 [f3,d4]@5 ~",
  T: "[f3,d4]@4 ~@2 [g3,e4]@3 ~ [a3,f4]@5 ~", U: "[a3,c4,f4]@4 ~@2 [g3,c4,e4] ~@3 [g3,c4,e4]@5 ~",
  V: "[c4,e4]@3 ~ e4 ~ c4@7 ~@3, g3@11 ~@5", // C
  W: "[[a3,c4,f4]@5 ~ [g3,c4,e4] ~@3 [g3,c4,e4] ~ [g3,c4,e4]@13 ~ [g3,c4,e4] ~ [g3,c4,e4] ~@3]/2", // F C
  X: "[[d3,b3]@4 ~@2 [e3,c4]@3 ~ [f3,d4] ~ [f3,d4]@7 ~ [f3,d4]@4 ~@2 [f3,d4]@5 ~]/2", // G C Dm
  Y: "[[a3,c4,f4] ~ e4@3 ~ [g3,c4,e4] ~@3 e4 ~ [c4,e4]@5 ~ d4 ~ c4@9 ~@3, ~@12 g3@15 ~@5]/2", // F C
  Z: "[a3,c4,f4]@4 ~@2 [g3,c4,e4] ~@3 c4 ~ e4@3 ~", // F C
  AA: "[[g3,c4,e4] ~ d4 ~ d4 ~ [g3,d4]@3 ~ c4 ~ [e3,a3,c4]@13 ~ c4 ~ e4@3 ~]/2", // C G5 Am
  AB: "[[a3,c4,e4]@3 ~ d4 ~ [g3,b3,d4]@3 ~ c4 ~ [f3,a3,c4]@13 ~ c4 ~ f4 ~ f4 ~]/2", // Am G F
  AC: "[[a3,c4,f4]@3 ~ e4 ~ [g3,c4,e4]@3 ~ d4 ~ e4@7 ~ d4@9 ~@3, ~@12 [g3,b3]@15 ~@5]/2", // F C G
  AD: "[[a3,c4,f4]@4 ~@2 [g3,c4,e4]@5 ~ [g3,b3,d4]@25 ~@3 c4 ~ d4@5 ~]/3", // F C G
  AE: "[[a3,c4,f4]@4 ~@2 [g3,c4,e4]@5 ~ [g3,b3,d4]@31 ~@5]/3", AF: "[e3,g3,c4]@3 ~ g3 ~ [g3,c4,e4] ~@3 [g3,c4,e4]@5 ~",
  AG: "~@4 a3 ~ [a3,c4,f4] ~@5 [a3,c4,f4]@4", AH: "~@4 a#3 ~ [a#3,d4,f4] ~@3 [a#3,d4,f4]@5 ~",
  AI: "[a3,c4,f4]@8 ~@4 a3@3 ~", // F
  AJ: "[[g3,c4,d4]@3 ~ d4 ~ [g3,c4,d4] ~@3 [g3,c4,e4] ~@3 [c4,e4]@5 ~ d4 ~ c4@10, ~@14 g3@13 ~@5]/2", // Gsus4 C
  AK: "[[a3,c4,e4]@4 ~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [a3,c4,e4]@13 ~@5]/2", // Am
  AL: "[[a3,d4,f4]@3 ~ f4 ~ [a3,d4,e4] ~@3 [a3,d4,f4] ~@3 [d4,f4]@5 ~ e4 ~ d4@7 ~@3, ~@14 a3@13 ~@5]/2", // Dm Asus4 Dm
  AM: "[[g3,c4,d4]@4 ~@2 [g3,c4,d4] ~@3 [g3,c4,d4] ~@3 [g3,b3,d4]@12 ~@6]/2", // Gsus4 G
})).s("gm_electric_guitar_clean").gain(0.35).pan(0.9)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A@6 B@2 C@2 D@2 E@2 F@2 G@2 H@2 E@2 F@2 I@2 J K L M N O P Q R@2 L S@2 O T@2 U V@2 W@2 X@2 Y Z AA C@2 D@2 E@2 F@2 G@2
  H@2 E@2 F@2 I@2 J K L M N O P Q R@2 L S@2 O T@2 U V@2 W@2 X@2 Y Z AB C@2 D@2 E@2 F@2 G@2 H@2 E@2 F@2 AC@3 AD G@2 D@2
  E@2 F@2 G@2 D@2 E@2 F@2 G@2 D@2 E@2 F@2 ~
>`.pickRestart({
  A: "[[c2,c3]@4 ~@2 [c2,c3] ~@3 [c2,c3] ~@3 [c2,c3]@7 ~@3 [g1,g2]@5 ~@3]/2", // C G
  B: "[[c2,c3]@4 ~@2 [c2,c3] ~@3 [c2,c3] ~@3 [c2,c3]@7 ~@3 [g1,g2]@2 ~@6]/2", // C G
  C: "[[c2,c3]@5 ~ [c2,c3] ~@3 [c2,c3] ~@3 [c2,c3]@7 ~@3 [c2,c3]@5 ~@3]/2", // C
  D: "[[a1,a2]@4 ~@2 [a1,a2] ~@3 [a1,a2] ~@3 [a1,a2]@7 ~@3 [a1,a2]@5 ~@3]/2", // A
  E: "[[d2,d3]@4 ~@2 [d2,d3] ~@3 [d2,d3] ~@3 [d2,d3]@7 ~@3 [d2,d3]@5 ~@3]/2", // D
  F: "[[g1,g2]@4 ~@2 [g1,g2] ~@3 [g1,g2] ~@3 [g1,g2]@7 ~@3 [g1,g2]@5 ~@3]/2", // G
  G: "[[c2,c3]@4 ~@2 [c2,c3] ~@3 [c2,c3] ~@3 [c2,c3]@7 ~@3 [c2,c3]@5 ~@3]/2", // C
  H: "[[a1,a2]@4 ~@2 [b1,a2] ~@3 [a1,a2] ~@3 [a1,a2]@7 ~@3 [a1,a2]@5 ~@3]/2", I: "[c2,c3]@11 ~@5",
  J: "[c2,c3]@3 ~ c2 ~ c3@3 ~ c2 ~ c3@3 ~", K: "c2 ~ c2 ~@3 c2 ~ c2 ~ c2 ~@3 c2 ~",
  L: "[g1,g2]@3 ~ [g1,g2]@4 ~@2 [g1,g2]@5 ~", M: "[g1,g2]@4 ~@2 [a1,a2]@3 ~ [b1,b2]@5 ~",
  N: "[b1,b2]@3 ~ [b1,b2]@4 ~@2 [b1,b2]@5 ~", O: "[b1,b2]@4 ~@2 [c2,c3]@3 ~ [d2,d3]@5 ~",
  P: "[f2,f3]@4 ~@2 [c2,c3] ~@3 [c2,c3]@5 ~", Q: "[c2,c3]@5 ~@3 [c2,c3]@3 ~ [c2,c3]@3 ~",
  R: "[[f2,f3]@4 ~@2 [c2,c3] ~@3 [c2,c3] ~ [c2,c3]@9 ~@3 [c2,c3]@5 ~@3]/2", // F C
  S: "[[g1,g2]@4 ~@2 [a1,a2]@3 ~ [b1,b2] ~ [b1,b2]@7 ~ [b1,b2]@5 ~ [b1,b2]@5 ~]/2", // G A B
  T: "[[f2,f3]@4 ~@2 [c2,c3] ~@5 [c2,c3]@7 ~ [c2,c3]@3 ~ [c2,c3]@5 ~@3]/2", // F C
  U: "[f2,f3]@4 ~@2 [c2,c3] ~@3 [c2,c3] ~ [c2,c3]@3 ~", // F C
  V: "[[c2,c3]@4 ~@2 [b1,b2]@5 ~ [a1,a2]@7 ~ [a1,a2]@3 ~ [a1,a2]@5 ~@3]/2", // C B A
  W: "[[a1,a2]@4 ~@2 [g1,g2]@5 ~ [f1,f2]@7 ~ [f1,f2]@3 ~ [f1,f2]@5 ~@3]/2", // A G F
  X: "[[f1,f2]@4 ~@2 [c2,c3]@5 ~ [g1,g2]@7 ~ [g1,g2]@3 ~ [g1,g2]@5 ~@3]/2", Y: "[g1,g2]@3 ~ g1 ~ g2@3 ~ g1 ~ g2@4",
  Z: "~@2 g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", AA: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@4 ~@2",
  AB: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", AC: "[c2,c3]@12 ~@2 [c2,c3] ~", AD: "[c2,c3]@5 ~@3 c3@5 ~@3",
})).s("gm_electric_bass_finger").gain(0.27)

// chords · synth strings 1 · "SynStrings"
const synth_strings_1 = note(`<
  A@8 B@6 C@8 D@2 E@4 F@4 G@4 F@4 H@7 I@2 J@3 B@6 K@2 L@8 E@4 F@4 M@4 F@4 N@2 O@7 P@3 B@6 Q@8 R@2 S@2 T@2 U@8 V@16 ~
>`.pickRestart({
  A: "[[c4,e4,g4]@123 ~@5]/8", B: "[g4 ~ [d4,f4], [c4,e4]@2 ~, ~ a4@2]/6",
  C: "[c4@7 [b3,d4]@9 ~@32 [d4,f4]@16, g4 a4, ~ [c4,e4]@2 ~]/8", D: "[c4@14 [b3,d4]@13 ~@5, g4@27 ~@5]/2",
  E: "[[e4,g4]@16 a3@16 [a#3,d4]@6 c4@6 [e4,g4]@15 ~@5, c4@16 ~@3 a4@2 ~@11, ~@4 f4@7 ~@5]/4", F: "[d4,g4,b4]/4",
  G: "[[c4,f4,a4]@3 [e4,g4]@13 [f4,a4]@3 [e4,g4]@13, ~@3 c4@29]/4", // F Em F Em
  H: "[[a3,f4]@3 g3 g4@12 [a3,f4]@3 e4@8 d4@3 [c4,e4,a4]@13 [d4,g4,b4]@3 [c4,f4,a4]@10, c4@27 ~@29, ~@3 e4@13 ~@3 g4@11 ~@26]/7", // Dm Am G F
  I: "[~@3 [c4,e4]@3 d4@10, ~@3 g4@13]/2", J: "[[a3,f4]@6 [g3,e4]@6 [b3,d4,g4]@31 ~@5, c4 ~@3]/3",
  K: "[[c4,f4,g4]@7 [b3,d4,g4]@9]/2", // Csus4 G
  L: "[g4@32 ~@32 d4@32 c4@14 [b3,d4]@13 ~@5, [c4,e4]@32 f4@23 ~@9, ~@32 a4@64 g4@27 ~@5]/8", // Bm C
  M: "[[c4,f4,a4]@3 [e4,g4]@13 [f4,a4]@3 [c4,e4,g4]@13, ~@3 c4@16 ~@13]/4", // F Em F C
  N: "[[a3,c4,f4]@3 g3 g4@12, ~@3 [c4,e4]@13]/2", // F C
  O: "[[a3,f4]@3 g3 ~@7 d4@3 [c4,e4,a4]@13 [d4,g4,b4]@3 [c4,f4,a4]@13 [c4,e4,g4]@3 [d4,g4]@10, c4@11 ~@45, ~@3 e4@8 ~@45, ~@2 g4@5 ~@21]/7", // Dm Am G F C G5
  P: "[[a3,c4,f4]@6 [g3,c4,e4]@6 [b3,d4,g4]@31 ~@5]/3", // F C G
  Q: "[[c4,g4]@7 [b3,d4]@9 ~@32 [d4,f4]@16, ~@7 g4@25 a4@32, ~ [c4,e4]@2 ~]/8", R: "[[c4,g4]@14 [b3,d4,g4]@13 ~@5]/2",
  S: "[[c4,e4], g4@27 ~@5]/2", T: "[[a#3,d4]@16 [a3,c4]@11 ~@5, f4@27 ~@5]/2",
  U: "[g4@32 ~@32 f4@32 g3@14 [g3,b3,d4]@13 ~@5, [c4,e4]@32 d4@23 ~@9, ~@2 a4@4 c4 ~]/8", // G C
  V: "[g4@32 ~@32 f4@32 ~@14 b3@13 ~@5, [c4,e4]@64 d4@59 ~@5, ~@32 a4@64 g3@27 ~@5, ~@6 c4 ~]/8", // C
})).s("gm_synth_strings_1").gain(0.27).pan(0.1)

// drums · kick
const kick = s("bd").struct("<~@7 A B@18 C D A@24 B@18 C D A@24 B@16 E@3 B@25 ~>".pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "x ~ x!2 ~@2 x ~", D: "x ~@2 x ~ x ~@2", E: "x ~@2 x ~@3 x",
})).gain(0.37)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A B@16 C B@3 D B@3 D B@3 E B@3 D B@8 D B@2 D B@7 D B@7 C B@3 D B@3 C B@3 E B@3 C B@11 C B@15 C B@3 D B@7 D B@7 D
  B@8 ~
>`.pickRestart({
  A: "~@7 x", B: "~ x", C: "~@8 x ~@3 x ~ x!2", D: "~@4 x ~@2 x", E: "~@4 x!3 ~",
})).gain(0.37)

// drums · hihat
const hihat = s("hh").struct(`<
  A B A B A B@3 C@19 D C@11 D C@11 E C@19 D C@3 F C@7 F C@11 F C@19 D C@23 D ~
>`.pickRestart({
  A: "x ~@3 x ~@2 x", B: "x!2", C: "x!8", D: "x!7 ~", E: "x!5 ~@3", F: "x!6 ~@2",
})).gain(0.46)

// drums · crash
const crash = s("cr").struct(`<
  ~@7 A@2 ~@15 A ~@3 A ~@3 A ~@3 A ~@3 A ~@8 A ~@2 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@15 A ~@3 A ~@7 A ~@7 A
  ~@8
>`.pickRestart({
  A: "x",
})).gain(0.37)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@28
  [~@2 x ~@2 x!3]!24
  ~@20
  [~@2 x ~@2 x!3]!24
  ~@20
  [~@2 x ~@2 x!3]!23
  [~@2 x ~@2 x!2 ~]
  ~
>`).gain(0.46)

stack(electric_guitar_clean, bass, synth_strings_1, kick, snare, hihat, crash, shaker)

More by REO Speedwagon