Strudelify

Show Me the Way

Peter Frampton

KeyC majorTempo134 bpm
0:00/0:00
// Show Me the Way — Peter Frampton
// 134 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 147 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 program 27, guitar program 25.
setcpm(134/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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D A B C D A B C D A B C D A@4 C@2 E D A@4 C@2 E@2 F@2 G H I@2 J K I@2 L@2 A B C D A@4 C@2 E D A@4 C@2 E@2 F@2 G
  H I@2 J K I@2 J K I@2 L@2 A@4 C@2 E D A@4 C@2 M@2 A@4 C@2 E@2 F@2 G H I@2 J K I@2 J K I@2 J N@3 L@2 A B C O I@2 J K
  I@2 J K I@2 L@2 A B C P Q@3
>`.pickRestart({
  A: "[e3,g3,c4]@3 [e3,g3,c4]@2 [e3,g3,c4] [e3,g3,c4]@2, c3@5 c3@3", // C
  B: "[e3,g3,b3]@3 [e3,g3,b3]@2 [e3,g3,b3] [e3,g3,b3]@2, c3@5 c3@3", // Em
  C: "[c3,e3,a3]@3 [c3,e3,a3]@2 [c3,e3,a3] [c3,e3,a3]@2, a2@5 a2@3", // Am
  D: "~@2 [g#2,c3,d#3,g#3,c4] ~ [g#2,c3,d#3,g#3,c4]@6 [g#2,c3,d#3,g#3,c4] ~ [a#2,d3,f3,a#3]@4", // G# A#
  E: "[c3,d#3,g#3]@3 [c3,d#3,g#3]@2 [c3,d#3,g#3] [c3,d#3,g#3]@2, g#2@5 g#2@3", // G#
  F: "[b3,d4,g4]@3 [b3,d4,g4]@2 [b3,d4,g4] [b3,d4,g4]@2, g3@5 g3@3", // G
  G: "[a3,c4,f4]@3 [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@2, f3@5 f3@3", // F
  H: "[a3,c4,f4]@3 [a3,c4,f4] [e2,e3,g3,b3] [g2,g3,b3,d4]@3, f3@5 ~@3", // F Em G
  I: "[[e3,a3,c4]@3 ~ [e3,a3,c4]@4 [e3,a3,c4]@2 [e3,a3,c4]@4 [e3,a3,c4]@2 [e3,a3,c4]@3 ~ [e3,a3,c4]@4 [e3,a3,c4]@2 ~@4 a2@2, a2@7 ~ a2@5 ~ a2@9 ~ a2@5 ~@3, ~@13 [e3,a3,c4]@3]/2", // Am
  J: "[c3,a3,c4]@3 ~ [c3,a3,c4]@4 [c3,a3,c4]@2 [c3,a3,c4]@6, f2@3 ~ f2@3 ~", // F
  K: "[f2,c3,a3,c4]@4 [e2,e3,g3,b3] [g2,g3,b3,d4]@3", // F Em G
  L: "[[c3,a3,c4]@3 ~ [c3,a3,c4]@4 [c3,a3,c4]@2 ~@6 [g2,d3,g3,b3,d4]@16, f2@3 ~ f2@3 ~@9, ~@5 [c3,a3,c4]@4 ~@7]/2", // F G F
  M: "[[f3,a3,c4]@3 ~ [f3,a3,c4]@2 [f3,a3,c4]@3 ~ [f3,a3,c4]@2 [f3,a3,c4]@3 ~ [f3,a3,c4]@3 ~ [f3,a3,c4]@2 [f2,f3,a3,c4]@4 [f3,a3,c4]@2 [f2,f3,a3,c4]@3 ~, f2@4 ~@2 f2@4 ~@2 f2@9 ~@11]/2", // F
  N: "[[c3,a3,c4]@3 ~ [c3,a3,c4]@4 [c3,a3,c4]@2 [a3,c4]@6 [e3,a3,c4]@3 ~ [e3,a3,c4]@4 [e3,a3,c4]@2 [e3,a3,c4]@4 [e3,a3,c4]@2 [e3,a3,c4]@3 ~ [e3,a3,c4]@4 [e3,a3,c4]@2 ~@4 a2@2, f2@6 ~@2 f2@6 ~@2 a2@7 ~ a2@5 ~ a2@9 ~ a2@5 ~@3, ~@5 c3@4 ~@12 [e3,a3,c4]@3]/3", // F Am
  O: "[f2,c3,f3,a3,c4]", // F
  P: "~@2 [g#2,c3,d#3,g#3,c4]@2 ~ [c3,d#3,g#3,c4]@4 ~ [d#3,g#3,c4]@2 ~ [g#2,c3,d#3,g#3,c4]@2 ~, ~@4 g#2@5 c3@3 ~@4", // G#
  Q: "[[a#2,d3,f3,a#3]@8 [c3,e3,g3,c4]@31 ~@9]/3", // A# C
})).s("gm_acoustic_guitar_steel").gain(0.22).pan(0.7)

// bass · electric bass finger
const bass = note(`<
  ~@4 A@2 B C D E F G D E F G D@4 H I J G D@4 H I J@2 K L M@2 N O P Q N O R S T E F G D@4 H I J G D@4 H I J@2 K L M@2 N
  O P Q N O P Q N O R S D@4 H I J G D@4 H I U V D@4 H I J@2 K L M@2 N O P Q N O P Q N O W X N O R S Y@3 Z N O P Q N O P
  Q N O R S D E F AA AB@3
>`.pickRestart({
  A: "c2@15 ~", B: "a1", C: "~@2 g#1 ~ g#1@4 ~@2 g#1@2 a#1@3 ~", D: "c2@5 ~ c2@2 g2@5 ~ g2@2",
  E: "c2@5 ~ c2@2 g2@6 g2 ~", F: "a2@5 ~ a2@2 e2@7 ~", G: "~@2 g#1 ~ g#1@4 ~@2 g#1@2 a#1@4",
  H: "a1@5 ~ a1@2 e2@5 ~ e2@2", I: "a1@5 ~ a1@2 e2@5 ~ a1@2", J: "g#1@5 ~ g#1@2 d#2@5 ~ d#2@2", K: "g1@3 d2 g2@3 d2",
  L: "g1@3 d2 g2@4", M: "[f2@2 d2 c2@3 d2 f2@5 e1 g1@3]/2", N: "a1@2 ~@2 a1@3 g1 e1 ~ e1@2 g1@2 g#1@2",
  O: "a1@7 ~ a1@2 g1@4 a1@2", P: "f1@4 a1 c2@2 d2", Q: "f2@4 e1 g1@2 g#1", R: "f1@4 ~ e1 f1 f#1", S: "g1",
  T: "c2@5 ~ c2@2 g2@6 g2@2", U: "f1@3 c2 f2@3 c2", V: "f1 a1 a#1 b1", W: "f1@7 ~ a1@3 ~ c2@3 ~, ~@8 f1 ~@7",
  X: "f2@3 f1 e2@3 e1 d2@3 d1 c2@4", Y: "[c2@23 ~]/3", Z: "f1", AA: "~@2 g#1 ~ g#1@4 ~ g#1@3 ~ g#1@2 ~",
  AB: "[a#1@6 ~@2 c2@31 ~@9]/3",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@18 A@2 ~@6 A@2 ~@9 B C D ~ B C ~@7 A@2 ~@6 A@2 ~@9 B C D ~ B C D ~ B C ~@3 A@2 ~@6 A@2 ~@2 E ~@3 A@2 ~@9 B C D ~ B C
  D ~ B C@2 ~ B C ~ F G ~@3 B C D ~ B C D ~ B C ~@4 H ~@3
>`.pickRestart({
  A: "b3@3 b3@2 ~ b3@2", B: "~@7 [e3,c4]", C: "~@2 f3@2 ~ f3@2 [f2,c3,f3,a3]",
  D: "~@2 [f2,c3,f3,a3] ~ [c3,f3,a3]@2 [c3,f3,a3]@2 ~@8", E: "~@7 [c3,f3,a3]", F: "~@10 f4 c3 ~@4", G: "~@10 f4 b2 ~@4",
  H: "~@4 c4@7 ~@5",
})).s("gm_electric_guitar_clean").gain(0.17).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel_2 = note(`<
  ~@36 A B C@2 A B D ~@25 A B C@2 A B C@2 A B D ~@29 A B C@2 A B C@2 A B D@2 A B D ~@5 A B C@2 A B C@2 A B D ~@8
>`.pickRestart({
  A: "~@2 [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~@3 a2@2 ~@2", B: "~@2 [a3,c4,e4]@3 ~ [a3,c4,e4]@3 ~@3 a2@2 [c4,e4]@2",
  C: "[~@4 f3@3 ~@3 f3@4 ~@6 [f3,a3,c4]@4 ~@8, ~@7 f2@6 ~ f2@8 ~@10]/2", D: "~@4 f3@3 ~@3 f3@4 f2@2, ~@7 f2@6 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.09)

// chords · percussive organ
const percussive_organ = note(`<
  ~@16 A@4 B@2 C D A@4 B@2 E@2 F@2 G@2 H@2 I@2 H@2 J K ~@4 A@4 B@2 C D A@4 B@2 E@2 F@2 G@2 H@2 I@2 H@2 I@2 H@2 J K A@4
  B@2 C D A@4 B@2 ~@2 A@4 B@2 E@2 F@2 G@2 H@2 I@2 H@2 I@2 H@2 J L H@2 J K ~@4 H@2 I@2 H@2 I@2 H@2 J K ~@7
>`.pickRestart({
  A: "[c5 b4, [e4,g4]]/4", B: "[e4,a4,c5]/2", C: "[d#4,g#4,c5]",
  D: "~@2 [d#4,g#4,c5] ~ [d#4,g#4,c5]@4 ~@2 [d#4,g#4,c5] ~ [f4,a#4,d5]@3 ~", E: "[d#4,g#4,c5]/2", F: "[g4,b4,d5]/2",
  G: "[[a4,c5,f5]@12 [e4,g4,b4] [g4,b4,d5]@3]/2", H: "[c4,e4,a4]/2",
  I: "[[c4,f4,a4]@24 [e4,g4]@2 [d4,g4]@5 ~, ~@24 b4@7 ~]/2", J: "[c4,f4,a4]", K: "[d4,g4,b4]", L: "[f4,a4,c5]",
})).s("gm_percussive_organ").gain(0.06).pan(0.8)

// chords · harpsichord
const harpsichord = note(`<
  ~@35 A B C D A B C D ~@24 A B C D A B C D A B E F ~@28 A B C D A B C D A B E F A B E F ~@4 A B C D A B C D A B E F ~@8
>`.pickRestart({
  A: "~@4 [a3,e4] [b3,g4]@3", B: "[c4,a4]@3 [b3,g4] [a3,e4]@4", C: "~@4 [c4,a4] [b3,g4]@2 [c4,a4]", D: "[a3,f4]@5 ~@11",
  E: "~@4 [c4,a4] [b3,g4]@2 [a3,f4]", F: "[c4,a4] [a3,f4]",
})).s("gm_harpsichord").gain(0.36)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@3 B C D E F E D E F E D E D E D E F E D E D E D E@5 ~ G@3 A G@3 A C D E F E D E D E D E F E D E D E D E@5 ~ G@5
  H G I G J G ~ E D E D E D E F E D E D E D E@3 D E D E D E@5 ~ G@5 H G I G J G ~ G J G K ~@3 A G@5 H G I G J G ~ C D L
  M E ~@2
>`.pickRestart({
  A: "x", B: "~ x!2 ~@5", C: "x!3 ~", D: "x ~@3 x!2 ~@2", E: "x!2", F: "x!3 ~@2 x ~ x", G: "x ~@3 x!2 ~ x",
  H: "x ~ x!2", I: "x!4", J: "x ~@2 x ~ x ~ x", K: "x!2 ~ x ~@4", L: "x ~@7 x ~ x!2 ~@4",
  M: "~@2 x ~ x ~@4 x ~@3 x ~@2",
})).gain(0.35)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@71 A ~ B ~ C ~@35 A ~ B ~ C ~@15 A ~ B ~ C ~@11>".pickRestart({
  A: "~@2 x!2 ~@2 x ~@9", B: "~@10 x!2 ~@2 x!2", C: "~ x ~@6",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@27 B ~@31 B ~@11 C ~@27 B ~@11 C ~@19 C ~@7>".pickRestart({
  A: "x", B: "~@4 x!2 ~@2", C: "~@11 x!2 ~@3",
})).gain(0.3)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<A B C@2 D ~@27 E@3 ~@29 E@3 ~@37 E@3 ~@40>".pickRestart({
  A: "~ x ~ x", B: "x!3 ~", C: "x!4", D: "~ x ~@2", E: "~@2 x ~@3 x!2 ~@2 x!2 ~@2 x ~",
})).gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@7 A ~@3 B ~@3 B ~@7 B ~@7 C ~@3 D ~ C ~@3 C ~ E ~@3 B ~@7 B ~@7 C ~@3 D ~ C ~@5 F ~@3 G ~@7 B ~@7 C ~@7 C ~@3 D ~ C
  ~@5 F ~@3 G ~@3 C ~@5 C ~@5 F ~@3 G ~@7
>`.pickRestart({
  A: "~@13 x!2 ~", B: "x", C: "~@7 x", D: "~@4 x ~@2 x ~@8", E: "~ x ~@2", F: "~@3 x ~@9 x!2 ~", G: "~@3 x ~@5 x!2 ~@5",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@11 A ~@3 A ~@7 A ~@23 A ~@7 A ~@31 A ~@35 B ~ C ~@17 A ~@3>".pickRestart({
  A: "~ x!2 ~@5", B: "x", C: "~@5 x ~ x",
})).gain(0.35)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@7 A ~@2 B ~@3 B ~@7 B ~@8 C ~@3 D ~@7 E ~@2 B ~@7 B ~@8 C ~@3 D ~@7 F ~@3 G ~@6 B ~@8 C ~@7 C ~@3 D ~@7 F ~@3 G ~@3
  H ~@11 F ~@3 G ~@7
>`.pickRestart({
  A: "~@5 x!2 ~", B: "~@15 x", C: "~@8 x ~ x!3 ~@3", D: "x ~@2 x ~@12", E: "x!2 ~@2 x ~@11",
  F: "x!2 ~@2 x ~@3 x ~ x ~ x ~@3", G: "x!2 ~@2 x ~ x ~ x ~@7", H: "~@10 x ~ x!2 ~@2",
})).gain(0.35)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A@3 B A ~@3 A ~@3 A ~@7 A ~@11 A ~@3 A ~@3 A ~@3 A ~@7 A ~@11 A ~@2 C A ~@3 A ~ A ~ A ~@7 A ~@7 A ~@11 A ~@2 C A
  ~@3 A ~ A ~ A ~ A D A ~@2 A@2 ~@2 C A ~@3 A ~ A ~ A ~@2 E F ~@2
>`.pickRestart({
  A: "x", B: "x!3 ~", C: "~@5 x!2 ~", D: "~ x ~@2", E: "~@2 x ~ x ~@4 x ~@3 x ~@2", F: "x!2",
})).gain(0.25)

// drums · ride
const ride = s("rd").struct(`<
  ~@36 A B@2 C A B@2 D ~@24 A B@2 D A E B ~ A C B C ~@28 A B@2 D A E B ~ A C B C A C B ~@5 A B@2 D A E B ~ A C B C B@3
  ~@4
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!2 ~@2", D: "x", E: "x!3 ~",
})).gain(0.4)

stack(
  acoustic_guitar_steel, bass, electric_guitar_clean, acoustic_guitar_steel_2, percussive_organ, harpsichord, kick,
  snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom, open_hat, high_tom, crash, ride
)

More by Peter Frampton