Strudelify

G.I. Blues

Elvis Presley

KeyF majorTempo144 bpm
0:00/0:00
// G.I. Blues — Elvis Presley
// 144 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 105 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(144/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@2 B@2 C@2 D@2 E F G@2 H I ~@2 J K ~@2 L M N O A@2 P@2 C@2 D@2 E F G@2 ~@12 A@2 P@2 C@2 D@2 E F G@2 H I ~@2 J K ~@2
  L M N O Q@2 P@2 C@2 D@2 E F G@2 H I ~@2 J K ~@2 L R S T ~@8
>`.pickRestart({
  A: "[[f2,f3,a3,c4,f4]@47 ~]/2", B: "[~@12 eb4@11 ~, f2@47 ~, c4@15 ~, f4 ~, ~ [f3,a3]@46 ~]/2",
  C: "[[bb2,f3,bb3,d4]@47 ~]/2", D: "[[a3,c4,f4]@15 ~, [f2,f3]@47 ~]/2", E: "[c3,g3,bb3,e4]", F: "[bb2,f3,ab3,d4]@11 ~",
  G: "[[f2,f3,a3,c4,f4]@3 ~]/2", H: "~@4 [a3,c4,d4,f4] ~@7 [a3,c4,d4,f4]@3 ~ [a3,c4,d4,f4] ~@7",
  I: "[a3,c4,d4,f4] ~@9 [a3,c4,d4,f4] ~@13", J: "~@4 [f3,bb3,d4] ~@7 [f3,bb3,d4] ~@11",
  K: "[f3,bb3,d4]@3 ~ [f3,bb3,d4] ~@5 [f3,bb3,d4] ~@13", L: "[g3,bb3,c4,e4] ~@7", M: "[f3,ab3,c4,d4]@11 ~",
  N: "~@4 [a3,c4,d4,f4] ~@11 [ab3,c4,d4,f4] ~@7", O: "~@4 [bb3,d4,e4,g4] ~@19",
  P: "[~@12 eb4@11 ~, f2@47 ~, [a3,c4]@15 ~, f4 ~, ~ f3@46 ~]/2", Q: "[~ f4@46 ~, [f2,f3,a3,c4]@47 ~]/2",
  R: "[f3,ab3,d4]@23 ~", S: "~@2 [a3,c4,f4]@3 ~ [ab3,d4] ~@2 [ab3,d4,f4] ~@2, ~@12 f4 ~@11", T: "[a3,c4,f4]@5 ~@3",
})).s("gm_piano").gain(0.45).pan(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A@2 B@2 C@2 D@2 E F G@2 H I J K L M N O P Q R S A@2 B@2 C@2 D@2 E F G@2 H I J K L M N O T Q R S A@2 B@2 C@2 D@2 E F
  G@2 H I J U L M J O P Q R S A@2 B@2 C@2 D@2 E F G@2 V I J K L M J O P W X Y ~@8
>`.pickRestart({
  A: "[f1@23 ~]/2", B: "[f1@47 ~]/2", C: "[bb1@47 ~]/2", D: "[f1@43 ~@5]/2", E: "c2@23 ~", F: "bb1",
  G: "[f1@35 ~@13]/2", H: "f1@5 ~ a1@5 ~ c2@6 d2@4 c2@2", I: "f2 d2 c2 a1", J: "f1@6 a1@5 ~ c2@5 ~ d2@4 c2@2",
  K: "f2 eb2 d2 c2", L: "bb1@3 d2@3 f2@3 g2@2 f2", M: "bb1 d2 f2 d2", N: "f1@6 a1@5 ~ c2@6 d2@4 c2@2", O: "f2 a1 c2 d2",
  P: "c2@5 ~@19", Q: "bb1@5 ~ d2@6 f2@6 d2@5 ~", R: "f1@5 ~ a1@5 ~ bb1@5 ~ b1@5 ~",
  S: "c2@3 ~ c2@2 d2@5 ~ eb2@4 e2@7 ~", T: "c2 ~@3", U: "f2@6 eb2@6 d2@5 ~ c2@6", V: "f1@5 ~ a1@5 ~ c2@5 ~ d2@4 c2@2",
  W: "bb1@5 ~ d2@6 f2@6 d2@6", X: "f1@5 ~ a1@5 ~ bb1@6 d2@6", Y: "f1@2 ~",
})).s("gm_acoustic_bass").gain(0.35)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@37 A@2 B C D E F B G H I J ~@12 A@2 B C K E F B G H I J ~@12 A@2 B C K E F B G L M N@8 ~
>`.pickRestart({
  A: "[[a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~ [c4,f4]@2 ~ [a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~, ~@11 a3@3 ~@10]/2", // F F5 F
  B: "[a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~", // F
  C: "[a3,c4,eb4]@4 ~@2 [a3,c4,eb4]@4 ~@2 [a3,c4,eb4]@4 ~@2 [a3,c4,eb4]@3 ~@3", // Adim
  D: "[f3,bb3,d4]@3 ~@3 [f3,bb3,d4]@3 ~@3 [f3,bb3,d4]@4 ~@2 [f3,bb3,d4]@3 ~@3", // Bb
  E: "[f3,bb3,d4]@4 ~@2 [f3,bb3,d4]@4 ~@2 [f3,bb3,d4]@4 ~@2 [f3,bb3,d4]@3 ~@3", // Bb
  F: "[a3,c4,f4]@4 ~@2 [a3,c4,f4]@4 ~@2 [a3,c4,f4]@4 ~@3 [a3,f4]@3 ~@2, ~@9 c4@2 ~", G: "[g3,bb3,e4] ~@5",
  H: "[f3,ab3,d4]@4 ~@2 [f3,ab3,d4]@4 ~@2 [f3,ab3,d4]@4 ~@2 [f3,ab3,d4]@3 ~@3", // Ddim
  I: "[a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~ [f3,ab3,d4]@2 ~ [f3,ab3,d4]@2 ~", J: "[g3,bb3,e4]",
  K: "[f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~", // Bb
  L: "[f3,ab3,d4]@5 ~ [ab3,d4]@4 ~@2 [ab3,d4]@4 ~@2 [f3,ab3,d4]@4 ~@2, ~@6 f3@2 ~@2 f3@7 ~@7", // Ddim Abdim Ddim
  M: "~@5 [a3,c4,f4]@4 ~@3 [ab3,d4,f4]@2 ~@4 [ab3,d4,f4]@2 ~@4", N: "[[c4,f4], a3 ~@11]/8",
})).s("gm_acoustic_guitar_steel").gain(0.16).pan(0.8)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  A B C D E F G H I J K L ~@3 M N ~@2 O P Q R S T U V S W X Y Z AA AB AC AD ~@3 M N ~@2 O P Q AE S T U V S W X Y Z AA AB
  AC S ~@3 M N ~@2 O P Q AE S T AF C D E F G H I J K D ~@3 M N ~@2 O P Q AE AG ~@9
>`.pickRestart({
  A: "~@11 c4", B: "f4@4 ~@2 a4@3 ~ c4 ~ f4@5 ~ a4@3 ~ c4 ~", C: "f4@4 ~@2 a4@3 ~ c4 ~ f4@3 ~ a4@6 c4 ~", D: "f4",
  E: "~@22 f4 ~", F: "bb4@5 ~ d5@3 ~ f4 ~ bb4@4 ~@2 d5@3 ~ f4 ~", G: "bb4@4 ~@2 d5@3 ~ f4 ~ bb4@3 ~ d5@5 ~ f4 ~",
  H: "a4", I: "~@16 c5 ~ d5@4 c5 ~", J: "e5@3 ~ e5 ~ e5@5 ~ e5@4 ~@2 e5@5 ~",
  K: "d5@4 ~@2 d5@4 ~@2 f4@2 ~@2 f4 ~ f4@5 ~", L: "f4@23 ~",
  M: "~@2 [f3,a3] ~@3 [f3,a3] ~@5, ~@4 [c4,d4] ~@7 [c4,d4] ~@11", N: "[f3,a3,c4,d4]@9 ~ [f3,a3,c4,d4]@2 ~@12",
  O: "~@4 [f3,a3,c4,d4] ~@7 [f3,a3,c4,d4] ~@11", // Dm7
  P: "[f3,a3,c4,d4]@4 ~@2 [eb3,e3,ab3,b3,db4]@3 ~ [f3,a3]@2 ~@4 c4 ~ d4@4 c4 ~, ~@10 [c4,d4] ~@13", // Dm7 Dbm7 F Csus2
  Q: "g4@5 ~ e4@5 ~ c4@5 ~ d4@4 c4 ~", R: "f4@3 ~ f3@2 g3@4 f3 ~ ab3@5 ~ ab3@5 ~", S: "f3", T: "~@11 c5",
  U: "f3@4 ~@2 a3@3 ~ c3 ~ f3@5 ~ a3@3 ~ c3 ~", V: "f3@4 ~@2 a3@3 ~ c3 ~ f3@3 ~ a3@6 c3 ~", W: "~@22 f3 ~",
  X: "bb3@5 ~ d4@3 ~ f3 ~ bb3@4 ~@2 d4@3 ~ f3 ~", Y: "bb3@4 ~@2 d4@3 ~ f3 ~ bb3@3 ~ d4@5 ~ f3 ~", Z: "a3",
  AA: "~@16 c4 ~ d4@4 c4 ~", AB: "e4@3 ~ e4 ~ e4@5 ~ e4@4 ~@2 e4@5 ~", AC: "d4@4 ~@2 d4@4 ~@2 f3@2 ~@2 f3 ~ f3@5 ~",
  AD: "f3@23 ~", AE: "f4@2 ~@2 f3@2 g3@3 ~ f3 ~ ab3@5 ~ ab3@5 ~", AF: "f4@4 ~@2 a4@3 ~ c4 ~ f4@4 ~@2 a4@3 ~ c4 ~",
  AG: "f3@3 ~",
})).s("gm_brass_section").gain(0.5)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A ~@3 A ~ A ~@2 B@11 C ~@3 A ~@3 A ~ A ~@2 B@11 C ~@3 A ~@3 A ~ A ~@2 B@11 C ~@3 A ~@3 A ~ A ~@2 B@11 C ~@8
>`.pickRestart({
  A: "~@8 x!2 ~@2", B: "x!2", C: "x ~ x",
})).gain(0.5)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~ A B ~ C ~ C ~ C ~ C ~@14 A B ~ C ~ C ~ C ~ C ~@14 A B ~ C ~ C ~ C ~ C ~@14 A B ~ C ~ C ~ C ~ C ~@22
>`.pickRestart({
  A: "~@2 x", B: "~ x!2 ~ x ~@7", C: "~ x ~@2 x ~@7",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A ~@3 A ~ A ~ B ~@15 A ~@3 A ~ A ~ B ~@15 A ~@3 A ~ A ~ B ~@15 A ~@3 A ~ A ~ B ~@20
>`.pickRestart({
  A: "~@8 x!2 ~@2", B: "~@2 x",
})).gain(0.4)

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

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

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~ A ~ B C B D B C B C B ~ E ~@3 B@2 C@2 ~ B@2 ~ A ~ B C B D B C B C B ~ E ~@3 B@2 C@2 ~ B@2 A ~ B C B D B C B C B ~ E
  ~@3 B@2 C@2 ~ B@2 ~@2 A ~ B C B D B C B C B ~ E ~@3 B@2 C@2 ~ B@2 ~@9
>`.pickRestart({
  A: "~@5 x ~@5 x", B: "~@11 x", C: "~@2 x", D: "~@5 x ~@2 x ~@2 x", E: "~@5 x ~@6",
})).gain(0.25)

stack(piano, bass, acoustic_guitar_steel, brass_section, kick, snare, snare_soft, low_tom, crash, ride, ride_soft)

More by Elvis Presley