Strudelify

Love's Made A Fool Of You

Buddy Holly

KeyA majorTempo94 bpm
0:00/0:00
// Love's Made A Fool Of You — Holly Buddy
// 94 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 48 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(94/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 C G H I J K A B C D A B C D E F C G H I J K A B C D E F C G H I J K A B C D A B C L
>`.pickRestart({
  A: "[a3,e4] e4@2 [a3,c#4,e4]@2 [a3,c#4,e4] [c#4,e4]!2 [a3,d4,f#4]!3 [a3,d4] [e3,a3,c#4,e4]@2 [a3,c#4]!2, a2@7 ~, [e3,c#4]@3 e3@4 ~ d3@4 ~@4", // A5 A C#m D D5 A C#m
  B: "[c#4,e4] ~ a3 [a3,c#4,e4]@2 [a3,c#4,e4] [e3,a3,c#4,e4] ~@2 [g#3,b3,e4] [b2,e3,g#3,b3,e4] ~ [a2,e3,a3,c#4,e4]@2 [a3,c#4]!2, [e3,a3]@3 [a2,e3]@4 ~ [b2,e3,b3]@2 ~@6, ~ [c#4,e4]@2 ~@4 e4@2 ~@7", // C#m A E A A5 E5 C#m
  C: "e4 ~ c#4 [e3,a3,c#4,e4]@2 [a2,a3,e4] [e3,a3,c#4,e4] [b3,e4] [a3,d4,f#4] [d4,f#4] [a3,d4,f#4] ~ [e3,a3,c#4,e4]@2 [e3,a3,c#4]!2, a2@5 ~ a2@8 ~@2, [e3,a3,c#4]@3 ~@13, ~ e4@2 ~@13", // A A5 A E5 D A
  D: "e4!2 ~ [a3,c#4,e4]@2 [a3,c#4,e4] [c#4,e4] ~ [g#3,b3] [g#3,b3,e4] [e3,g#3,b3,e4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4]!2, a2@8 [b2,e3]@3 ~@5, [e3,a3,c#4]@3 e3@4 e4@2 ~@7", // A C#m G#m E A E5 A
  E: "[a3,e4] e4@2 [a3,c#4,e4]@2 [a3,c#4,e4] [c#4,e4] [b3,e4] [a3,d4,f#4]!3 ~ [e3,a3,c#4,e4]@2 [e3,a3,c#4]!2, a2@7 ~, [e3,c#4]@3 e3@4 ~ d3@4 ~@4", // A5 A C#m E5 D A C#m
  F: "[c#4,e4] ~ a3 [a3,c#4,e4]@2 [a3,c#4,e4] [e3,a3,c#4,e4] ~@2 [g#3,b3,e4] [b2,e3,g#3,b3,e4] ~ [a2,e3,a3,c#4,e4]@2 [e3,a3,c#4]!2, [e3,a3]@3 [a2,e3]@4 ~ [b2,e3,b3]@2 ~@6, ~ [c#4,e4]@2 ~@4 e4@2 ~@7", // C#m A E A A5 E5 C#m
  G: "e4!2 ~ [a3,c#4,e4]@2 [a3,c#4,e4] [c#4,e4] ~ [g#3,b3] [g#3,b3,e4] [e3,g#3,b3,e4]@2 [e3,a3,c#4,e4]@2 [a3,c#4]!2, a2@8 [b2,e3]@3 ~@5, [e3,a3,c#4]@3 e3@4 e4@2 ~@7", // A C#m G#m E A E5 A
  H: "[d4,f#4]@2 [d4,f#4] [d4,f#4]@2 [d3,d4,f#4]@2 [b3,e4] [e3,g3,c4,e4] [c4,e4] [c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]@2 [g3,c4]!2, a3@7 ~@9, d3@5 ~@11", // D E5 C C5
  I: "[d3,a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4,f#4]@2 ~ [a3,f#4] [g3,b3,e4] [c3,e3,g3] [c3,e3,e4] [e3,e4]@2 [e3,g3,c4,e4]@2 [g3,c4]!2, a2@4 ~ c3@2 ~, ~@3 d3@5 ~ [g3,c4]@3 ~@4, ~@5 [d4,f#4]@2 ~@9", // D Em C E C C5 D
  J: "[e3,a3,c#4,e4]@2 [c#4,e4] [c#4,e4]@2 [a3,c#4,e4]!2 c#4 [f#2,c#3,f#3,a3,c#4] [a3,c#4,f#4] [c#3,a3,c#4,f#4]@2 [c#3,a3,c#4,f#4]@2 [f#3,a3,c#4]!2, a2@4 ~ [f#2,f#3]@2 ~, ~@2 a3@3 ~@11, ~@3 e3@4 ~@9", // A C#m A F#m F#
  K: "[d3,a3,d4,f#4]@2 [a3,d4,f#4] [d3,a3,d4,f#4]@2 [d4,f#4] [a2,d4,f#4] b3 [e2,b2,e3,g#3] [g#3,b3,e4] [b2,g#3,b3,e4]@2 [b2,g#3,b3,e4]@2 [e3,g#3,b3]!2, a2@5 [d3,a3]@3 ~ e3@5 ~@2, ~@5 e2@2 ~", // D E D5
  L: "e4!2 ~ [a3,c#4,e4]@2 [a3,c#4,e4] [c#4,e4] ~ [g#3,b3] [g#3,b3,e4] [e3,g#3,b3,e4]@2 [e3,a3,c#4,e4]@2 ~@2, a2@8 [b2,e3]@3 ~@5, [e3,a3,c#4]@3 e3@4 e4@2 ~@7", // A C#m G#m E A E5 A
})).s("gm_acoustic_guitar_steel").gain(0.29).pan(0.3)

// chords · acoustic guitar steel · "STEEL GTR" · soft notes
const acoustic_guitar_steel_2 = note(`<
  A B C D E B C D F G H I A B C D A B C D E B C D F G H I A B C D E B C D F G H I A B C D A B C D
>`.pickRestart({
  A: "~ a3@2 ~@13", B: "a2@2 [a2,e4] ~@4 b3@2 ~@7", C: "~@2 a3 ~@13", D: "~@2 e4 ~@4 b3@2 ~@7",
  E: "~ a3@2 ~@8 [g3,b3] ~@4", F: "~@3 a2@4 g3 c3 f#2 ~@6", G: "~@8 c4 ~@2 f#2@2 ~@2 e4", H: "e2@2 e2 ~@5 f#4 ~@7",
  I: "~@7 [g3,e4] ~@8", // C
})).s("gm_acoustic_guitar_steel").gain(0.14).pan(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E D F G H I J K L D M N O P Q N R S Q D T U V W X N F G Y Z AA D AB AC AD AE AF N R AG AH P AI P
>`.pickRestart({
  A: "a1@2 a1 a1@2 a1 a1@2 d2 ~ d2@2 a1@2 ~@2", B: "a1 ~ a1!2 ~ a1 a1@2 e1 ~ e1@2 a1@2 ~@2",
  C: "a1 ~ a1!2 ~ a1 a1@2 d2 ~ d2@2 a1@2 ~@2", D: "a1 ~ a1!2 ~ a1 a1@2 e1 ~ e1@2 a1 ~@3",
  E: "a1 ~ a1!2 ~ a1 a1@2 d2 ~ d2@2 a1 ~@3", F: "a1 ~ a1!2 ~ a1 a1@2 d2 ~ d2 ~ a1 ~@3",
  G: "a1 ~ a1!2 ~ a1 a1@2 e1 ~ e1 ~ a1@2 ~@2", H: "d2 ~ d2 d2@2 ~ d2@2 c2@2 c2 ~ c2 ~@3",
  I: "d2@2 d2 d2@2 d2 d2@2 c2 ~ c2 ~ c2 ~@3", J: "a1 ~ a1 a1@2 a1!2 ~ f#1@2 f#1@2 f#1 ~@3",
  K: "d2 ~ d2!2 ~ d2 d2@2 e2 ~ e2@2 e2 ~@3", L: "a1 ~ a1!2 ~ a1 a1@2 d2@2 d2@2 a1@2 ~@2",
  M: "a1 ~ a1 a1@2 a1 a1@2 d2 ~ d2 ~ a1@2 ~@2", N: "a1 ~ a1!2 ~ a1 a1@2 e1 ~ e1 ~ a1 ~@3",
  O: "a1 ~ a1!2 ~ a1 a1@2 d2 ~ d2 ~ a1@2 ~@2", P: "a1 ~ a1!2 ~ a1!2 ~ e1 ~ e1 ~ a1 ~@3",
  Q: "a1 ~ a1 a1@2 a1!2 ~ d2 ~ d2 ~ a1 ~@3", R: "a1 ~ a1 a1@2 a1 a1@2 d2 ~ d2 ~ a1 ~@3",
  S: "a1 ~ a1!2 ~ a1 a1@2 e1@2 e1@2 a1 ~@3", T: "d2 ~ d2 d2@2 d2 d2@2 c2 ~ c2 ~ c2@2 ~@2",
  U: "d2@2 d2 d2@2 d2!2 ~ c2 ~ c2 ~ c2@2 ~@2", V: "a1@2 a1 a1@2 a1!2 ~ f#1 ~ f#1 ~ f#1@2 ~@2",
  W: "d2@2 d2 d2@2 d2 d2@2 e2 ~ e2 ~ e2 ~@3", X: "a1@2 a1!2 ~ a1!2 ~ d2 ~ d2 ~ a1@2 ~@2",
  Y: "a1 ~ a1!2 ~ a1 a1@2 d2@2 d2 ~ a1 ~@3", Z: "a1@2 a1 a1@2 a1 a1@2 e1 ~ e1@2 a1@2 ~@2",
  AA: "a1 ~ a1!2 ~ a1 a1@2 d2@2 d2@2 a1 ~@3", AB: "d2 ~ d2 d2@2 d2 d2@2 c2@2 c2 ~ c2 ~@3",
  AC: "d2 ~ d2 d2@2 d2!2 ~ c2 ~ c2 ~ c2@2 ~@2", AD: "a1 ~ a1!2 ~ a1 a1@2 f#1 ~ f#1 ~ f#1 ~@3",
  AE: "d2@2 d2 d2@2 d2!2 ~ e2 ~ e2 ~ e2 ~@3", AF: "a1 ~ a1!2 ~ a1!2 ~ d2 ~ d2 ~ a1@2 ~@2",
  AG: "a1 ~ a1 a1@2 a1!2 ~ e1 ~ e1 ~ a1 ~@3", AH: "a1 ~ a1!2 ~ a1!2 ~ d2 ~ d2@2 a1 ~@3",
  AI: "a1 ~ a1!2 ~@2 a1 ~ d2 ~ d2 ~ a1 ~@3",
})).s("gm_acoustic_bass").gain(0.36)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@5 A ~ B C D@3 ~ E F G ~@5 H I J C K@2 L ~ M N O ~@4 P@2 Q R ~ S N T ~@4
>`.pickRestart({
  A: "e3 g3 a3 c4 a3 c4 a3 g3 e3 g3 e3 ~ c3 a2 ~@2", B: "e3 ~ g3 a3 b3 [a3,c4] ~ g3 e3 d3 c3 ~ a2 ~@3",
  C: "[a3,d4,f#4]@7 ~ [g3,c4,e4]@7 ~", // D C
  D: "[[a3,d4,f#4]@7 ~ [g3,c4,e4]@5 ~@3 [c#4,e4,a4]@6 ~@2 [a3,c#4,f#4]@7 ~ [d4,f#4]@6 ~@2 [g#3,b3,e4,g#4]@7 ~, ~@15 a3@7 ~ f#3@8 [f#3,a3]@7 ~@10]/3", // D C A F#m D E F#m
  E: "e3 g3 a3 c4 a3 c4 a3 g3 e3 ~ d3 ~ c#3 ~@3", F: "~@12 a2 e3 f#3 a3",
  G: "c4 a3 c4 c#4 a3@2 g3 f#3 e3 d3 c3@2 a2 ~@3", H: "e4 g4 a4 c5 a4 g4 e4 g4 e4 d4 c4@2 c#4 ~@3", I: "~@14 e4 ~",
  J: "c5 b4 a4 g4 e4 ~ c5 b4 a4 e4 f#4 ~ a4 ~@3",
  K: "[[a3,d4,f#4]@7 ~ [g3,c4,e4]@4 ~@4 [e4,a4]@6 ~@2 [f#3,a3,c#4,f#4]@7 ~, ~@15 [a3,c#4]@7 ~@10]/2", // D C A5 F#m A
  L: "[f#3,a3,d4,f#4]@3 ~ [g#3,b3,e4,g#4]@3 ~", M: "e3 g3 a3 c4 a3 c4 a3 g3 e3 d3 [c3,c#3] ~ a2 ~@3",
  N: "~@13 e3 g3 a3", O: "c4 a3 c4 a3 c4@2 b3 a3 ~ e3 f#3 ~ a3 ~@3", P: "[a3,d4,f#4]@7 ~ [g3,c4,e4]@6 ~@2",
  Q: "[a3,c#4,e4,a4]@3 ~ [a3,c#4,f#4]@3 ~", R: "[f#3,a3,d4,f#4]@7 ~ [g#3,b3,e4,g#4]@6 ~@2",
  S: "e3 g3 a3 c4 a3 ~ a3 c4 a3 g3 e3@2 a2 ~@3, ~@5 c4@2 ~@9", T: "c4 a3 c4 a3@2 g3 e3 ~ e3 ~ e3 ~ a3 ~@3",
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.7)

// other · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@4 A ~ B ~ C D ~@2 E ~ F ~@5 G ~ H ~ I J ~@2 E ~ K ~@5 L M ~@2 N ~ O ~@5
>`.pickRestart({
  A: "e4@2 e4 e4@2 e4@3 f#4@2 f#4 e4@4 ~", B: "e4 e4@2 e4 e4@2 e4@2 f#4@2 f#4 e4@3 ~@2",
  C: "f#4@2 f#4 f#4@2 f#4@3 e4@2 e4 e4@4 ~", D: "f#4!2 ~ f#4@2 g4@2 f#4 e4 e4@2 e4@4 ~",
  E: "e4 e4@2 d4@2 c#4@3 f#4@2 f#4 e4@3 ~@2", F: "e4!2 ~ d4@2 c#4!3 a3@2 c#4 c#4@3 ~@2",
  G: "e4!2 ~ e4@2 e4 e4@2 f#4@2 f#4 e4@2 ~@3", H: "e4!2 ~ e4@2 e4!3 f#4@2 f#4 e4@3 ~@2",
  I: "f#4@2 f#4 f#4@2 f#4 g4 f#4 e4 e4@2 e4@3 ~ e4", J: "f#4 f#4@2 f#4@2 f#4 g4 f#4 e4 e4@2 e4@3 ~@2",
  K: "e4 e4@2 d4@2 c#4!3 a3@2 c#4 c#4@4 ~", L: "f#4@2 f#4!2 ~ f#4@3 e4@2 e4 e4@3 ~@2",
  M: "f#4 f#4@2 f#4@2 g4@2 f#4 e4 e4@2 e4@2 ~@3", N: "e4 e4@2 e4@2 e4@3 f#4@2 f#4 e4@3 ~@2",
  O: "e4 e4@2 d4@2 c#4!3 a3@2 c#4@2 c#4@4",
})).s("gm_acoustic_guitar_nylon").gain(0.36).pan(0.7)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean_2 = note("<~ A B C ~@12 D E F G ~@12 H I J@2 ~@8 K L M N>".pickRestart({
  A: "e4 g4 a4 c5 a4 g4 e4 g4 e4 d4 c4 ~ c#4 ~@3", B: "~@14 a4 ~", C: "c5@2 a4 g4@2 e4 g4 e4!2 d4 c4 ~ c#4@2 ~@2",
  D: "~@3 e4 ~ f#4 a4 ~ c5@2 a4 c5@2 a4 c5 a4", E: "c5 [b4,c5] ~ g4 e4 g4 e4 g4 e4 d4 c4@2 a3 ~ e4 ~",
  F: "c5@3 c5@4 ~ b4@2 a4 c5 ~ a4 ~@2",
  G: "[e4,a4] ~ [d4,f#4] [c4,e4] c#4 a3 [c4,e4]@2 [d4,f#4] ~ [c4,e4] [a3,c#4] ~@4", // A5 D C D C A
  H: "e5 ~ g#5 ~ c6@2 a5 c6@2 a5 g5 f#5 e5 g5 a5 c6", I: "a5 g5 e5 ~ g5@2 e5 g5 ~ f#5 e5@3 ~ [e5,a5] ~",
  J: "[[g5,a5] [e5,a5] [g5,a5] a5 [g5,a5] a5 [g5,a5] a5 [g5,a5]@2 f#5 e5@2 [d5,f#5] ~@2 a4 ~ d5 c5 a4@2 c5 a4@2 c5 [c5,e5] c#5 [a4,c#5]@2 ~@2, ~@10 a5@3 ~@2 [c5,e5]@2 a4@3 d5 ~@2 d5 ~@8]/2", // Gsus2 A5 Gsus2 D C A C
  K: "e5 ~ c6@3 ~ a5 c6 a5 ~ g5 e5 g5 ~ e5 ~", L: "c6 [c6,c#6] a5 g5 e5 ~ d5 c5 a4 [e4,g4] e4@2 a3@2 ~@2",
  M: "e4 ~ c5@3 ~ a4 c5 a4 ~ g4 e4 g4 ~ e4 ~", N: "c5 [c5,c#5] a4 g4 e4 ~ d4 c4 a3 [e3,g3] e3@2 a2 ~@3",
})).s("gm_electric_guitar_clean").gain(0.45).pan(0.6)

// drums · clap
const clap = s("cp").struct("<[~@7 x]!8 ~@2 [~@7 x]!14 ~@4 [~@7 x]!8 ~@4 [~@7 x]!7 [~@3 x]>").gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<A B C D B@9 E B@17 A B C D B@9 E B@2 F>".pickRestart({
  A: "x ~@2 x ~ x ~@2 x ~ x ~ x ~ x!2", B: "x ~@2 x ~ x!2 ~ x ~ x ~ x ~ x!2", C: "x ~@2 x ~ x!2 ~ x ~ x ~ x ~ x ~",
  D: "x ~ x!2 ~ x!2 ~ x ~ x ~ x ~ x!2", E: "x ~@2 x ~ x!2 ~ x!2 ~@2 x ~@3", F: "x ~@2 x ~ x!2 ~ x ~ x ~ x ~@3",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<A B C D B@9 E B@17 A B C D B@9 E B@3>".pickRestart({
  A: "~@2 x ~@3 x ~@2 x ~@6", B: "~@2 x ~@6 x ~@6", C: "~@2 x ~@6 x ~@5 x", D: "~@9 x ~@6", E: "~ x ~@6",
})).gain(0.35)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, bass, electric_guitar_clean, acoustic_guitar_nylon,
  electric_guitar_clean_2, clap, low_tom, mid_tom
)

More by Buddy Holly