Strudelify

Free Ride

Edgar Winter

KeyD majorTempo125 bpm
0:00/0:00
// Free Ride — Edgar Winter
// 125 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 5/4 at bar 9, 4/4 at bar 11) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 114 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): Guitar Clean.
setcpm(125/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass pick · "Synth Bass 1"
const bass = note(`<
  ~@5 A B ~@2 C D C D C D C D E F E G E H ~ A B A I A I A J C D C D C D C D E F E G E H ~ A B A K C D C D C D C D E F E
  G E L M N M N M N M N M N M N M N M N M N M N M N M N M N M N M N M N M N M N M N M N M N M N M N M N O
>`.pickRestart({
  A: "~@6 a1 ~", B: "~@10 a1 ~ a1@2 ~@2", C: "d2@3 ~ c2 ~ a1@8 ~ e1", D: "f#1 g1 g#1 a1@4 ~",
  E: "f#1 ~ f#1@2 ~@4 g1 ~ g1@2 ~@4", F: "a1 ~ a1@2 ~@12", G: "d2!2 ~@6", H: "d2@3 ~ d2@8 ~@4", I: "~@5 a1!2 ~",
  J: "~@5 a1 ~@2", K: "a1@2 c#2@2 d2@2 e2@2 ~@2 a2 ~ a2 g2 e2 ~", L: "d2@3 ~ d2@8 f#1@2 g1@2",
  M: "a1 g1 a1 ~@2 g1 a1 g1", N: "a1 g1 a1 ~@3 f#1 g1", O: "a1 ~@7",
})).s("gm_electric_bass_pick").gain(0.53)

// bass · fretless bass
const bass_2 = note("<~@17 A B A C A D ~@17 A B A C A D ~@4 E ~@8 A B A C A D ~@49>".pickRestart({
  A: "f#2 ~ f#2 ~@5 g2 ~ g2 ~@5", B: "a2 ~ a2 ~@13", C: "d3 ~ d3 ~@13", D: "[d2,d3]@3 ~ [d2,d3]@8 ~@4",
  E: "a1 c#2 d2 e2 ~@4",
})).s("gm_fretless_bass").gain(0.25)

// bass · electric bass finger · "Picked Bass Pad"
const bass_3 = note("<~@8 A ~@9 B ~ B ~@20 B ~ B ~@6 C ~@9 B ~ B ~@51>".pickRestart({
  A: "~@8 a2 ~ a2 ~ a2 g2 e2 ~", B: "~@7 f#1 a1@2 b1 ~ c#2 b1 a1 ~", C: "~@10 a2 ~ a2 g2 e2 ~",
})).s("gm_electric_bass_finger").gain(0.3)

// bass · synth bass 1 · "Picked Bass Pad"
const bass_4 = note(`<
  ~@64 A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C D
>`.pickRestart({
  A: "~@6 f#1 g1", B: "a1@2 g1@2 a1@2 ~@4 g1 ~ a1@2 g1@2", C: "a1 g1 a1 ~@3 f#1 g1", D: "a1 ~@7",
})).s("gm_synth_bass_1").gain(0.4)

// chords · electric guitar muted · "Mute Guitar"
const electric_guitar_muted = note(`<
  A B C B C B D B E ~@14 F G H G H G H G I ~@14 F J H J I ~@29 F J H J H J H J H J H J H J H J K J L J H J M J H J H J H
  J H J I ~
>`.pickRestart({
  A: "~@6 d3 a3", B: "[a3,d4,a4]@2 ~ [f#4,a4] [e4,g4]@2 [d4,f#4]@2 [a3,d4]!4 d3@2 f#3@2",
  C: "[b3,d4,g4]@2 ~ [d4,g4] [d4,f#4]@2 [a3,c#4,e4]@2 [a3,d4]!4 d3@2 a3@2", // G G5 D A D5
  D: "[b3,d4,g4]@2 ~ [d4,g4] [d4,f#4]@2 [a3,c#4,e4]@2 [a3,d4]!4 ~@2 a3@2", // G G5 D A D5
  E: "[b3,d4,g4]@2 ~ [d4,g4] [d4,f#4]@2 ~ a2@2 ~@7, ~@3 [a3,c#4,e4] ~@4", F: "~@14 [a3,c#4,e4] ~",
  G: "[a3,c#4,a4]@3 ~ [b3,e4,g4] ~ [d3,d4,f#4]@2 ~@2 [a3,d4]!3 ~ [d3,f#3,d4]@2", // A Em D D5 D
  H: "[g3,b3,g4]@3 ~ [a3,d4,f#4]@2 [a3,c#4,e4]@2 ~@6 [a3,c#4,e4] ~", // G D A
  I: "[g3,b3,g4]@3 ~ [a3,d4,f#4]@2 [a3,c#4,e4]@2 ~@8", // G D A
  J: "[a3,c#4,a4]@3 ~ [b3,e4,g4] ~ [d3,d4,f#4]@2 ~@6 [d3,f#3,d4]@2", // A Em D
  K: "[g3,b3,g4]@3 ~ [a3,d4,f#4]@2 ~ e4@2 ~@5 [a3,c#4,e4] ~, ~@3 [a2,a3,c#4] ~@4", // G D A
  L: "[g3,b3,g4]@3 ~ [a3,d4,f#4]@2 [a3,e4]@2 ~@6 [a3,c#4,e4] ~", // G D A5 A
  M: "[g3,b3,g4]@3 ~ [a3,d4,f#4]@2 [c#4,e4]@2 ~@6 [a3,c#4,e4] ~", // G D C#m A
})).s("gm_electric_guitar_muted").gain(0.48)

// other · fretless bass · "Octave Guitar" · A
const fretless_bass = note(`<
  ~@5
  [[a4,a5] ~ [a4,a5]!2 ~@4]!4
  ~@15
  [[a4,a5] ~ [a4,a5]!2 ~@4]!8
  ~@15
  [[a4,a5] ~ [a4,a5]!2 ~@4]!3
  ~@64
>`).s("gm_lead_8_bass_lead").gain(0.24)

// other · lead 2 sawtooth · "Octave Guitar" · Em
const lead_2_sawtooth = note("<~@59 [a4 c5] d5 [a4 c5] d5 [a4 c5] [[e4,g4]@3 ~ [e4,g4]@7 ~@5] ~@49>")
  .s("gm_lead_2_sawtooth").gain(0.35)

// chords · electric guitar clean · "Guitar Clean"
const electric_guitar_clean = note("<~@8 [~@7 e4@2 ~@7] ~@89 [~@3 c#4 ~@4] ~@3 [~@3 a3 ~@4] ~@11>")
  .s("gm_electric_guitar_clean").gain(0.32)

// bass · drawbar organ · "Kick"
const bass_5 = note(`<
  ~@5 A B ~@2 C@8 D E D E D F ~ A G A G A G A ~ C@8 D E D E D F ~ A G A ~ C@8 D E D E D F C@24 F H@23 C
>`.pickRestart({
  A: "~@12 c2 ~@3", B: "~@11 c2!2 ~@3", C: "c2 ~@15", D: "c2 ~ c2 ~@5 c2 ~ c2 ~@5", E: "c2 ~ c2 ~@13",
  F: "c2 ~@3 c2 ~@11", G: "~@10 c2 ~ c2 ~@3", H: "c2 ~@3 c2 ~@7 c2 ~@3",
})).s("gm_drawbar_organ").gain(0.56)

// drums · rim
const rim = s("rim").struct("<~@69 [x!4]!44 ~>").gain(0.4)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@9 A@3 B A@4 ~@15 A@3 B A@4 ~@11 A@3 B A@4 ~@55>".pickRestart({
  A: "x", B: "~@8 x!4 ~@4",
})).gain(0.08)

// drums · clap
const clap = s("cp").struct("<~@72 A B@8 ~@8 B@3 ~ B@7 ~ B@7 ~ B@4 C>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct("<~@16 A ~@22 A ~@18 A ~@33 A ~@7 A ~@7 A ~@5>".pickRestart({
  A: "~@14 x!2",
})).gain(0.56)

// drums · pedal hat
const pedal_hat = s("hh").struct("<A ~@4 B@3 ~ A@15 B@7 A@16 B@3 A@30 C ~@8 D@24 ~>".pickRestart({
  A: "x!4", B: "~@3 x", C: "~ x!3", D: "~ x ~ x",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 A ~@22 A ~@18 A ~@33 A ~@7 A ~@7 A ~@5>".pickRestart({
  A: "~@11 x ~ x ~@2",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@5 A@3 ~ B@9 ~@6 A@3 ~ A ~ A ~ B@9 ~@6 A@3 ~ B@9 ~@54>".pickRestart({
  A: "~@11 x ~@4", B: "~@15 x",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<~@16 A ~@22 A ~@18 A ~@33 B ~@7 B ~@7 B ~@5>".pickRestart({
  A: "~@9 x!2 ~@5", B: "~@8 x!3 ~@5",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@3 A ~@3 B@6 ~@9 A ~@3 A ~@3 B@6 ~@5 A ~@3 A ~@3 B@6 ~@3 C ~@3 C ~@3 C ~@4 A ~@32
>`.pickRestart({
  A: "x", B: "~ x ~ x", C: "~@3 x",
})).gain(0.4)

// drums · ride bell
const ride_bell = s("rd").struct("<~@17 A@5 B ~@17 A@5 B ~@13 A@5 B ~@49>".pickRestart({
  A: "x!4", B: "x!2 ~@2",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~ A@4 B@4 C@8 D@5 E ~ B@7 F C@8 D@5 E ~ B@3 ~ C@8 D@5 E ~@20 D@4 B@24 A
>`.pickRestart({
  A: "x", B: "x!16", C: "x!4", D: "~ x ~ x", E: "x!2 ~@2", F: "x!12 ~@4",
})).gain(0.4)

// drums · cowbell
const cowbell = s("cb").struct("<~@81 [x!4]!32 ~>").gain(0.4)

stack(
  bass, bass_2, bass_3, bass_4, electric_guitar_muted, fretless_bass, lead_2_sawtooth, electric_guitar_clean, bass_5,
  rim, snare, snare_soft, clap, low_tom, pedal_hat, mid_tom, open_hat, high_tom, crash, ride_bell, tambourine, cowbell
)

More by Edgar Winter