Strudelify

Look at Me

Buddy Holly

KeyG majorTempo143 bpm
0:00/0:00
// Look at Me — Holly Buddy
// 143 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 73 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(143/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 2"
const piano = note(`<
  A B C@3 D E D E D F D E D E D E D F D G H I J K L M N O D E D E D F D P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH J
  K L I N O D AI D AJ D F D AK AL AM AN AO
>`.pickRestart({
  A: "~@4 d1!4",
  B: "[d4,g4,b4]@2 [d4,g4,d5] [d4,g4] [a4,c5] b4 [c5,e5] [a4,c5], g1 [d1,c4,f#4], d5@2 ~@2 b4@4 ~@2 d5 ~@5", // G G5 Am C Am D7
  C: "[d5 ~ b4@2 [d4,g4]@2 [d4,g4]@2 ~@2 [c4,f#4]@2 [c4,f#4]@2 ~@2 b3@2 ~@2 b3@2 [d4,g4]@2 a3@2 b3@2 c4@2 a3 ~ g3 ~ g3@2 [d4,g4]@2 [g3,d4,g4]@2 ~@2 [c4,f#4]@2 [c4,f#4]@2 [c4,f#4]@2, g1 d1 g1 d1 g1 d1, [d4,g4]@4 ~@6 b4 ~@3 [d4,g4]@4 [d4,g4]@4 ~@2 [c4,f#4]@4 ~@2 [d4,g4]@4 ~@8 g3 ~@5]/3", // G5 Cdim G5 Cdim G5 Cdim G5
  D: "[g3,b3,d4,g4] ~@3 [b3,d4,g4]@2 g3 ~ [a3,d4,f#4] ~ [a3,c4,d4,f#4]@2 ~@2 [g3,d4,g4] ~, g1 d1, ~@4 g3 ~@11", // G D D7 G5
  E: "~@2 [g3,d4,g4] ~@3 [a3,d4,f#4] ~@3 [d3,c4]@2 a3@2 c4 ~, g1 d1, ~@3 d3 ~ [d4,f#4]@2 ~, ~@10 a3 ~@5", // G5 D D7 D
  F: "~@2 [g3,d4,g4] ~@3 [a3,d4,f#4] ~@3 c4@2 a3@2 c4 ~, g1 d1, ~@5 [d4,f#4]@2 ~, ~@10 a3 ~@5", // G5 D
  G: "~@2 d4 g4 f4 d4 b3 d4, g1@4 d1@3 ~",
  H: "[a3,c4,e4,g4] ~@3 [c4,g4]@2 a3 ~ [c4,e4,g4] ~ [a3,c4,e4,g4]@2 ~@2 [g3,b3,d4] ~, c2@7 ~ c2@7 ~, ~@4 [a3,e4] ~@11", // Am7 C5 C Am7 G A5
  I: "~@2 [a3,d4] ~@3 [a3,e4]@2 ~@2 [a3,d4]@2 b3@2 a3 ~, g1!2", // D5 A5 D5
  J: "[a3,d4] ~@3 d4@2 c4 ~ [a3,d4] ~ [a3,c4,d4,f#4] ~@3 b3 ~, d2!2, ~@4 a3 ~@11", // D5 D7
  K: "~@2 a3@2 b3@2 [a3,d4]@2 ~@2 e4@2 d4 ~ b3 ~, g1!2, ~@5 a3@2 ~", // D5
  L: "[a3,d4] ~@3 [c4,e4,g4]@2 a3@2 [c4,e4] ~ [a3,e4,g4]@2 ~@2 [b3,d4] ~, c2!2, ~@4 a3 ~@11", // D5 C A7 Bm
  M: "~@2 [a3,d4] ~@3 [a3,e4]@2 ~@2 [a3,d4]@2 b3@2 a3 ~, d2!2", // D5 A5 D5
  N: "[a3,c#4,e4] ~@3 [c#4,e4]@2 a3@2 c#4 ~ [a3,c#4]@2 ~@2 [a3,d4] ~, a1!2, ~@4 a3 ~@11", // A C#m A D5
  O: "~@2 [a3,c4,d4,f#4] ~ a3@2 [c4,d4,f#4] ~ [c4,d4,f#4] ~ [a3,c4,d4,f#4] ~ [a3,c4,d4,f#4] ~ [a3,c4,d4,f#4] ~, d2@4 d1@3 ~, ~@4 d4 ~ a3@2 ~@8", // D7
  P: "~@2 [g3,d4,g4] ~@3 d5@2 ~@2 [d4,d5]@5 ~, g1 d1, ~@6 d4 ~@9", // G5 D
  Q: "[b4,b5]@2 ~@2 [b4,b5]@2 ~@2 [a4,a5]@3 ~ [c5,c6] ~ [c5,c6] ~, g1 d1", // B A C
  R: "[a#4,a#5]@2 [b4,b5] ~ [a#4,a#5]@2 [b4,b5] ~@3 [d4,d5] ~ [d4,d5] ~ [d4,d5] ~, g1 d1", // A# B A# B D
  S: "[b4,b5]@2 ~@2 [b4,b5] ~ [b4,b5] ~ [a4,a5] ~ [a4,a5] ~ [c5,c6] ~ [c5,c6] ~, g1 d1", // B A C
  T: "[a#4,a#5] ~ [b4,b5]@2 [a#4,a#5]@2 [b4,b5]@2 ~@2 [d4,d5]!3 ~ [d4,d5] ~, g1 d1", // A# B A# B D
  U: "[b4,b5] ~@3 [b4,b5]@2 ~@2 [a4,a5]@4 [c5,c6]@2 ~@2, g1 d1", // B A C
  V: "[b4,b5]@2 ~@2 [b4,b5]@2 [a4,a5]@2 ~@2 [a4,a5]@3 ~@3, g1 d1", // B A
  W: "[b4,b5]@2 [b4,b5]@3 ~ [g4,g5] ~ [a4,a5]@2 [g4,g5] ~ [f#4,f#5] ~ [a4,a5] ~, g1 d1", // B G A G F# A
  X: "[g1,g4,g5]@8 ~@2 [d4,d5] ~ [d4,d5] ~ [d4,d5] ~, ~ d1", Y: "[b3,b4] ~ [b3,b4] ~ [a3,a4]@2 [c4,c5] ~, g1 d1",
  Z: "[b3,b4]@2 [b3,b4] ~@3 [d3,d4]@2 ~@2 [d3,d4] ~ [d3,d4] ~ [d3,d4] ~, g1 d1", // B D
  AA: "b4@2 b3@2 b4 ~ b3 ~ [a3,a4]@3 ~ c5@2 c4@2, g1 d1", // A
  AB: "[b3,b4] ~ [b3,b4] ~@3 [d3,d4]@2 ~@2 [d3,d4] ~ [d3,d4] ~ [d3,d4] ~, g1 d1", // B D
  AC: "b4@2 b3@2 b4@2 b3@2 [a3,a4]@5 ~ [c4,c5]@2, g1 d1", AD: "b4@2 b3 ~ b4@2 b3 ~ [a3,a4]@4 ~@2 b4@2, g1 d1",
  AE: "b3@2 b4@2 b3@2 [g3,g4] ~ [a3,a4] ~ [g3,g4]@2 [f#3,f#4] ~ [a3,a4] ~, g1 d1", // G A G F# A
  AF: "[g3,g4]@3 ~ [d5,d6] ~ [g5,g6] ~ [f5,f6] ~ [d5,d6] ~ [b4,b5] ~ [d5,d6] ~, g1 d1", // G D G F D B D
  AG: "[a3,c4,e4,g4,e5] ~@3 [c4,g4]@2 [a3,f#5] ~ [a3,d4,f#4] ~ [a3,c4,e4,g4]@2 ~@2 [g3,b3,d4] ~, c2@7 ~ c2@7 ~, ~@4 [a3,e4] ~@5 g5 ~@5", // Am7 C5 D Am7 G A5
  AH: "d5 ~ [a3,d4] ~@3 [a3,e4]@2 ~@2 [a3,d4]@2 b3@2 a3 ~, g1!2", // D5 A5 D5
  AI: "~@2 [g3,d4,g4] ~@3 [a3,d4,f#4] ~ d7@2 c4@2 a3@2 c4 ~, g1 d1, ~@5 [d4,f#4,d6]@2 ~, ~@10 a3 ~@5", // G5 D
  AJ: "~@2 [g3,d4,g4] ~@3 [a3,d4,f#4] ~ d7@2 [a3,d6] ~ a3@2 c4 ~, g1 d1, ~@5 [d4,f#4]@2 ~, ~@5 c4 ~@2", // G5 D D5 D
  AK: "~@2 [g3,d4,g4] ~@3 [a3,d4,f#4] ~@3 c4@2 a3@2 c4 ~, g1 d1, ~@6 d5@2 ~@2 [d4,f#4,d5]@5 ~, ~@10 a3 ~@5", // G5 D
  AL: "[b4,d5,b5]@2 ~@2 [b4,d5,b5]@2 ~@2 [a4,a5]@6 [c5,e5] ~, ~@4 c5@2 ~ c6", // Bm A C
  AM: "[b4,d5] ~@3 [b4,d5] ~ [a4,c5,a5]@7 ~ [b4,b5]@2, b5@2 ~@2 b5@2 ~@8 d5 ~", // Bm Am B
  AN: "~@2 [b4,b5]@2 ~@2 [g4,g5]@2 [a4,a5]@2 [g4,g5]@2 [f#4,f#5] ~ [a4,a5] ~, ~@2 d5 ~@13", // B G A G F# A
  AO: "[g4,g5] ~@3 d6@2 ~@2 [g5,g6] ~@7, ~@4 d5 ~@11", // G
})).s("gm_piano").gain(0.33).pan(0.6)

// chords · piano · "A.PIANO 2" · soft notes
const piano_soft = note(`<
  ~@5 A B A B A B A B A B A B A B A ~@3 C ~ D ~@2 E A B A B A B A F ~@18 C ~ G ~@2 E A B A B A B A B ~@4
>`.pickRestart({
  A: "~@14 b3 ~", B: "~@2 b3 ~@3 c4 ~@9", C: "f#4 ~@5 a3 ~ f#4 ~@5 g3 ~", D: "f#4 ~@9 c4 ~@3 g3 ~",
  E: "~@4 [c4,f#4] ~@11", F: "~@2 b3 ~@13", G: "f#4 ~@9 c4@2 ~@2 g3 ~",
})).s("gm_piano").gain(0.22).pan(0.6)

// bass · acoustic bass · "ACOU BASS"
const bass = note("<~ A@20 B C D E B E F G A@24 B C D C B C F G A@11 H>".pickRestart({
  A: "g1@4 d2@3 d1", B: "c2!2", C: "g1!2", D: "d2!2", E: "g2!2", F: "a1!2", G: "d2@8 d1@6 d2 ~",
  H: "g2@2 ~@2 d2@2 ~@2 g2 ~@7",
})).s("gm_acoustic_bass").gain(0.33)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note("<~@37 A B C D E F G H I J K L M N O P ~@16 A B C Q>".pickRestart({
  A: "[g3,b3,d4,g4] ~@3 [b3,d4,g4]@3 ~ [d4,f#4] ~ [a3,d4,f#4] ~@3 [g3,b3,d4,g4] ~, ~@4 g3 ~@11", // G D G
  B: "~@2 [g3,b3,d4,g4] ~@3 [d4,f#4]@3 ~ a3 ~ [c4,d4,f#4] ~ a3 ~, ~@6 a3 ~@9", // G D D7
  C: "[b3,d4] ~@3 [g3,b3,d4,g4] ~@3 f#4 ~ [a3,d4,f#4]@2 ~@2 [g3,b3,d4,g4] ~", // Bm G D G
  D: "~@2 [g3,b3,d4] ~@3 [a3,c4,d4,f#4]@2 ~@2 a3 ~ [a3,c4,d4,f#4] ~ a3 ~", // G D7
  E: "[g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~@3 [a3,d4,f#4] ~ [a3,c4,d4]@2 ~@2 [g3,b3,d4,g4] ~", // G D D7 G
  F: "~@2 [g3,b3,d4] ~@3 [a3,c4,d4,f#4] ~@3 a3 ~ [a3,c4,d4,f#4]@2 a3 ~", // G D7
  G: "[g3,d4,g4] ~@3 [g3,b3,d4] ~@3 [a3,d4,f#4] ~ [a3,c4,d4,f#4]@2 ~@2 [g3,b3,d4,g4] ~", // G5 G D D7 G
  H: "~@2 [g3,d4] ~@3 [d4,f#4]@4 a3 ~ [a3,c4,d4,f#4] ~ a3 ~, ~@3 c4 ~@4, ~@6 a3 ~@9", // G5 D D7
  I: "[g3,b3,d4,g4] ~@3 [g3,b3,d4,g4]@2 g3 ~ [a3,d4,f#4] ~ [a3,d4]@2 ~@2 [g3,b3,d4,g4] ~", // G D D5 G
  J: "~@2 [g3,b3,d4,g4] ~@3 a3 ~ [c4,d4,f#4] ~ a3 ~ [a3,c4,d4,f#4] ~@3", // G D7
  K: "[g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~@3 [a3,c4,d4] ~ [a3,c4,d4,f#4]@2 ~@2 [b3,d4,g4] ~", // G D7 G
  L: "~@2 [g3,b3,d4,g4] ~@3 [a3,c4,d4,f#4] ~@3 a3 ~ [a3,c4,d4,f#4] ~@3", // G D7
  M: "[g3,b3,d4,g4] ~@3 [g3,b3,d4,g4]@2 ~@2 [a3,d4,f#4] ~ [a3,c4,d4,f#4]@2 ~@2 [g3,b3,d4,g4] ~", // G D D7 G
  N: "~@2 [g3,b3,d4,g4] ~@3 [a3,c4,d4,f#4]@2 ~@2 a3 ~ [a3,c4,d4,f#4] ~ a3 ~", // G D7
  O: "[g3,b3,d4,g4] ~@3 [g3,b3,d4,g4] ~@3 [a3,d4,f#4] ~ [a3,c4,d4,f#4]@2 ~@2 [g3,b3,d4,g4] ~", // G D D7 G
  P: "~@2 [g3,b3,d4,g4] ~@3 [g3,b3,d4,f4]@2 ~@2 g3 ~ [g3,b3,d4,f4]@2 [g3,b3,d4] ~", // G G7 G
  Q: "[g3,b3,d4,g4] ~@3 [a3,c4,d4,f#4] ~@3 [g3,b3,d4,g4] ~@7", // G D7 G
})).s("gm_acoustic_guitar_nylon").gain(0.27).pan(0.4)

// chords · acoustic guitar nylon · "NYLON GTR" · soft notes
const acoustic_guitar_nylon_2 = note("<~@37 A B C D E D F G H I J K ~@2 L ~@17 A B C ~>".pickRestart({
  A: "~@7 g3 a3 ~ c4 ~@5", B: "~@6 c4@2 ~@4 a3 ~@3", C: "[g3,g4] ~@7 d4 ~ c4@2 ~@4", D: "~@2 g4 ~@13",
  E: "~@8 c4 ~ f#4@2 ~@4", F: "b3 ~@3 g4 ~@11", G: "~@2 [b3,g4] ~@13", H: "~@5 [c4,f#4] ~@2", I: "~@8 a3 ~@7",
  J: "~@8 f#4 ~@5 g3 ~", K: "~@14 a3 ~", L: "~@8 c4 ~@7",
})).s("gm_acoustic_guitar_nylon").gain(0.16).pan(0.4)

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

// drums · rim
const rim = s("rim").struct("<~ [~ x ~ x]!19 [~ x ~ x!5] [~ x ~ x]!51 [~ x ~@2]>").gain(0.38)

// drums · ride
const ride = s("rd").struct("<~ [x!8]!19 [x ~ x!6] [x!8]!51 [x!3 ~ x ~@3]>").gain(0.27)

stack(piano, piano_soft, bass, acoustic_guitar_nylon, acoustic_guitar_nylon_2, kick, rim, ride)

More by Buddy Holly