Strudelify

Follow That Dream

Elvis Presley

KeyF majorTempo126 bpm
0:00/0:00
// Follow That Dream — Elvis Presley
// 126 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 49 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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 · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B C D E F G H I@2 J@2 K L M@2 N@2 O P Q R S T A B C D E F G H I@2 U@2 K V M@2 W@2 O P Q R S T
>`.pickRestart({
  A: "~@3 g4@2 ~@6 f2, f2@3 f3, ~@2 f3@3 g4@7, ~@6 a4@17 ~, ~@3 c5@3 f3@2 [f4,c5]@4", // F5
  B: "c4 ~@21 bb3@2, [bb2,d4], f4@5 ~@7, ~@2 c4@3 [c4,f4]@4 [c4,f4]@3, ~@3 bb3@5 bb3@3 ~", // Bb F5
  C: "~@4 f3@2 c4@4 f3 ~@7 bb3@3 ~ bb2 ~, f2@5 ~ bb2@3 ~@3, ~@6 [f4,a4]@7 ~@3 [d4,f4,bb4]@6 ~@2", // F Bb
  D: "c4@3 ~@3 a4@2 g4 f4@3, f2@11 ~, [f4,a4]@9 ~ c4@11 ~@3, g2 ~@5 f3@12 ~@6", // F
  E: "~@2 f3 ~@3 a3@2 ~@3 a3, f2, ~@3 [c4,f4]@5 [c4,f4]@4, ~@3 a3@3 ~@2 a3@3 ~, ~@5 f3@4 f3@3", // F5
  F: "[d3,a3]@3 ~@8 a3, [d4,f4]@4 ~ a3@4 d3@3, ~@3 d3@5 f4@3 ~, ~@12 d4@11 ~", // D5 Dm
  G: "a2@3 a3@2 ~ a3 ~@2 a2@3, ~@3 [c4,e4]@3 ~@2 [a3,c4,e4]@2 ~@2, ~@5 a2@3 ~@4", // C Am
  H: "~@8 [bb3,e4]@3 g3, c3@11 ~ c3@6 ~@6, ~@6 [g3,bb3,e4]@8 ~@2 g3@5 ~@3", // Bbdim Edim
  I: "[~@2 f3 c5@3 ~@9 [d4,c5]@2 ~@6 c4, f2, ~@3 a4@6 f3@5 f3@3 f3@4 f3@3, ~@6 g4@3 ~@3 [g4,c5]@9 ~ c5@8 ~@6 c5@12, ~@16 f4@5 ~ eb4@14 c4@10 ~@2]/2", // D7 C5
  J: "[~@4 bb3@2 d4@4 c4@2 bb3@2 ~@2 [bb3,f4]@3 ~@9 bb3@2 c4@3 ~ bb3@2 [bb3,f4]@12, bb2, ~@6 f4@7 ~@17 f4@6 ~@12, ~@6 c4 ~@15 [db4,f4]@8 ~@18]/2", // Bb5 Db
  K: "~@4 f3 ~ a3@3 ~@3 a3 ~@3 [a3,c4]@2 f3@2 ~@2 c4 ~, f2@3 ~, ~@6 [c4,f4]@6 ~@4 f4@5 ~@3, ~@5 f3@3 ~@4", // Am F5
  L: "[bb3,d4]@4 c4@2 ~@4 [c4,f4]@6 bb3 ~ [c4,f4]@6, bb2@19 ~@5, f4@7 ~@17, c4 ~@5 bb3@6 ~@12", // Bb F5
  M: "[~@4 f3@2 ~@4 f3 ~@13 [f2,a3,c4,f4]@6 ~@18, f2@5 ~@3 [bb2,bb3,d4,f4]@4 ~@12, ~@3 [a3,c4,f4]@3 ~@5 f3@4 ~@9]/2", // F Bb F
  N: "[~@3 c4@2 ~@12 d4 ~@3 [bb3,e4]@3, bb2@8 f4@3 f3@7 ~@2 g3@4, ~ f3@3 c4@5 ~@3, ~ d4@3 [bb2,f4]@2 c3@2, ~@3 f4@2 c4 bb3@6 d4@3 bb3@3 ~@6]/2", // Bbdim Bb5
  O: "~@8 [a3,c4,f4]@3 c3, [f2,f3]@7 ~, ~@3 [a3,c4,f4]@5 ~@4, ~@4 c3@3 ~", // F
  P: "[a3,c4,f4]@5 ~@6 f4, [f2,f3], ~@5 f4@4 c4@3, ~@5 c4@3 a3@4, ~@5 a3 c3@6", // F
  Q: "~@2 [a3,d4,f4], [d2,d3], ~@3 [a3,d4,f4]@5 ~@4, ~ a2", // Dm D Dm
  R: "c4 ~@5 bb3@6 c3@5 ~@5 g3@2, [bb2,d4,f4]@2 ~ c3, bb3 ~ [bb3,e4]@2, ~@2 c4@4 g3@5 ~", // Bb Bbdim
  S: "~@3 [a3,c4,f4]@3 ~@5 bb2, f2@6 bb2@5 ~, ~ f3@2 ~ [bb3,d4,f4]@2", T: "[f2,f3,a3,c4,f4]@5 ~@19",
  U: "[~@4 bb3@2 d4@4 c4@2 bb3@2 ~@2 [bb3,f4]@3 ~@9 bb3@2 c4@3 ~ bb3@2 [bb3,f4]@12, bb2@47 ~, ~@6 f4@7 ~@17 f4@6 ~@12, ~@6 c4 ~@15 [db4,f4]@8 ~@18]/2", // Bb5 Db
  V: "[bb3,d4]@4 c4@2 ~@4 [c4,f4]@6 bb3 ~ [c4,f4]@6, bb2@19 ~@5, f4@7 ~@17, c4 ~@5 bb3@7 ~@11", // Bb F5
  W: "[~@3 c4@2 ~@10 bb3@2 d4 ~@3 [bb3,e4]@3, bb2@8 f4@3 f3@7 ~@2 g3@4, ~ f3@3 c4@5 ~@3, ~ d4@3 [bb2,f4]@2 c3@2, ~@3 f4@2 c4 bb3@6 d4@5 ~@7]/2", // Bbdim Bb5
})).s("gm_piano").gain(0.3).pan(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E F G H I J K L J B M N K O I P Q R S N A B C D E F G H I J K L J B M N K R I P Q R S N
>`.pickRestart({
  A: "f1@9 ~ f1@2 c2@12", B: "bb1 d2", C: "f2 bb1", D: "f1@11 ~ c2@12", E: "f1@11 ~ c2@6 f1@5 ~", F: "d2 a2",
  G: "a1@2 e2 a1", H: "c2 bb1 a1 g1", I: "f1 c2", J: "f2 a1", K: "bb1 f1", L: "bb1 db2", M: "f2@12 bb1@11 ~",
  N: "f1 ~@3", O: "bb1@12 c2@11 ~", P: "f1@2 c2 f1", Q: "d2 a1", R: "bb1 c2", S: "f1 bb1",
})).s("gm_acoustic_bass").gain(0.35)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A B C D A E F G H I J K L M N O P Q R S T U V O A B C W A E F G H I J K L M N O P Q R X T Y V O
>`.pickRestart({
  A: "[a3,c4,f4]@4 ~@2 [a3,c4,f4]@4 f3@2 [a3,c4,f4]@5 ~ [a3,c4,f4]@4 c3@2, f3@8 ~@4 c3@9 ~@3", // F
  B: "[bb3,d4,f4]@4 ~@2 [bb3,d4,f4]@4 bb2@2 [bb3,d4,f4]@5 ~ [bb3,d4,f4]@4 ~@2, bb2@3 ~@3 f2@4 ~@2", // Bb
  C: "[a3,c4,f4]@2 ~ [a3,c4,f4]@2 f3 [bb3,d4,f4]@2 ~ [bb3,d4,f4]@2 bb2, f3@2 ~ bb2@2 ~", // F Bb
  D: "[a3,c4,f4]@5 ~ [a3,c4,f4]@4 f3@2 [a3,c4,f4]@4 ~@2 [a3,c4,f4]@4 c3@2, f3@2 ~ c3@2 ~", // F
  E: "[a3,d4,f4]@5 ~ [a3,d4,f4]@4 d3@2 [a3,d4,f4]@5 ~ [a3,d4,f4]@5 ~, d3@8 ~@4 a2@11 ~", // Dm
  F: "[a3,c4,e4]@5 ~ [a3,c4,e4]@4 a2@2 [a3,c4,e4]@5 ~ [a3,c4,e4]@4 e3@2, a2@3 ~@3 e3@4 ~@2", // Am
  G: "[g3,bb3,e4]@5 ~ [g3,bb3,e4]@4 c3@2 [g2,g3,bb3,e4]@4 ~@2 [g3,bb3,e4]@3 ~@3, c3@3 ~@3 c3@2", // Edim
  H: "[a3,c4,eb4,f4]@4 ~@2 [a3,c4,eb4,f4]@4 f3@2 [a3,c4,eb4,f4]@5 ~ [a3,c4,eb4,f4]@4 c3@2, f3@8 ~@4 c3@9 ~@3", // F7
  I: "[a3,c4,eb4,f4]@5 ~ [a3,c4,eb4,f4]@4 f3@2 [c3,a3,c4]@6 [f3,a3,c4,eb4,f4]@4 ~@2, f3@9 ~@3 [eb4,f4]@4 ~@8", // F7 F F7 Ebsus2
  J: "[bb3,d4,f4]@5 ~ [bb3,d4,f4]@4 bb2@2 [bb3,d4,f4]@5 ~ [bb3,d4,f4]@4 f2@2, bb2@8 ~@4 f2@9 ~@3", // Bb
  K: "[bb3,db4,f4]@5 ~ [bb3,db4,f4]@4 bb2@2 [bb3,db4,f4]@5 ~ [bb3,db4,f4]@5 ~, bb2@8 ~@4 f2@11 ~", // Bbm
  L: "[a3,c4,f4]@5 ~ [a3,c4,f4]@4 f3@2 [a3,c4,f4]@5 ~ [a3,c4,f4]@4 ~@2, f3@8 ~@4 c3@9 ~@3", // F
  M: "[bb3,d4,f4]@5 ~ [bb3,d4,f4]@4 bb2@2 [bb3,d4,f4]@5 ~ [bb3,d4,f4]@4 d3@2, bb2@2 ~ d3@2 ~", // Bb
  N: "[a3,c4,f4]@5 ~ [a3,c4,f4]@4 f3@2 [bb3,d4,f4]@5 ~ [bb3,d4,f4]@4 bb2@2, f3@2 ~ bb2@2 ~", O: "[f3,a3,c4,f4] ~@3",
  P: "~ d4@3 ~@2 [f3,bb3,d4]@4 bb2@2 [f3,bb3,d4]@4 ~@2 [f3,bb3,d4]@3 ~ f2@2, bb2 ~ f2 ~, [f3,bb3] ~@5", // Bb Bb5
  Q: "[f3,bb3,d4]@4 ~@2 [f3,bb3,d4]@4 bb2@2 [g3,bb3,e4]@4 ~@2 [g3,bb3,e4]@3 ~ c3@2, bb2 ~ c3 ~", // Bb Edim
  R: "[a3,c4,f4]@2 ~ [a3,c4,f4]@2 f3 [a3,c4,f4]@2 ~ [a3,c4,f4]@2 c3, f3 ~ c3 ~", // F
  S: "[a3,c4,f4]@4 ~@2 [a3,c4,f4]@4 f3@2 [c3,a3,c4]@5 ~ [f3,a3,c4,f4]@5 ~, f3@8 ~@4 f4@3 ~@9", // F
  T: "[a3,d4,f4]@4 ~@2 [a3,d4,f4]@4 d3@2 [a3,d4,f4]@5 ~ [a3,d4,f4]@3 ~ a2 ~, d3@4 ~@2 a2@3 ~@3", // Dm
  U: "[f3,bb3,d4]@4 ~@2 [f3,bb3,d4]@3 ~ bb2@2 [g3,bb3,e4]@4 ~@2 [g3,bb3,e4]@4 c3@2, bb2 ~ c3 ~", // Bb Edim
  V: "[f3,a3,c4]@6 [a3,c4,f4]@3 f3@2 ~ [bb3,d4,f4]@5 ~ [bb3,d4,f4]@4 bb2@2, f4@2 ~@4 bb2@3 ~@3", // F Bb
  W: "[a3,c4,f4]@5 ~ [a3,c4,f4]@4 f3@2 [a3,c4,f4]@4 ~@2 [a3,c4,f4]@4 c3@2, f3@9 ~@3 c3@8 ~@4", // F
  X: "[a3,c4,f4]@4 ~@2 [a3,c4,f4]@4 f3@2 [c3,a3,c4]@5 ~ [f3,a3,c4,f4]@4 ~@2, f3@8 ~@4 f4@3 ~@9", // F
  Y: "[f3,bb3,d4]@4 ~@2 [f3,bb3,d4]@3 ~ bb2@2 [g3,bb3,e4]@5 ~ [g3,bb3,e4]@4 c3@2, bb2 ~ c3 ~", // Bb Edim
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.8)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@2 A ~@12 B ~@4 A ~@2 C ~@2 A ~@12 B ~@4 A ~@2 A ~>".pickRestart({
  A: "~@2 x", B: "~@8 x ~@2 x", C: "~@11 x",
})).gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@7 B ~@15 A ~@7 B ~@6 C ~>".pickRestart({
  A: "~@9 x ~ x", B: "~@8 x!2 ~@2", C: "~@10 x!2",
})).gain(0.35)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A@2 B C A D E F G B G H I B J ~@9 A@2 B C A D E F G B G H I B J ~@9
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@2 x", B: "~@5 x ~@2 x ~@2 x", C: "~ x ~@2 x ~", D: "~@2 x ~@2 x ~@2 x ~@3", E: "~@2 x ~@8 x",
  F: "~@8 x ~@2 x", G: "~@5 x ~@5 x", H: "~@5 x ~@2 x ~@3", I: "~@2 x ~@2 x ~@6", J: "~@2 x",
})).gain(0.25)

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

// drums · crash
const crash = s("cr").struct("<~@16 x!2 ~@3 x!4 ~@15 x!2 ~@3 x!4>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@17 A B@3 A@3 ~@17 A B@3 A@3 ~>".pickRestart({
  A: "~ x!3", B: "x!4",
})).gain(0.45)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@17 A B A@5 ~@17 A B A@5 ~>".pickRestart({
  A: "~@11 x", B: "~@8 x ~@2 x",
})).gain(0.25)

stack(
  piano, bass, acoustic_guitar_steel, kick, snare, snare_soft, low_tom, hihat, hihat_soft, open_hat, crash, ride,
  ride_soft
)

More by Elvis Presley