Strudelify

Words Of Love

Buddy Holly

KeyA majorTempo120 bpm
0:00/0:00
// Words Of Love — Holly Buddy
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D E F G ~ H I J@2 K@2 L M N O P Q R@2 S@2 T@2 U V W X Y ~ A B C D E F G ~ H I J@2 K@2 L M N O P Q R@2 S@2 T@2 U
  V W X Y ~ Z
>`.pickRestart({
  A: "[c#4,e4]@4 [c#4,e4]@2 [e3,c#4]@6 [a3,c#4,e4]@2 [b3,e4] ~, a3@3 ~, e3@3 e4@2 ~@3", // C#m A E5
  B: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 d4 ~ [g#3,b3]@2 ~@2 e4@2 e4@2 [b3,e4]@2, ~@3 [b2,e3]@4 ~, ~@3 e4@2 b3@2 ~, ~@2 g#3 ~", // D G#m E5
  C: "e4@2 e4@2 [a3,c#4,e4]@2 [a3,c#4,e4]@4 [a3,e4]@2 [a3,e4]@2 [b3,e4] ~, [a3,c#4]@2 ~@3 c#4@2 ~", // A A5 E5 A
  D: "[d4,f#4]@2 [d4,f#4]@2 d4 ~ [g#3,b3,e4]@4 [b3,e4]@2 [b2,e3,b3,e4]@2 [b3,e4]@2, [d3,a3]@3 [b2,e3]@3 ~@2, ~@5 g#3@2 ~", // D E E5 D5 E5
  E: "[c#4,e4]@2 [c#4,e4]@2 [a3,c#4,e4] ~ [e3,a3,c#4,e4]@4 [a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [b3,e4] ~, [e3,a3]@5 ~@7 a2@4", // C#m A E5 A5
  F: "[d4,f#4]@2 [d4,f#4]@2 [a3,d4] ~@7 [e3,g#3]@2 [b3,e4] ~, d3@3 g#3@3 ~@2, [a2,a3]@2 ~ [b3,e4]@2 [b3,e4]@2 ~, ~@8 b2@5 ~@3", // D D5 E E5 A E5
  G: "[a2,e3,a3,c#4,e4]@3 ~@13", // A
  H: "[a3,c#4,e4]@2 [c#4,e4] [c#4,e4]@2 [c#4,e4] [e3,a3,c#4,e4] [b3,e4], e3@3 ~, a2@3 [a2,a3]@3 ~@2", // A C#m A E5 A
  I: "f#4@2 f#4@2 d4 ~ [b3,e4]@4 [b2,b3,e4]@2 [e3,g#3,b3,e4]@2 e4@2, d3@3 [e3,g#3]@3 ~@2, [a3,d4] ~@3", // E5 E D5
  J: "[e4@2 e4@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@4 [a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [b3,e4]@2 [d4,f#4]@2 [d4,f#4]@2 [d3,d4,f#4] ~ [g#3,b3,e4]@4 [b2,e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 e4@2, a2@4 ~@2 a2@5 ~@5, [e3,a3,c#4]@4 ~@12 [d3,a3]@5 ~@11]/2", // A E5 D E A D5
  K: "[[c#4,e4]@2 [c#4,e4]@2 [a3,c#4,e4]@2 [a2,a3,c#4,e4]@4 [a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [b3,e4] ~ [a3,d4,f#4]@2 [a3,d4,f#4]@2 [a2,d3,a3,d4]@2 [b3,e4]@4 [g#3,e4]@2 [g#3,e4]@2 [b3,e4]@2, a2@6 ~@4 a2@9 ~@3 b2@8 ~@2, [e3,a3]@2 e3@4 ~@2 d3@2 ~ g#3 ~ [e3,b3]@2 ~]/2", // C#m A E5 D D5 E5 C#m E5 …
  L: "[c#4,e4]@2 c#4@2 [e3,a3,c#4]@2 [a2,a3,c#4,e4]@4 [a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [b3,e4] ~, a2@6 ~@4 a2@5 ~, [e3,a3]@2 ~ e3@3 ~@2, ~ e4@2 ~@5", // C#m A E5 A5
  M: "[d3,a3,d4,f#4]!2 ~ [b3,e4]@2 e4 [e3,e4] [b3,e4], a2@6 [b2,e3]@7 ~@3, ~@3 g#3 ~ [g#3,b3]@2 ~", // D E5 E E5 G#m
  N: "[a3,c#4,e4]@2 [a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [a2,a3,c#4,e4]@4 [a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [b3,e4] ~, a2@3 ~@2 a2@3, e3@2 ~ e3@3 ~@2", // A E5
  O: "[a2,a3,d4,f#4]!2 d3 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]!2 [b3,e4], d3@2 ~ b2@4 ~", // D E E5
  P: "[c#4,e4] e4 [e3,a3,e4] [a3,c#4,e4]@2 [a3,c#4,e4] [e3,a3,c#4,e4] e4, a2, [e3,a3]@2 ~ e3@3 ~@2, ~ c#4@2 ~@5", // C#m A5 A A5
  Q: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [g3,e4] ~ [g#3,b3,e4]@4 [g#3,e4]@2 [e3,g#3,e4]@2 [b3,e4]@2, [a2,d3]@3 b2@4 ~, ~@3 e3@3 ~@2, ~@5 b3@2 ~", // D C E C#m E E5 D5
  R: "[[a3,e4]@2 e4@2 [a2,e3,a3,c#4,e4]@2 [a2,e3,c#4,e4]@4 [e3,c#4,e4]@2 [e3,c#4,e4]@2 [b3,e4]@2 [a3,d4,f#4]@2 [a3,d4,f#4]@2 b3 ~ [b2,g#3,b3,e4]@2 [b2,g#3,b3,e4]@2 [b2,e3,g#3,b3,e4]@2 [g#3,b3,e4]@2 [b3,e4] ~, [e3,c#4]@4 ~@2 a3@2 ~@2 a2@9 ~@13, ~@10 a3@4 ~@2 d3@5 ~ e3@4 ~@6]/2", // A5 A C#m E5 D E E5 C#m
  S: "[[e3,a3,c#4,e4]@2 [e3,a3,c#4]@2 [a3,c#4]@2 [a3,c#4,e4]@4 [a3,c#4,e4]@2 [c#4,e4]@2 [b3,e4] ~ [a3,d4,f#4]@2 [a3,d4,f#4]@2 b3@2 [e3,g#3,b3,e4]@4 [g#3,b3,e4]@2 [g#3,b3,e4]@2 [b3,e4] ~, a2@6 e3@6 [e3,a3] ~@3 d3@6 ~@4 e3@4 ~@2, ~@2 e4@4 a2@2 ~@4 a2@10 b2@7 ~@3]/2", // A C#m E5 D E E5 A5
  T: "[[c#4,e4]@4 [c#4,e4]@2 [a3,c#4,e4]@4 [a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [b3,e4] ~ [d3,d4,f#4]@2 [d3,d4,f#4]@2 d3@2 [e3,g#3,b3,e4]@4 [g#3,b3,e4]@2 [b2,g#3,b3,e4]@2 [b3,e4]@2, a2@11 b2@3 ~@2, [e3,a3]@3 e3@3 ~@2 a3@2 ~@3 e3@2 ~]/2", // C#m A E5 D E E5 A5
  U: "[a3,c#4,e4]@2 [a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [a3,c#4,e4]@4 [a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [b3,e4] ~, e3@2 ~ e3@3 ~@2", // A E5
  V: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [a2,a3]@2 [b2,e3,g#3,b3,e4]@4 [b2,e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [b3,e4] ~, d3@3 ~@5", // D A E E5
  W: "[c#4,e4] [a3,c#4,e4]!2 [e3,a3,c#4,e4] [a3,c#4,e4]!3 e4, e3@6 a2@9 ~, ~@8 e3@5 ~@3", // C#m A
  X: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 d3 ~ [g#3,b3,e4]@4 [g#3,b3,e4]@2 [g#3,b3,e4]@2 [b3,e4] ~, a2@3 ~@5, d3@2 ~ e3@4 ~", // D E E5
  Y: "[e3,a3,c#4,e4] ~@3", Z: "[e3,a3,c#4]@7 ~, e4@11 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.27).pan(0.4)

// chords · acoustic guitar steel · "STEEL GTR" · soft notes
const acoustic_guitar_steel_2 = note(`<
  A@2 B ~@2 C ~@5 D E F G H G I ~ J K L M N G O G@2 P Q ~@2 A@2 B ~@2 C ~@5 D E F G H G I ~ J K L R N G O G@2 P Q ~@2 S
>`.pickRestart({
  A: "[~@5 e4 ~@2 d3@3 ~@3 g#3 ~, a2@11 ~@5]/2", B: "e3@13 ~@3", C: "~@6 e3@4 e3@2 ~@2 g3 ~, ~@6 b2 ~@9",
  D: "~@6 [b2,e3]@4 ~@2 b2 ~@3", E: "~@14 [d#3,g3] ~", F: "~@3 e3@2 ~@3", G: "~@14 g3 ~", H: "~@4 [d3,e4] ~@11",
  I: "~@2 a3 ~@5", J: "~@4 b3 ~@11", K: "~ a3 ~@2 a3 ~@3", L: "~@4 [a2,g3,e4] ~@9 [a2,g3] ~",
  M: "~@4 e3@2 ~@8 [d3,g3] ~", N: "~@4 [g3,e4]@2 ~@8 d3 ~", O: "~@2 [b3,e4] ~@5", P: "a3 ~@6 b3", Q: "~@4 e4 ~@9 g3 ~",
  R: "~@4 e3@2 ~@8 g3 ~", S: "a2@7 ~",
})).s("gm_acoustic_guitar_steel").gain(0.13).pan(0.4)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D A B E ~ A B C D A B A B C D A B A B C D A B A B C D E ~ A B C D A B E ~ A B C D A B A B C D A B A B C D A B A
  B C D E ~ F
>`.pickRestart({
  A: "a1@3 ~ e2@3 ~", B: "d2@3 ~ e2@3 ~", C: "a1@6 ~@2 e2@7 ~", D: "d2@6 ~@2 e2@5 ~@3", E: "a1@5 ~@11", F: "a1@7 ~",
})).s("gm_acoustic_bass").gain(0.38)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A@2 B@2 C@2 D E F G H I J K L@2 M N O P Q R S@2 T U V U W X Y Z A@2 B@2 C@2 D E F G H I J K L@2 M N O P Q R S@2 T U V
  U W X Y AA AB
>`.pickRestart({
  A: "[[a3,c#4]@4 [a3,c#4]@4 [a3,c#4]@4 [e3,a3,c#4]@2 ~@8 a3 ~@3 d4@2 ~@2 g#3 ~, ~@8 e4@6 ~ e4@2 ~ f#4@5 ~ e4@4 ~@4, ~@8 d3@7 ~, ~@10 d4@3 ~ [b3,e4]@2]/2", // A E5
  B: "[[e3,a3]@4 [e3,a3,c#4]@4 [a3,c#4]@4 [a3,c#4]@3 ~@7 a3@2 ~@2 d4@2 [b3,e4]@2 g#3 ~, a2@14 ~@2 d3@15 ~, ~@8 e3@6 ~ e4@2 ~ f#4@5 ~ e4@4 ~@4, ~@10 d4@3 ~@3]/2", // A5 A E5
  C: "[[e3,a3]@4 [e3,a3,c#4]@4 [e3,a3,c#4]@4 [e3,a3]@3 ~@7 a3@2 ~@2 d4@2 ~@2 g#3@2, ~@15 e4@3 f#4@5 ~ e4@4 ~@4, ~@8 d3@7 ~, ~@10 d4@3 ~ [b3,e4]@2]/2", // A5 A A5 E5
  D: "[e4,a4]@2 [g4,g#4] ~ e4@2 [d4,d#4] c#4 [c#4,e4]@2 d4 [d#4,e4] e4@4", // A5 G#maj7 D#maj7 C#m Emaj7
  E: "~@6 a3 ~@3 d4@2 b3@2 g#3@2, a3@3 ~@5, ~@2 f#4@5 ~ e4@4 ~@4, ~@2 d4@3 ~@3",
  F: "[e3,a3,c#4]@2 ~ [a3,c#4]@2 ~@2 [g#3,c#4]", G: "[a3,d4,f#4]@4 ~@2 e4@4 [e4,g#4]@2 [b3,e4] ~@3, ~@3 b3@3 ~@2",
  H: "[e3,a3]@2 ~ [e3,a3]@2 c#4 ~ [g#3,c#4]", I: "[a3,d4]@2 ~@3 g#4 ~@2, ~@3 [b3,e4]@3 ~@2",
  J: "[e3,a3,c#4]@2 ~ a3@2 c#4 ~ [g#3,c#4], ~@3 e3@3 ~@2", K: "[a3,d4,f#4]@2 ~ e4@2 [e4,g#4] ~@2, ~@3 b3@3 ~@2",
  L: "[[e3,a3,c#4]@4 ~@2 a3@4 c#4@2 a3 ~@13 d4@2 b3@2 g#3 ~, ~@6 e3@7 ~@2 e4@2 ~ f#4@4 ~@2 e4@4 ~@4, ~@16 d3@15 ~, ~@10 d4@3 ~@3]/2", // A
  M: "a3@4 ~@2 [e3,a3]@6 a2 ~ [g#3,c#4]@2", N: "[a3,d4]@4 ~@2 e4@4 [e4,g#4]@2 [b3,e4] ~@3, ~@3 b3@3 ~@2",
  O: "[e3,a3]@2 ~ a3@2 c#4 ~ [g#3,c#4], ~@3 e3@3 ~@2", P: "[a3,d4]@4 ~@6 g#4@2 e4 ~@3, ~@3 [b3,e4]@3 ~@2",
  Q: "[e3,a3]@2 ~@3 c#4 ~ g#3, ~@3 [e3,a3]@3 ~@2", R: "[a3,d4]@4 ~@2 [e4,g#4]@4 [e4,g#4]@2 [b3,e4] ~@3, ~@3 b3@3 ~@2",
  S: "[[e3,a3]@4 [e3,a3,c#4]@4 [e3,a3]@4 [e3,a3]@2 ~@8 a3 ~ e4@2 d4@2 [b3,e4]@2 g#3 ~, ~@8 c#4@6 ~ e4@2 ~ f#4@5 ~@9, ~@16 d3@7 ~@9, ~@10 d4@3 ~@3]/2", // A5 A A5 E5
  T: "[e4,a4]@2 g#4 ~ e4@2 d#4 [c#4,d4] [c#4,e4]@2 d4 [d#4,e4] e4@2 ~@2", // A5 Dmaj7 C#m Emaj7
  U: "[d4,f#4]@4 ~@2 [f#4,a4]@2 [e4,g#4]@3 ~ [g#4,b4]@4", // D F#m E G#m
  V: "[e4,a4]@2 [g4,g#4] ~ e4@2 [c#4,d4,d#4] ~ [c#4,e4]@2 d4 d#4 e4@4", // A5 G#maj7 C#m
  W: "[e4,a4]@2 [f#4,g#4] ~ e4@2 [c#4,d4,d#4] ~ [c#4,e4]@2 [d4,d#4] e4 e4@3 ~", // A5 F#sus2 C#m D#maj7
  X: "[d4,f#4]@3 ~@3 [f#4,a4]@2 [e4,g#4]@3 ~ [g#4,b4]@3 ~", // D F#m E G#m
  Y: "e4@4 a4@3 ~ a4 g#4 e4@3 ~ b3@2, c#5@2 ~@2 e4@2 ~ e4@3 ~@6",
  Z: "~@3 a3 ~ d4 b3!2, a3@3 ~@5, ~@2 f#4@5 ~ e4@4 ~@4, ~@2 d4@3 ~@3",
  AA: "~@3 a3 ~ d4 b3 g#3, a3@3 ~@5, ~@2 f#4@5 ~ e4@4 ~@4, ~@2 d4@3 ~@3", AB: "a3@7 ~, c#4@3 ~",
})).s("gm_electric_guitar_clean").gain(0.36).pan(0.6)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note(`<
  A ~ B ~ C D E F G H I ~ J ~ K L M H B N O P B ~ Q ~ R ~ S ~ T U A ~ B ~ C D E F G H I ~ J ~ K L M H B N O P B ~ Q ~ R
  ~ S ~ T U V
>`.pickRestart({
  A: "~ e4 e3 ~, e3 ~", B: "c#4 ~@3", C: "c#4@4 ~@8 c#4@3 ~", D: "~@4 g3@3 ~", E: "~@3 [e4,f4,f#4] ~@12",
  F: "~@6 d#4 ~", G: "a2@2 ~ e3@2 ~@2 f4", H: "~@6 g#4@3 ~@7", I: "a2 ~@3", J: "~@6 c#4@3 ~@7",
  K: "~@3 a2@3 ~@2, ~@6 c#4@3 ~@7", L: "~@3 a3 ~@4", M: "a2@4 a2@2 ~@4 c#4@2 e3 ~@3, [e3,c#4]@3 ~@5",
  N: "f#4@4 ~@8 g#4 ~@3", O: "~@3 c#4 ~@3 c#4", P: "f#4 ~@3", Q: "~@3 [f4,f#4] ~@11 f#4",
  R: "~@2 f#4 [e4,f4] ~@7 e4 ~@4", S: "~@3 [e4,f4] ~@12", T: "~@9 f#4 ~@6", U: "d4 ~@2 e4", V: "e3@7 ~",
})).s("gm_electric_guitar_clean").gain(0.12).pan(0.6)

// other · pan flute
const pan_flute = note("<~@8 A B C D@2 E F G A H@4 E F I ~@16 A J@2 K C E F L A H@4 E F M@5 F N O ~@2>".pickRestart({
  A: "c#5 a4 e4 a4", B: "~@3 g#4@2 f#4!2 g#4", C: "~ e4@6 ~", D: "[~@3 g#4@2 f#4!2 g#4@2 e4@6 ~]/2", E: "~@2 g#4 b4",
  F: "c#5", G: "d5@4 b4@3 ~", H: "[~@6 g#4@4 f#4@2 f#4@2 g#4@4 e4@13 ~]/2", I: "d5 b4",
  J: "[f#4@2 ~ a4 g#4 e4!2 g#4@2 e4@6 ~]/2", K: "~@3 a4@2 g#4 f#4 g#4", L: "d5@8 b4@5 ~@3",
  M: "[d5@8 b4@4 d5@2 b4@4 c#5@16 ~@6 b4@4 d5@2 b4@4 c#5@19 ~@3 b4@4 d5@2 b4@2]/5", N: "~@4 b4@2 d5 b4", O: "c#5@15 ~",
})).s("gm_pan_flute").gain(0.25).pan(0.6)

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

// drums · rim
const rim = s("rim").struct(`<
  A@3 B A@2 ~@2 A@3 B A@3 B A@3 B A@3 B A@3 B A@2 ~@2 A@3 B A@2 ~@2 A@3 B A@3 B A@3 B A@3 B A@3 B A@2 ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x ~ x",
})).gain(0.37)

// drums · open hat
const open_hat = s("oh").struct("<A@6 ~@2 A@22 ~@2 A@6 ~@2 A@22 ~@2 B>".pickRestart({
  A: "~ x ~ x", B: "x",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A@3 B A@2 ~@2 A@3 B A@3 B A@3 B A@3 B A@3 B A@2 ~@2 A@3 B A@2 ~@2 A@3 B A@3 B A@3 B A@3 B A@3 B A@2 ~@3
>`.pickRestart({
  A: "~@2 x!2 ~@2 x ~@3 x ~ x ~ x ~", B: "~@2 x!2 ~@2 x ~@5 x ~@3",
})).gain(0.32)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, bass, electric_guitar_clean, electric_guitar_clean_2, pan_flute, kick,
  rim, open_hat, mid_tom
)

More by Buddy Holly