Strudelify

You've Got Love

Buddy Holly

KeyA majorTempo122 bpm
0:00/0:00
// You've Got Love — Holly Buddy
// 122 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 68 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(122/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 · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  A B C D E F@3 G H I J K@2 L M N O P@2 Q R@2 S@2 T@2 U@2 V@2 W@2 X Y@3 B C D Z AA AB AC AD AE AF AG AH AI@2 AJ@2 AK@4
  AL AM@3 B C D AN B ~@2
>`.pickRestart({
  A: "~@16 [e3,g#3]@2 [f#3,a3]@3 ~ [g#3,b3]@2", // E F#m G#m
  B: "[a3,c#4]@4 [a3,c#4]@2 [a3,c#4]@4 [a3,c#4]@4 ~@2 [a3,c#4]@2 [g#3,b3]@3 ~ [f#3,a3] ~", // A G#m F#m
  C: "[e3,g#3]@4 [e3,g#3]@2 [e3,g#3]@4 [e3,g#3]@4 ~@2 [e3,g#3] ~ [f#3,a3]@3 ~ [g#3,b3]@2", // E F#m G#m
  D: "[a3,c#4]@2 [a3,c#4] [a3,c#4]@2 [a3,c#4]@2 ~ [a3,c#4] [g#3,b3] ~ [f#3,a3]", // A G#m F#m
  E: "[e3,g#3]@4 [e3,g#3]@2 [e3,g#3]@4 [e3,g#3]@3 ~@11", // E
  F: "[a3@5 ~@13 a3@5 ~@5 d4@6 ~@6 d4@6 ~@20 a3@4 c#4@2, ~@6 a3@10 c#4@5 ~@3 e3@28 c#4@11 ~ c#4@5 ~@3, ~@10 e4@23 ~ e4@23 ~ e4@14, ~@3 e3]/3",
  G: "~@18 g#3@5 ~, e3@7 ~, ~@4 d4@11 ~ d4@5 ~@3, ~ g#3 ~@2, ~@5 e4@7",
  H: "~@10 d4@5 ~@3 a3@4 d4 ~, d3, d4@10 ~@6 d4@5 ~@3, a3!2 ~@2, ~@4 f#4@6 f#4@11 ~@3",
  I: "~@16 d4@5 ~@3, ~@4 b3@11 ~@9, ~@10 e4@13 ~", J: "~@10 c#4@5 ~ c#4@5 ~@3, e3, ~@10 e4@13 ~",
  K: "[~@4 d4@6 d4@5 ~@3 g#3@5 ~@11 c#4@5 ~@3 a3@5 ~, ~@10 e4@23 ~ e4@14, ~@16 d4@6 ~@2 e3@23 ~, ~@40 c#4@5 ~@3]/2",
  L: "~@10 d4@5 ~@3 g#3@5 ~, e3, ~@5 e4@7, ~@16 d4@5 ~@3", M: "~@10 c#4@5 ~ c#4@5 ~ c#4@2, ~@5 e4@7",
  N: "~@2 e4, e3@11 ~, ~@4 e4@11 ~@9, ~@10 d4@11 ~@3", O: "a3@6 a3@4 ~@6 d4@5 ~ d4 ~, d3, ~@10 f#4@13 ~",
  P: "[e3@10 ~@12 b3@2 ~@6 a3@4 ~@8 a3@3 ~@3, ~@10 d4@11 ~@3 e3@22 ~@2, ~@16 e4@17 ~ e4@12 ~@2, ~@40 c#4@5 ~@3]/2",
  Q: "~@5 c#4@3 c#4@3 c#4, [a3,c#4]@5 a3@4 ~@3, ~@4 g4@11 ~ g4@8", // A
  R: "[~@22 d4@5 ~ d4@2 f#4@4 ~@6 d4 ~@5 f#4@2, ~@6 d4@9 ~ d4@6 ~@8 d4@10 ~@8, ~@10 f#4@11 ~ f#4@8 ~@4 f#4@12 ~@2, ~@3 a3 ~@3 [a3,d4]]/2", // D5
  S: "[~@6 [c#4,e4]@4 c#4@5 ~@19 c#4@5 ~@3 e3@4 c#4 ~, ~ e3@5 ~@6, ~@10 e4@11 ~ e4@12 e4@14, ~@16 c#4@11 ~ c#4@6 ~@6 c#4@5 ~@3, ~@9 a3@6 a3@5 ~@4]/2", // C#m
  T: "[~@10 d#4@6 ~@6 d#4@5 ~ d#4@2 f#4@3 ~@7 d#4@5 ~@3, b3@12 ~@5 f#4@6 ~, ~@6 f#4@9 ~ f#4@13 ~ d#4@9 ~@9]/2",
  U: "[~@4 b3@6 b3@5 ~ b3@5 ~ b3@2 ~@4 d4@6 d4@5 ~@3 g#3@6, e3@17 ~@23 d4@7 ~, ~@5 e4@12 e4@7]/2",
  V: "[~@10 c#4@5 ~@3 a3@5 ~@11 e4@3 ~@3 d4@6 d4 ~, ~@10 e4@23 ~@15, ~@16 c#4@5 ~@3 e3@15 ~@9, ~@28 b3@9 ~@11]/2",
  W: "[~@10 c#4@5 ~@7 c#4 ~@5 d4@3 ~@11 g#3@3 ~@3, ~@4 c#4@6 e4@23 ~ e4@13 ~, ~@6 a3@12 a3@6 e3@17 ~@7, ~@16 c#4@5 ~@19 d4@5 ~@3]/2",
  X: "~@10 d4@5 ~@3 a3@4 d4@2, d3, ~@2 d4@3 f#4@6 ~, ~@6 a3@10 d4@5 ~@3",
  Y: "[~@18 g#3@5 ~@11 c#4@5 ~@3 a3@6 ~@16 [e3,g#3]@2 [f#3,a3]@3 ~ [g#3,b3]@2, e3@18 ~@6 e3@17 ~@7 e3@16 ~@8, ~@4 b3@4 ~@2 e4@24 e4@17 ~@7 e4@9 ~@5, ~@3 g#3@5 d4@3 ~@3 c#4@3 ~@3 c#4@3 ~@3 d4@7 ~@3, ~@30 a3@11 ~@31]/3", // E F#m G#m
  Z: "[e3,g#3]@4 [e3,g#3]@2 [e3,g#3]@4 [e3,g#3]@3 ~@3 [e3,g#3]@2 [d#3,g3]@3 ~@3", // E D#
  AA: "[c#4,d4,f4,f#4] ~@3 f#4@2 [c#4,d4,f4,f#4] ~ [d4,f#4]@2 [d4,f#4]@2 [c#4,d4,f4,f#4] ~ [d4,f#4]@2 [d4,f#4]@2 [c#4,d4,f4,f#4] ~ [d4,f#4]@2 [d4,f#4] ~, ~ d4@2 d4@2 ~@19, ~ f#4 ~@10", // Dmaj7 D Dmaj7 D Dmaj7 D
  AB: "[d#4,g4,g#4] e4 [e4,g#4]@2 [e4,g#4]@2 [d#4,e4,g4,g#4] ~ [e4,g#4]@2 [e4,g#4]@2 [d#4,e4,g4,g#4] ~ [e4,g#4]@2 [e4,g#4]@2 [d#4,e4,g4,g#4] ~ [e4,g#4]@2 [e4,g#4]@2", // G#maj7 E Emaj7 E Emaj7 E Emaj7 E
  AC: "e4@4 e4@2 ~ c#4 [c#4,e4]@2 e4@2 [d4,f#4]@2 f#4@2 f#4@2 f#4@2 f#4@2 f#4@2, a3@12 a3 ~@11, c#4@3 e4 ~@4 d4@4", // C#m D
  AD: "a4@2 a4@2 [e4,a4]@2 [e4,g#4]@2 [e4,g#4]@2 [e4,g#4]@2 [e4,g4]@2 [e4,g4]@2 [e4,g4]@2 [c#4,e4,g4]@3 ~@3, c#4!3 ~, e4 ~@5", // A5 E Em C#dim
  AE: "~@6 a3@4 [d4,f#4]@7 ~ [a3,d4,f#4]@2 ~@4, a3 ~@3, ~@4 d4@5 ~@15", // D
  AF: "~@10 f#4@6 ~@2 [a3,f#4]@3 ~@3, ~ a3@2 ~, ~@6 d4@9 ~ d4@5 ~@3", // D
  AG: "~@5 e4@3 c#4 [a3,c#4,e4] ~@2, ~@10 c#4@5 ~@9", AH: "~@4 c#4@6 c#4@5 ~ c#4 ~ [a3,c#4]@2 ~@4, ~@5 e4@5 ~@2",
  AI: "[~@4 d#4@5 ~ d#4@5 ~@3 b3@6 ~@10 d#4@5 ~@3 [f#3,b3]@4 ~@2, ~@10 f#4@23 ~ f#4@11 ~@3, ~@16 d#4@5 ~@7 d#4@6 ~@6 d#4@5 ~@3, ~@5 b3 ~@2]/2", // B5
  AJ: "[~@16 b3@8 ~@18 g#3@5 ~, e3@2 ~, ~@4 b3@11 ~@13 b3@11 ~ d4@7 ~, ~@10 e4@24 e4@13 ~]/2",
  AK: "[~@18 a3@5 ~@5 b3@5 ~ b3@4 ~@2 d4@7 ~@11 c#4@5 ~@3 a3@5 ~@17 e4@8, ~@4 c#4@11 ~ c#4@7 ~@41 c#4@5 ~@13 d4@11 ~@3, ~ a3 ~@14, ~@10 e4@23 ~ e4@23 ~ e4@17 ~ e4@11 ~@9]/4",
  AL: "~@6 a3 ~, d3, ~@10 f#4@11 ~@3, ~@16 d4@5 ~@3",
  AM: "[~@4 b3@5 ~@37 c#4 ~@17 e3@2 [f#3,a3]@3 ~ [g#3,b3]@2, ~@10 b3@12 ~@8 a3@6 ~@28 g#3 ~@7, ~@16 e4@23 ~ e4@12 ~@6 e4@14, ~@34 c#4@11 ~@7 d4@11 ~ d4@7 ~]/3", // F#m G#m
  AN: "[e3,g#3]@4 [e3,g#3]@2 [e3,g#3]@4 [e3,g#3]@3 ~@3 [e3,g#3]@2 [f#3,a3]@3 ~ [g#3,b3]@2", // E F#m G#m
})).s("gm_electric_guitar_jazz").gain(0.3).pan(0.3)

// chords · electric guitar jazz · "JAZZ GTR" · soft notes
const electric_guitar_jazz_2 = note(`<
  ~@5 A B ~ C D E F G H I J K L M N O P ~@2 Q R S T U V W X Y ~ Z AA AB ~@6 AC ~ AD AE AF AG AH AI AJ@2 AK AL AM AN AO
  AP AQ AR ~@7
>`.pickRestart({
  A: "~@6 c#4@9 ~@7 c#4 ~", B: "~@10 d4@5 ~@7 d4 ~, ~@6 g#3@17 ~", C: "~@12 g#3@5 ~@7", D: "~@12 a3@5 ~@7",
  E: "~ g#3@2 ~, e3@11 ~@13", F: "c#4@5 ~ a3@11 ~@5 c#4@2, ~@3 a3", G: "~@6 g#3@6 ~@10 d4 ~, e3",
  H: "~@6 a3@6 ~@10 c#4 ~, ~@2 c#4@3 ~@7", I: "~@6 g#3@11 ~@5 d4 ~, ~@2 d4@3 ~@7",
  J: "~@6 a3@11 ~ a3@4 ~@2, e3, ~@2 c#4@3 ~@7", K: "~@2 g#3@2 g#3@2 g#3 ~", L: "~@14 a3@4 a3@5 ~, d4@2 ~",
  M: "~@4 b3 ~ g#3@5 ~ e3@12", N: "~@4 c#4@10 ~@8 c#4 ~", O: "~ e3@2 e3", P: "~@4 a3 ~ f#4@4 ~@14", Q: "e3@18 a3@5 ~",
  R: "~@16 d#4@5 ~@3, f#3", S: "~@6 b3@10 ~@2 [f#3,b3]@5 ~, f#3@3 ~", T: "~@3 e3", U: "~@3 g#3@5 ~ e3@3, e3@17 ~@7",
  V: "~@6 a3@12 ~@4 c#4 ~, e3, ~@2 c#4@3 ~@7", W: "~ g#3 ~@2", X: "e3@2 ~", Y: "g#3@5 ~ g#3@11 ~@5 b3 ~",
  Z: "~@22 d4 ~", AA: "~@22 c#4 ~", AB: "~@3 g#3@5 ~@4", AC: "~@11 b3 ~@12", AD: "d4@3 ~@13 a3@2 ~@6",
  AE: "~@2 a3 ~@9, d3@7 ~", AF: "~@2 a3 a3@5 ~@4", AG: "~@2 a3 a3@6 ~@3, e3@17 ~@7", AH: "~ b3 ~@2, f#3",
  AI: "f#3@17 ~@7", AJ: "[~@18 g#3@12 g#3@11 ~@7]/2", AK: "[a3,c#4]@5 ~@19", AL: "~@6 g#3@5 ~@7 e3@4 g#3 ~",
  AM: "~@6 a3@11 ~@5 c#4 ~, e3@23 ~, ~@2 c#4@3 ~@7", AN: "e3@8 ~ g#3 ~@2", AO: "~ a3 ~@2, ~ a3@2 ~@9, ~@2 d4@3 ~@7",
  AP: "e3@2 ~ g#3@3 ~@3 g#3@2 b3, ~@3 e3@8 ~", AQ: "~@18 a3@5 ~, e3", AR: "e3@8 ~ e3@3, ~@9 g#3@2 ~",
})).s("gm_electric_guitar_jazz").gain(0.15).pan(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E B C F G H I H I B J F G K J E L M J C N@2 F O P Q E B R K C B E K S F R T U S V W X Y N@2 F Z I K S K AA F
  AB AC E B S K AD ~@2
>`.pickRestart({
  A: "a2@2 ~@4 a2@3 ~@3", B: "e2 ~ e2 ~", C: "a2@6 ~@6 a2@7 ~@5", D: "e2@5 ~@7 e2@7 ~@5", E: "a2 ~ a2 ~",
  F: "e2@6 ~@6 e2@7 ~@5", G: "d2@6 ~@6 d2@7 ~@5", H: "e2@7 ~@5 e2@6 ~@6", I: "a2@5 ~@7 a2@7 ~@5",
  J: "a2@7 ~@5 a2@6 ~@6", K: "e2@7 ~@5 e2@7 ~@5", L: "d2 ~ d2 ~", M: "d2@7 ~@5 d2@6 ~@6", N: "b1@7 ~@5 f#2@6 ~@6",
  O: "e2@2 ~@2 f#2 ~ g#2 ~", P: "a2@4 ~@8 a2@5 ~@7", Q: "e2@5 ~@7 e2@6 ~@6", R: "d2@3 ~@3 d2@4 ~@2",
  S: "a2@7 ~@5 a2@7 ~@5", T: "e2@7 ~@5 e2@9 ~@3", U: "a2@8 ~@4 d2@7 ~@5", V: "d2@5 ~@7 d2@5 ~@7",
  W: "d2@5 ~@7 d2@6 ~@6", X: "a2@5 ~@7 a2@4 ~@8", Y: "a2@5 ~@7 a2@5 ~@7", Z: "e2@7 ~@5 f#2@4 ~@2 g#2@4 ~@2",
  AA: "d2@7 ~@5 d2@8 ~@4", AB: "a2@6 ~@6 a2@5 ~@7", AC: "e2@6 ~@6 e2@5 ~@7", AD: "a2@7 ~@5 a2@8 ~@4",
})).s("gm_acoustic_bass").gain(0.4).pan(0.7)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@2 A B C D E F G H I J K F K L M N O F P N@2 Q R S T M U L I F M N V W X Y Z AA AB AC E AD AE N AF AG AH S AI AB U F
  Z AJ G N AK AL AM D U AN AO AA ~@2
>`.pickRestart({
  A: "~@16 e2@2 f#2 ~@3 g#2 ~", B: "a2@2 ~@4 a2 ~ a2 g#2 ~ f#2", C: "e2@3 ~@9 f#2@2 ~@4 g#2@2 ~@4",
  D: "a2@3 ~@13 a2 ~ g#2 ~@3 f#2 ~", E: "e2@2 ~@14 e2 ~ f#2 ~@3 g#2 ~", F: "a2 ~@5 a2 ~@5", G: "e2@2 ~@10 e2@3 ~@9",
  H: "d3@4 ~@8 d3@3 ~@9", I: "e2@3 ~@9 e2 ~@3 e2 ~ f#2@2 ~@2 g#2 ~", J: "a2@3 ~@19 f#2@2",
  K: "e2@3 ~@13 e2 ~ f#2@2 ~@2 g#2 ~", L: "a2@3 ~@9 a2@2 ~@10", M: "e2 ~@3 e2 ~@3", N: "d3 ~@3 d3 ~@3",
  O: "e2@2 ~@14 e2 ~ f#2@2 ~@2 g#2 ~", P: "a2@3 ~@9 a2@5 ~ a2 ~@5", Q: "a2 ~@3 a2 ~@3",
  R: "a2@3 ~@9 a2 ~@3 f#2@2 g#2@2 ~@2 a2 ~", S: "b2 ~@3 b2 ~@3", T: "b2@3 ~@9 b2 ~@3 f#2@2 g#2 ~@3 f#2 ~",
  U: "e2@3 ~@13 e2 ~ f#2 ~@3 g#2 ~", V: "e2@3 ~@9 e2 ~@3 e2@2 f#2 ~@3 g#2 ~", W: "a2@3 ~@9 a2 ~@3 a2@2 g#2 ~@3 f#2 ~",
  X: "e2@2 ~@10 e2 ~@3 e2@2 f#2 ~@3 g#2 ~", Y: "a2@3 ~@9 a2 ~@3 a2@2 g#2 ~@3 f#2@2",
  Z: "e2@2 ~@10 e2 ~@3 e2 ~ f#2 ~@3 g#2 ~", AA: "a2@2 ~@14 a2 ~ g#2 ~@3 f#2 ~", AB: "e2 ~@5 e2 ~@5",
  AC: "~@2 d3 ~@9 d3@2 ~@10", AD: "a2 ~@5 e2 ~@5", AE: "a2 ~@11", AF: "d3@2 ~@10 d3@3 ~@9", AG: "a2@4 ~@8 a2@3 ~@9",
  AH: "a2@3 ~@9 a2 ~@3 f#2@2 g#2 ~@3 a2 ~", AI: "b2@3 ~@13 f#2 ~ g#2@2 ~@2 f#2 ~", AJ: "a2@2 ~@10 a2@3 ~@9",
  AK: "e2@3 ~@9 e2 ~@3 e2 ~ f#2 ~@3 g#2 ~", AL: "a2@3 ~@13 a2@2 g#2@2 ~@2 f#2 ~",
  AM: "e2@3 ~@9 e2@2 ~@2 e2@2 f#2 ~@3 g#2 ~", AN: "a2@2 ~@10 a2 ~@3 a2 ~ g#2 ~@3 f#2 ~",
  AO: "e2@2 ~@10 e2@2 ~@2 e2 ~ f#2@2 ~@2 g#2 ~",
})).s("gm_electric_guitar_muted").gain(0.36).pan(0.7)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@6 A ~@7 A ~@9 B ~@2 B ~@2 A ~@7 A ~@9 B ~@2 B ~@2 A ~@7 A ~@5>".pickRestart({
  A: "~@5 x ~@6", B: "x",
})).gain(0.2)

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

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

stack(electric_guitar_jazz, electric_guitar_jazz_2, bass, electric_guitar_muted, kick, kick_soft, snare, ride)

More by Buddy Holly