Strudelify

Open Road

Barlow Gary

KeyC majorTempo90 bpm
0:00/0:00
// Open Road — Barlow Gary
// 90 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): STEELSTRGT.
setcpm(90/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.

// bass · electric bass finger · "FINGERBAS"
const bass = note(`<
  ~@4 A@5 B C B D B C B D B C B D B C B D E F E F G H G I@2 J B C B D B C B D B C B D B C B D E F E F G H G I@2 K L M L
  N O M O P ~@4 E Q E R B C B D B C B D G H G I G H G I@2 J ~@4
>`.pickRestart({
  A: "[~@10 f2 e2 d2@6 g1@8 g1@2 e1@6 f1@8 f2 e2 d2@6 g1@8 c1@2 f1@20]/5", B: "d1@2 d1@2 ~ d1 g1@7 g1 f1 ~",
  C: "e1@3 c1 ~ c1 f1@7 f1 e1 g1", D: "e1@3 c1 ~ c1 f1@6 a1 b1 c2 d2", E: "d1@3 g1@5",
  F: "e1@6 f1@5 e2@2 c2 a1 c2, ~@11 d#2 ~@4", G: "d1@3 d1 ~ d1 g1@3 g1!2 d1 g1 f1 e1 ~",
  H: "e1@2 ~ e1 ~ c1 f1@3 f1!2 c1 f2 d2 c2 ~", I: "e1@2 ~ e1 ~ c1 f1@3 f1!2 c1 f1 e1 d1 ~",
  J: "e1@2 ~ e1 ~ c1 f1@8 ~@2", K: "e1@2 ~ e1 ~ c1 f1@3 f1!2 c1 g1 f1 g1 ~",
  L: "f1 f1@2 f1 ~ d1 g1@3 g1!2 d1 g1 f1 e1 ~", M: "e1 e1@2 e1 ~ c1 f1@3 f1!2 c1 f2 d2 c2 ~",
  N: "e1 e1@2 e1 ~ c1 f1@3 f1!2 c1 f1 e1 d1 ~", O: "d1 d1@2 d1 ~ d1 g1@3 g1!2 d1 g1 f1 e1 ~",
  P: "c1@3 c1 ~ c1 c1@3 c1 c1@2 c1@2 c1@2", Q: "e1@3 f1@5", R: "e1 ~ e1 ~ e1@2 f1@2 f1@2 f1 ~ f1 ~ f1@2",
})).s("gm_electric_bass_finger").gain(0.23)

// bass · electric bass finger · "FINGERBAS" · soft notes
const bass_soft = note(`<
  ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 B C B D@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 B C B D@2 E B C B D B C B ~@9 A ~
  A ~ A ~ A ~ B C B D B C B D@2 ~@2 F@2 ~
>`.pickRestart({
  A: "~@15 e1", B: "~@15 d1", C: "~@15 b1", D: "~@15 c1", E: "~@15 g1", F: "[~ c1@7]/2",
})).s("gm_electric_bass_finger").gain(0.1)

// chords · acoustic guitar steel · "STEELSTRGT"
const acoustic_guitar_steel = note(`<
  A@5 B@2 C ~@17 D ~ D E ~@22 D ~ D E ~@14 F G F G F H I J ~ K ~ K ~ K ~ K ~@14
>`.pickRestart({
  A: "[~@15 [e4,c5]@3 ~@4 [c4,a4]@2 [b3,g4]@2 [a3,f4]@2 ~@3 [d4,g4]@3 ~@13 [e4,c5]@3 ~@8 g4@2 ~@3 g4@3 ~@8 [f4,a4] [e4,g4] ~@3 [a3,a4]]/5", // C F Em Dm G5 C F Em …
  B: "[[d4,f4] [c4,e4] ~@8 [g3,d4]@2 ~@3 [a3,c4,g4]@3 ~@8 [f4,a4] [e4,g4,e5] ~@3 [a3,d4]]/2", C: "f4 e4 ~@8 g4@2 ~@4",
  D: "~@3 [e4,c5]@3 ~@4 [c4,a4]@2 [b3,g4]@2 [a3,f4]@2, ~@3 [f3,a3] ~@12", E: "~@13 [c4,f4]@2 ~",
  F: "[d1,d2,d3,a3,c4,f4]@5 ~ [g1,g2,g3,b3,d4,g4]@9 ~", G: "[e1,e2,e3,g3,b3,e4]@5 ~ [f1,f2,f3,a3,c4,f4]@9 ~",
  H: "[e1,e2,e3,g3,b3,e4,g4]@2 c4 [f1,f2,f3,a4]@5, ~@3 [a3,c4,f4]@4 ~", // Em F
  I: "[d1,d2,d3,a3,c4,f4]@5 ~ [g1,g2,g3,b4]@10, ~@3 [b3,d4,g4]@4 ~", // Dm7 G
  J: "[e1,e2,e3,g3,b3,e4,g4,c5]@2 c4 [f1,f2,f3,a4,c5]@5, ~@3 [a3,c4,f4]@4 ~", K: "b3@3 ~@13",
})).s("gm_acoustic_guitar_steel").gain(0.32).pan(0.3)

// chords · acoustic guitar steel · "STEELSTRGT" · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@3 A@2 ~ B C ~@2 D ~ D ~ D ~ D ~ D ~ D ~ D ~ D E ~ E ~@8 D ~ D ~ D ~ D ~ D ~ D ~ D ~ D E ~ E ~@45
>`.pickRestart({
  A: "[~@10 [g3,d4,g5]@2 ~@3 c4@3 ~@14]/2", B: "~@10 [d4,d5] ~@5", C: "~@12 g4 ~@3", D: "b3@3 ~@13", E: "~@3 d4 ~@12",
})).s("gm_acoustic_guitar_steel").gain(0.2).pan(0.3)

// other · alto sax · "ALTSAX"
const alto_sax = note(`<
  ~@51
  [f4@3 e4@3 d4@6 ~@4]
  [d4@3 c4@2 ~ f4@8 ~@2]
  [f4@3 e4@3 d4@7 ~@3]
  [d4@3 c4@2 ~ f4@5 ~ f4@4]
  ~@44
>`).s("gm_alto_sax").gain(0.3).pan(0.7)

// chords · acoustic guitar steel · "STEEELSTGT"
const acoustic_guitar_steel_3 = note(`<
  A B C B C B C D@2 E F E F E F E F E F E F E F E F G H G H E F E F@2 I E F E F E F E F E F E F E F E F G H G H E F E
  F@2 J K F K F E F E L ~@8 E F E F E F E F E F E F E F E F@2 I ~@4
>`.pickRestart({
  A: "~@3 [a3,d4,f4]", B: "~@2 [g3,b3,d4]@9 ~ [e3,g3,b3,d4]@4", C: "~@2 [f3,a3,c4]@9 ~ [a3,d4,f4]@4",
  D: "[~@2 [g3,b3,d4]@9 ~ [f3,a3,c4]@19 ~]/2", // G F
  E: "[d3,f3,a3,d4]@2 ~ [d3,f3,a3,d4] ~@2 [d3,g3,b3,d4]@3 ~ [g3,b3,d4] ~@2 [g3,b3,d4] ~ [g3,b3,d4]", // Dm G
  F: "[c3,e3,g3,d4]@2 ~ [c3,g3,c4,e4] ~@2 [f3,a3,c4,f4]@3 ~ [a3,c4,f4] ~@2 [a3,c4,f4] ~ [a3,c4,f4]", // C F
  G: "[d3,f3,a3,d4]@5 ~ [d3,g3,b3,d4]@10", H: "[c3,e3,g3,d4]@2 ~ [c3,g3,c4,e4] ~@2 [f3,a3,c4,f4]@10",
  I: "[c3,e3,g3,d4]@2 ~ [c3,g3,c4,e4] ~@2 [f3,a3,c4,f4]@9 ~", // C F
  J: "[c3,e3,g3,d4]@2 ~ [c3,g3,c4,e4] ~@2 [f3,a3,c4,f4]@3 ~ [a3,c4,f4] ~@2 [b3,d4,g4] ~ [b3,d4,g4]", // C F G
  K: "[c3,f3,a3,c4]@2 ~ [c3,f3,a3,c4] ~@2 [d3,g3,b3,d4]@3 ~ [g3,b3,d4] ~@2 [g3,b3,d4] ~ [g3,b3,d4]", // F G
  L: "[c3,g3,c4,f4]@2 ~ [c3,g3,c4,f4] ~@2 [c3,g3,c4,e4]@10", // Csus4 C
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.7)

// chords · acoustic guitar steel · "STEEELSTGT" · soft notes
const acoustic_guitar_steel_4 = note(`<
  ~@9 A B A B A B A B A B A B A B A B ~@4 A B A B@2 ~ A B A B A B A B A B A B A B A B ~@4 A B A B@2 C A B A B A B A ~@9
  A B A B A B A B A B A B A B A B@2 ~@5
>`.pickRestart({
  A: "~@9 [g2,d3,g3] ~@2 [g2,d3,g3] ~ [g2,d3,g3] ~", B: "~@9 [f3,a3,c4] ~@2 [c3,f3,a3] ~ [c3,f3,a3] ~",
  C: "~@9 [f3,a3,c4] ~@2 [d3,g3,b3] ~ [d3,g3,b3] ~", // F G
})).s("gm_acoustic_guitar_steel").gain(0.09).pan(0.7)

// chords · acoustic guitar nylon · "NYLONGITR"
const acoustic_guitar_nylon = note(`<
  ~@9 A B A B A B A C A B A B A B A B ~@4 D@3 E F G A B A B A B A H I B A B A B A B ~@4 D@3 E F J D@3 E F D@3 ~@8 D K@2
  F D K@2 F D K@2 F D K@2 F D G ~@4
>`.pickRestart({
  A: "d4@2 ~ d4 ~@2 d4@4 d4 ~@2 d4 ~@2", B: "d4@3 c4 ~@2 f4@4 [d4,f4]@3 [c4,f4] ~@2, ~@10 c4 ~@5",
  C: "c3!3 [c3,c4] ~ c3!3 ~ c3 [c3,c4] c3!2 [c3,c4,f4] ~@2, d4@3 ~@3 f4@4 [d4,f4]@3 ~@3", // C F5 Dm
  D: "~@2 [g4,c5]!2 ~ c5 ~ c5 ~ [g4,c5] c5 ~@3 [g4,c5] c5", E: "~@2 [g4,c5]!2 ~ c5 ~ c5 g3 a3 ~ c4 ~ d4!2 c4",
  F: "~@3 [g4,c5] ~ c5 ~ c5 g3 a3 c4 [c4,d4] a3 c4@3, d4@3 ~@5", G: "~@2 [g4,c5]!2 ~ c5 ~@10",
  H: "d4@3 c4 ~@2 f4@4 [c4,d4] d4 g4@3 ~, ~@10 f4@3 ~@3", I: "~@3 d4 ~@2 d4@4 d4 ~@2 d4 ~@2",
  J: "~@2 [g4,c5]!2 ~ c5 ~@4 [g4,c5]!2 ~ c5 ~@2", // C5
  K: "[~@2 [g4,c5]!2 ~ c5 ~ c5 g3 a3 ~ c4 ~ d4!2 ~@3 [g4,c5]!2 ~ c5 ~ c5 ~ [g4,c5] c5 ~@3 [g4,c5] c5, ~@15 c4@5 ~@12]/2", // C5
})).s("gm_acoustic_guitar_nylon").gain(0.25).pan(0.7)

// chords · acoustic guitar nylon · "NYLONGITR" · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~@16 A ~@12 B@3 C@2 D ~@20 B@3 C@2 E B@3 C@2 B@3 ~@8 B C B C B C B C B C B C B C B C B D ~@4
>`.pickRestart({
  A: "~@8 c3 ~@5 c3!2", B: "~@5 g4 ~ g4 ~@2 g4 [g4,c5] ~@3 g4", C: "~@5 g4 ~ g4 ~@8", D: "~@5 g4 ~@10",
  E: "~@5 g4 ~@7 g4 ~@2",
})).s("gm_acoustic_guitar_nylon").gain(0.1).pan(0.7)

// chords · synth strings 1 · "SYNSTRING"
const synth_strings_1 = note(`<
  ~@17 A B A B A B A B ~@4 C B C B@2 D ~@8 A B A B A B A B E F E F G H G H@2 I J K L M N O P Q ~@7 R S T U V S T U W X Y
  Z AA AB Y AC AD@2 AE@2 AF@2 ~
>`.pickRestart({
  A: "[a3,c4,f4]@3 [g3,b3,d4]@5", B: "[g3,d4,e4]@3 [a3,c4,f4]@5", C: "[a3,c4,f4]@3 [b3,d4,g4]@5",
  D: "[g3,d4,e4]@6 [a3,c4,f4]@5 [c3,c4] [a2,a3] [g2,g3] [e2,e3] [c2,c3]", E: "[a3,c4,f4]@6 [g3,b3,d4]@7 ~@3",
  F: "[g3,d4,e4]@6 [a3,c4,f4]@7 [c3,c4] [a2,a3] [f2,f3]", G: "[a3,c4,f4,a4,c5]@3 [d4,g4,b4]@3 [c4,f4,a4]@2, ~@3 b3@5",
  H: "[g3,c4,d4,e4,g4]@3 [a3,c4,f4,a4]@5", I: "[g3,c4,d4,e4,g4]@3 [a3,c4,f4,a4]@3 [b3,d4,g4,b4]@2",
  J: "[a3,f4,a4]@6 [d4,g4,b4]@6 [f4,f5] [e4,e5] [d4,d5] [c4,c5], [c4,c5]@2 ~ b3@5, ~@3 g5@2 ~ [c4,a4]@2", // Dm G F E D C F
  K: "[c4,e4,e5]@3 [c4,c5]@2 ~ [a3,c4,f4,a4,c5]@10, [g3,d4,g4]@3 ~@5", // C F G5
  L: "[a3,c4,f4,a4,c5]@6 [d4,g4,b4,g5]@6 [f4,f5] [e4,e5] [d4,d5] [c4,c5], ~@3 b3@5, ~@3 [c4,a4]", // F G F E D C F
  M: "[e4,g4,e5]@3 [g4,g5]@2 ~ [g4,g5]@4 ~ [g5,g6] [f5,f6] [e5,e6] [d5,d6] [c5,c6], [g3,c4,d4]@3 [a3,c4,f4,a4]@5", // Em G F E D C Gsus4 F
  N: "[a3,c4,f4,a4,c5]@6 [d4,g4,b4,g5]@6 [f5,f6] [e5,e6] [d5,d6] [c5,c6], c6@2 ~ b3@5, ~@3 g6@2 ~ [c4,f4,a4]@2", // F G F E D C F
  O: "[e5,e6]@3 [c5,c6]@3 [c5,c6]@5 [g5,g6] [f5,f6] [e5,e6] [d5,d6] [c5,c6], [g3,c4,d4,e4,g4]@3 [a3,c4,f4,a4]@5", // E C G F E D C F
  P: "[c5,e5,e6]@3 [c5,c6]@3 [d4,g4,b4]@6 [c5,c6] [c5,b5,c6] [e5,f5,g5,a5] d5, [a3,c4,f4,a4]@3 b3@5, ~@3 g5@2 ~ [c4,d4,g4]@2", // C G C Cmaj7 Fmaj7 F Csus2
  Q: "f4@5 ~ e4@10, [g3,c4,c5]", R: "[e3,b3,e4,g4,b4]@3 [f3,c4,f4,a4,c5]@5",
  S: "[a3,c4,f4,c5,c6]@3 [d5,d6]@3 [g4,g5]@2, ~@3 [g3,b3,d4]@5", T: "[g3,d4,e4,g5,g6]@3 [a3,c4,f4,a5,a6]@5",
  U: "[a3,c4,f4,a5,a6]@3 [b5,b6]@3 [g5,g6]@2, ~@3 [g3,b3,d4]@5", V: "[g3,d4,e4]@3 [a3,c4,f4]@5, [g6,g7]",
  W: "[g3,d4,e4]@3 ~@2 [a4,a5] [b4,b5] [c5,c6], [g6,g7]@5 ~@3, ~@3 [a3,c4,f4]@5", // Em7 A B C G F
  X: "d6@3 c6@3 b5@4 a5@2 f6 e6 d6 c6, [a3,c4,f4,a4,c5]@3 b3@5, ~@3 [d4,g4,b4]@3 [c4,f4,a4,g5]@2", // F G F
  Y: "[d6,e6] ~@2 c6 ~@2 [a3,c4,f4,a4,a5]@10, [g3,c4,d4,e4,g4]@6 c6@7 ~@3", // Dsus2 F C
  Z: "d6@3 c6@3 [d4,g4,b4,b5]@6 a5@2 g5@2, [a3,c4,f4,a4,c5]@3 b3@5, ~@3 [c4,f4,a4]", // G F
  AA: "[g3,c4,d4,e4,g4,g6]@3 ~@2 a5 b5 c6, ~@3 [a3,c4,f4,a4]@5, ~@3 c6@3 ~@2", // C F
  AB: "d6@3 c6@3 g6@4 a5@2 f6 e6 d6 c6, [a3,c4,f4,a4,c5]@3 b3@5, ~@3 [d4,g4,b4]@3 [c4,f4,a4,g5]@2", // F G F
  AC: "d6@2 ~ c6@3 [d4,g4,b4,b5]@6 [c4,f4,a4,a5]@4, [a3,c4,f4,a4,c5]@3 b3@5", // G F
  AD: "[[g3,c4,d4,e4,g4]@3 [a3,c4,f4,a4,c6]@5 [g3,c4,d4,e4,g4]@3 [a3,c4,f4,a4,c6]@5, g6@31 ~]/2", // C F C F
  AE: "[[g3,c4,d4,e4,g4]@6 [a3,c4]@17 ~@9, g6@5 ~@3, ~@6 [f4,a4]@15 ~@11, ~@6 c6@13 ~@13]/2", // C Am F
  AF: "[~ [c3,e3,g3,c4]@7, ~@4 c2@23 ~@5]/2", // C
})).s("gm_synth_strings_1").gain(0.41)

// chords · rock organ · "ORGAN3" · F G C F G C F
const rock_organ = note(`<
  ~@73
  [[f5,a5,c6]@3 [d5,g5,b5]@5]
  [[e5,g5,c6]@3 [f5,a5,c6]@5]
  [[f5,a5,c6]@3 [d5,g5,b5]@5]
  [[e5,g5,c6]@3 [f5,a5,c6]@5]
  ~@22
>`).s("gm_rock_organ").gain(0.36).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@9 A@16 B@4 A@5 C A@16 B@4 A@13 D E ~@3 E ~@2 F A@17 C ~@4>".pickRestart({
  A: "x ~ x ~@3 x ~@2 x!2 ~@5", B: "x ~@2 x ~@4", C: "x!2 ~ x ~@4", D: "x ~ x ~@3 x ~@2 x!2 ~@3 x ~", E: "x",
  F: "x!2 ~ x ~@2 x ~",
})).gain(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@9 A@16 ~ B ~ B A@5 ~ A@16 ~ B ~ B A@13 ~@9 A@17 ~@5>".pickRestart({
  A: "~@13 x ~ x", B: "~@7 x",
})).gain(0.25)

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

// drums · clap
const clap = s("cp").struct("<~@9 A@16 ~@4 A@5 B A@16 ~@4 A@14 ~@8 A@17 B ~@4>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@4 A B@2 C ~@20 D ~@25 D ~@21 E ~@7 F ~@14>".pickRestart({
  A: "~@3 x", B: "~ x ~@3 x!2 ~", C: "~ x ~@4 x ~", D: "~@12 x ~ x!2", E: "~@11 x ~@2 x!2", F: "~@11 x!2 ~ x!2",
})).gain(0.35)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 A ~@25 A ~@21 B ~@7 B ~@14>".pickRestart({
  A: "~@10 x!2 ~ x ~@2", B: "~@9 x!2 ~ x!2 ~@2",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A@16 ~ B ~ B A@5 C A@16 ~ B ~ B A@14 ~@8 A@17 C ~@4>".pickRestart({
  A: "~@3 x ~@6 x ~@2 x ~@2", B: "~@15 x", C: "~@3 x ~@12",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A B@2 ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A C B ~@3 A ~@3 A ~@3 A ~@3 B
  ~@2 D B ~@2 D B@2 ~@2 B@2 ~ B@3 ~@4
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "x ~@2 x", D: "~@3 x",
// … 63 more lines

More by Barlow Gary