Strudelify
That'll Be The Day cover art

That'll Be The Day

That'll Be The Day

Buddy Holly

KeyF majorTempo127 bpm
0:00/0:00
// That'll Be The Day — Buddy Holly
// 127 bpm, 4/4, key F 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 77 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(127/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.

// bass · acoustic bass
const bass = note(`<
  ~@9 A B C D E F B G H I E J K B L M N O C D E F C G P I Q C K R S T U O C D E F V G P I W J X Y S T U O C D Z F AA G
  AB O C D E F AA G AC AD AE@2
>`.pickRestart({
  A: "~@4 c2 ~ c2@2 ~@2 f2@4 ~@2 f2@7 ~", B: "bb1@3 ~ bb1 ~ bb1@3 ~ bb1 ~ bb1@3 ~ bb1 ~ bb1@3 ~ bb1 ~",
  C: "bb1@3 ~ bb1 ~ bb1@3 ~ bb1 ~ bb1@3 ~ bb1 ~ bb1@3 ~ d2 ~",
  D: "f2@2 ~@2 f2 ~ f2@3 ~ f2 ~ f2@2 ~@2 f2 ~ f2@2 ~@2 f2 ~", E: "f2@2 ~@2 f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~ c2 ~",
  F: "bb1@3 ~ bb1 ~ bb1@2 ~@2 bb1 ~ bb1@3 ~ bb1 ~ bb1@2 ~@2 bb1 ~", G: "f1 ~@5",
  H: "~@4 c2 ~ c2@3 ~ f2@4 ~@2 f2@2 f2@3 ~ c2@2", I: "bb1@3 ~ bb1 ~ bb1@2 ~@2 bb1 ~ bb1@3 ~ bb1 ~ bb1@3 ~ d2 ~",
  J: "bb1@3 ~ bb1 ~ bb1@2 ~@2 bb1 ~ bb1@3 ~ bb1 ~ bb1@2 ~@2 d2 ~",
  K: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~ c2 ~ f2@2 c2@2", L: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@2 ~@2 f2 ~ f2@3 ~ c2@2",
  M: "g1@3 ~ g1 ~ g1@3 ~ g1 ~ g1@2 ~@2 g1 ~ g1@3 ~ g1 ~", N: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@2 ~@2 c2 ~ g1@3 ~ c2 ~",
  O: "bb1@3 ~ bb1 ~ bb1@3 ~ bb1 ~ bb1@3 ~ bb1 ~ bb1@2 ~@2 bb1 ~", P: "~@4 c2 ~ c2@3 ~ f2@4 ~@2 f2 ~ f2@3 ~ c2 ~",
  Q: "f2@2 ~@2 f2 ~ f2@3 ~ f2 ~ f2@2 ~@2 f2 ~ f2@3 ~ c2 ~",
  R: "bb1@2 ~@2 bb1 ~ bb1@3 ~ bb1 ~ bb1@3 ~ bb1 ~ bb1@3 ~ bb1 ~",
  S: "f2@3 ~ f2 ~ f2@2 ~@2 f2 ~ f2@2 ~@2 f2 ~ f2@3 ~ c2@2", T: "g1@3 ~ g1 ~ g1@2 ~@2 g1 ~ g1@2 ~@2 g1 ~ g1@3 ~ g1 ~",
  U: "c2@3 ~ c2 ~ c2@2 ~@2 c2 ~ c2@2 ~@2 c2 ~ g1@3 ~ c2 ~",
  V: "bb1@2 ~@2 bb1 ~ bb1@2 ~@2 bb1 ~ bb1@3 ~ bb1 ~ bb1@3 ~ bb1 ~",
  W: "f2@2 ~@2 f2 ~ f2@2 ~@2 f2 ~ f2@3 ~ f2 ~ f2@3 ~ c2 ~", X: "f2@6 c2@5 ~ d2@5 ~ f2@3 ~ c2 ~",
  Y: "bb1@3 ~ bb1 ~ bb1@2 ~@2 bb1 ~ bb1@2 ~@2 bb1 ~ bb1@3 ~ bb1 ~", Z: "f1@2 ~@2 f1@3 ~ f1@2 ~@2 ab1@3 ~ ab2@7 ~",
  AA: "bb1@2 ~@2 bb1 ~ bb1@2 ~@2 bb1 ~ bb1@3 ~ bb1 ~ bb1@3 ~ d2 ~", AB: "~@4 c2 ~ c2@3 ~ f2@4 ~@2 f2@7 ~",
  AC: "~@4 c2 ~ c2@3 ~ f2@8 ~@4 f2@2", AD: "c3 bb2 a2 ab2 g2 f2 eb2 d2 c2 bb1 a1 ab1", AE: "[f1 ~ ab1@3 f1@16 ~@3]/2",
})).s("gm_acoustic_bass").gain(0.33)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@10 A@2 B@2 A@2 C D E F E G E G H I J@2 K@2 A@2 C L E G E M E G N O P@2 K@2 J@2 Q L ~@3 M ~@2 N O A@2 F R J@2 C D A@2
  K@2 S@2 C D ~ T@2
>`.pickRestart({
  A: "[[bb3,d4]@25 ~@23, f4@47 ~]/2", B: "[[c4,f4], a3@25 ~@23]/2", C: "[a3,c4,f4] ~@5",
  D: "~@4 [g3,c4,e4]@4 ~@2 [a3,c4,f4]@5 ~@9", E: "[bb3,d4,f4]@23 ~", F: "[a3,c4,f4]", G: "[a3,c4,f4]@23 ~",
  H: "[g3,b3,d4]@23 ~", I: "[g3,bb3,c4,e4]@23 ~", J: "[[bb3,d4]@25 ~@23, f4@23 ~]/2", K: "[[c4,f4]@47 ~, a3@25 ~@23]/2",
  L: "~@4 [g3,c4,e4]@5 ~ [a3,c4,f4]@5 ~@9", M: "[a3,c4,f4]@11 ~", N: "[g3,b3,d4]@11 ~", O: "[g3,bb3,c4,e4]@11 ~",
  P: "[[d4,f4]@47 ~, bb3@25 ~@23]/2", Q: "[a3,c4,f4] ~@7", R: "[a3,c4,f4]@11 ~ [ab3,c4,eb4]@11 ~",
  S: "[[bb3,d4]@25 ~@23, f4@15 ~]/2", T: "[~@2 [ab3,c4,eb4]@3 [a3,c4,f4]@16 ~@3]/2",
})).s("gm_synth_strings_1").gain(0.35)

// chords · alto sax
const alto_sax = note(`<
  ~ A B C D E F G H@2 I J D E F K L@2 M@4 N O P Q I C D R F S T@2 ~@16 U V@2 W X Y P Z I C D AA F K H@2 AB@2 AC@2 AD@2
  T@2 ~@3
>`.pickRestart({
  A: "~@16 ab4@7 ~", B: "[g4,d5]@4 [f4,d5] ~ [f4,d5]@4 [d4,bb4]@2 [f4,d5]@6 ~@4 d4@2",
  C: "f4@3 ~ f4@5 ~ f4@2 g4@3 ~ ab4@6 ~@2", D: "[g4,c5]@4 [f4,c5] ~ [f4,c5]@3 ~ [d4,a4]@2 [f4,a4]@7 ~@3 d4 ~",
  E: "f4@3 ~ f4@5 ~ f4 ~ g4@4 ab4@5 ~ ab4 ~",
  F: "[g4,d5]@3 ~ [f4,d5] ~ [f4,d5]@3 ~ bb4@2 [f4,d5]@3 ~ [f4,d5]@2 ~@4 d4 ~, ~@10 d4 ~@13", // G5 Dm
  G: "f4@3 ~ f4 ~ f4@2 ~@2 g4@5 ~ f4@4 ~@2 f4@2",
  H: "[[ab4,c5]@3 ~ [a4,f5]@2 [ab4,c5]@3 ~ [a4,f5]@2 [f4,a4]@4 [d4,f4]@4 ~@2 [c4,e4]@4 ~@2 e4 ~ e4@3 ~ f4@4 ~@2 ab4@7 ~]/2", // Ab Dm Ab Dm F Dm C
  I: "[g4,d5]@4 [f4,d5] ~ [f4,d5]@4 [d4,bb4]@2 [f4,d5]@6 ~@4 d4 ~", J: "f4@3 ~ f4@5 ~ f4@2 g4@4 ab4@6 ~@2",
  K: "f4@4 f4@2 ~@4 g4@5 ~ f4@6 f4 ~, ~@3 f4@5 ~@4",
  L: "[[ab4,c5]@3 ~ [a4,f5]@2 [ab4,c5]@3 ~ [a4,f5]@2 [f4,a4]@4 [d4,f4]@4 ~@2 [c4,e4]@4 ~@2 e4 ~ e4@3 ~ f4@4 ~@2 ab4@5 ~ f4 ~]/2", // Ab Dm Ab Dm F Dm C
  M: "[g4@3 ~ f4 ~ f4@3 ~ d4@2 f4@3 ~ f4 ~ g4@3 ~@7 ab4@5 ~ ab4@2 ~@4 g4@3 ~@3 g4@5 ~ f4 ~ f4@3 ~ d4 ~ f4@3 ~ f4 ~ g4@3 ~@9 ab4@3 ~ g4 ~ f4@11 ~, ~@22 f4@14 f4@11 ~@23 f4@14 ~@12]/4",
  N: "~@4 g4@2 f4@3 ~ d4 ~ f4@3 ~ f4 ~ g4@3 ~ f4@2", O: "~@4 ab4@2 g4@3 ~ d4 ~ f4@3 ~ f4@2 g4@3 ~ f4@2",
  P: "g4@4 ~@2 g4@4 ~@2 g4@4 ~@2 g4@5 ~", Q: "c4@4 ~@2 c4@4 ~@2 c4@3 ~ ab4@7 ~",
  R: "f4@3 ~ f4@4 ~@2 f4 ~ g4@4 ab4@5 ~ ab4 ~", S: "f4@4 f4@2 ~@4 g4@5 ~ f4@6 f4@2, ~@3 f4@5 ~@4",
  T: "[[ab4,c5]@3 ~ [a4,f5]@2 [ab4,c5]@3 ~ [a4,f5]@2 [f4,a4]@4 [d4,f4]@4 ~@2 [c4,e4]@4 ~@2 e4 ~ e4@3 ~ f4@4 ~@10]/2", // Ab Dm Ab Dm F Dm C
  U: "~@4 ab4@2 f4@3 ~ d4@2 f4@2 ~@2 f4 ~ g4@4 f4@2",
  V: "[~@4 ab4@2 f4@3 ~ d4@2 f4@2 ~@2 f4@2 g4@4 f4@4 ~@2 ab4@2 f4@4 d4@2 f4@3 ~ f4 ~ g4@4 f4 ~]/2",
  W: "ab4@5 ~ g4@4 ~@2 f4@4 ~@8", X: "~@4 ab4@2 f4@3 ~ d4 ~ f4@3 ~ f4 ~ g4@3 ~ f4@2",
  Y: "~@4 ab4@2 g4@3 ~ d4 ~ f4@3 ~ f4@5 ~@3", Z: "c4@4 ~@2 c4@5 ~ c4@2 ~@2 ab4@7 ~",
  AA: "[f4,a4]@3 ~ [f4,a4]@3 ~ [f4,a4]@4 [g4,bb4]@3 ~ [ab4,c5]@5 ~ ab4 ~", // F Gm Ab
  AB: "[[g4,d5]@4 [f4,d5] ~ [f4,d5]@4 [d4,bb4]@2 [f4,d5]@6 ~@4 f5@5 ~ f5@3 ~@3 f5@4 ~@2 f5@5 ~@3]/2", // G5 Dm Gm Dm
  AC: "[[g4,c5]@4 [f4,c5] ~ [f4,c5]@3 ~ [d4,a4]@2 [f4,a4]@7 ~@3 f5@4 ~@2 f5@3 ~@3 f5@4 ~@2 f5@5 ~@3]/2", // C5 F5 D5 F
  AD: "[[g4,d5]@3 ~ [f4,d5] ~ [f4,d5]@3 ~ bb4@2 [f4,d5]@6 ~@4 f5@4 ~@2 f5@2 ~@4 f5@4 ~@2 f5@5 ~@3, ~@10 d4 ~@37]/2", // G5 Dm
})).s("gm_alto_sax").gain(0.45)

// other · overdriven guitar
const overdriven_guitar = note("<~@48 A B ~@11 C ~@11 D E F@2>".pickRestart({
  A: "a4@2 f4 ~ f4@2 f4@2 d4 ~ c4 ~ a4@2 f4 ~ f4@2 f4@2 c4@2 a4 ~", B: "a4@2 ~@2 f4@2 f4@2 ~@2 c4@7 ~@7",
  C: "[f2,c3]@3 ~ [f2,c3]@2 ~@2 [f2,c3]@2 ~@2 [ab2,eb3]@10 ~@2", D: "~@11 f4",
  E: "c5 bb4 a4 ab4 g4 f4 eb4 d4 c4 bb3 a3 ab3", F: "[f3@2 gb3 g3 ab3@5 ~ f3@32 ~@6]/2",
})).s("gm_overdriven_guitar").gain(0.4).pan(0.7)

// other · distortion guitar
const distortion_guitar = note("<~@48 A B ~@3 C D ~@18 E F G@2>".pickRestart({
  A: "~@2 a4 ~ bb4@2 a4@2 f4 ~ a4@2 c5@2 a4 ~ bb4@2 a4@2 f4@2 a4 ~", B: "c5@2 ~@2 bb4@2 a4@2 ~@2 f4@7 ~@7",
  C: "f5@2 ~@2 f5@3 ~ f5@3 ~ f5@2 ~@2 f5@2 ~@2 f5@2 ~@2", D: "f5@5 ~@19", E: "~@11 f4",
  F: "c5 bb4 a4 ab4 g4 f4 eb4 d4 c4 bb3 a3 ab3", G: "[f3@2 gb3 g3 ab3@4 ~@2 a3@32 ~@6]/2",
})).s("gm_distortion_guitar").gain(0.4).pan(0.3)

// chords · electric guitar muted
const electric_guitar_muted = note("<~@2 A B C D E F G ~@41 H I J K L M N O ~@19>".pickRestart({
  A: "[bb2,f3,bb3]@2 ~@2 bb2@2 [bb2,bb3]@3 ~ bb2@2 [f3,bb3]@2 ~@2 bb2@2 [bb2,db3]@4 [bb2,d3]@2, ~@6 g3 ~@5 bb2@4 ~@2 bb3 ~@5", // Bb5 Bb Bb5 Bbm Bb
  B: "[bb2,f3,bb3]@2 ~@2 bb2@2 [bb2,bb3]@3 ~ bb2@2 [f3,bb3]@2 ~@2 bb2@2 [g3,bb3] ~@3 bb2@2, ~@6 g3 ~@5 bb2@4 ~@2 bb2@3 ~@3", // Bb5 Bb Bb5 Gm
  C: "[f2,f3]@3 ~ f2@2 [f2,d3]@4 f2@2 f2@4 [f2,c3]@2 [f2,d3]@4 [f2,c3]@2, c3 ~@5 f3@2 ~@2 c3@4 ~@10, ~@12 f3@2 ~@4 f3 ~@5", // F Dm F5 Dm F5
  D: "[f2,c3,f3]@2 ~@2 f2@2 [d3,f3] ~@3 f2@2 [c3,f3]@2 ~@2 f2@2 [f2,d3,f3]@2 ~@2 f2@2, ~@3 f2@2 ~ f2@2 ~@4", // F5 Dm F5 Dm
  E: "[bb2,f3,bb3]@2 ~@2 bb2@2 [bb2,bb3]@3 ~ bb2@2 [f3,bb3]@2 ~@2 bb2@2 [bb2,db3]@4 [bb2,d3]@2, ~@6 g3 ~@5 bb2@4 ~@2 bb3@2 ~@4", // Bb5 Bb Bb5 Bbm Bb
  F: "[bb2,f3,bb3]@2 ~@2 bb2@2 [g3,bb3] ~@3 bb2@2 [f3,bb3]@2 ~@2 bb2@2 [g3,bb3] ~@3 bb2@2, ~@6 bb2@3 ~@3 bb2@4 ~@2 bb2@4 ~@2", // Bb5 Gm Bb5 Gm
  G: "[f2,c3,f3] ~@5", // F5
  H: "[bb2,f3,bb3]@2 ~@2 bb2@2 [g3,bb3] ~@3 bb2@2 [f3,bb3]@2 ~@2 bb2@2 [bb2,db3]@4 [bb2,d3]@2, ~@6 bb2@3 ~@3 bb2@4 ~@2 bb3@2 ~@4", // Bb5 Gm Bb5 Bbm Bb
  I: "[f2,c3,f3]@2 ~@2 f2@2 [d3,f3] ~@3 f2@2 [c3,f3]@2 ~@2 f2@2 [f2,f3]@3 ~ f2@2, ~@6 f2@3 ~@3 f2@4 ~@2 d3 ~@5", // F5 Dm F5 F
  J: "[bb2,f3,bb3]@2 ~@2 bb2@2 [bb2,g3]@3 ~ bb2@2 [bb2,bb3]@3 ~ [bb2,f3]@2 [bb2,g3]@4 [bb2,f3]@2, ~@6 bb3 ~@3 f3@4 ~@4 bb3 ~@5", // Bb5 Eb Bb Bb5 Eb Bb5
  K: "[c3,f3] ~@3 f2@2 [d3,f3] ~@3 f2@2 [f2,c3,f3]@2 ~@2 f2@2 [d3,f3] ~@3 f2@2, f2@3 ~@3 f2@3 ~@9 f2@4 ~@2", // F5 Dm F5 Dm
  L: "[bb2,f3,bb3]@2 ~@2 bb2@2 [g3,bb3] ~@3 bb2@2 [bb2,f3,bb3]@2 ~@2 bb2@2 [bb2,db3]@4 [bb2,d3]@2, ~@6 bb2@3 ~@9 bb3 ~@5", // Bb5 Gm Bb5 Bbm Bb
  M: "[f2,c3,f3]@2 ~@2 f2@2 [d3,f3] ~@3 f2@2 [f2,c3,f3]@2 ~@2 f2@2 [f2,f3]@3 ~ f2@2, ~@6 f2@3 ~@9 d3 ~@5", // F5 Dm F5 F
  N: "[g2,d3,f3]@2 ~@2 g2@2 [g2,e3]@4 g2@2 [g2,f3]@3 ~ [g2,d3]@2 [g2,e3]@4 [g2,d3]@2, ~@6 g3 ~@3 d3@4 ~@4 g3 ~@5", // G7 C G7 G5 C G5
  O: "[c3,g3,bb3]@2 ~@2 c3@2 [a3,c4] ~@3 c3@2 [c3,g3,bb3]@2 ~@2 c3@2 [a3,c4] ~@3 c3@2, ~@2 c3 ~@3 c3 ~", // C7 Am C7 Am
})).s("gm_electric_guitar_muted").gain(0.4).pan(0.6)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  ~@10 A B C D A E ~@8 F ~ B G C@2 A H ~@8 I ~ B G C J B E ~@9 K A@2 D ~ L A ~@2 A G C J B@2 ~@5
>`.pickRestart({
  A: "~@2 g3 ~@3 g3 ~", B: "~@6 g3@4 ~@8 g3@3 ~@3", C: "~@6 d3@4 ~@8 d3@3 ~@3", D: "~@6 d3@3 ~@9 d3@4 ~@2",
  E: "~@3 g3@2 ~@4 g3@2 ~", F: "~@6 e3 ~", G: "~@6 g3@3 ~@9 g3@4 ~@2", H: "~@2 g3 ~@5", I: "~@6 e3@3 ~@9 e3@4 ~@2",
  J: "~@3 d3@2 ~@4 d3@2 ~", K: "~@2 a3 ~@3 a3 ~", L: "~@4 [bb2,f3]@2 g3@3 ~@9 g3@3 ~@3",
})).s("gm_distortion_guitar").gain(0.42).pan(0.4)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@9 A B C D E F C G H I E I E I E J K L I M E F I G A I N C E I E O P Q R S E L T U V W X Y Z Y X J AA B C AB AC AD T
  U AE AF I M AG F I U V ~ AH@2
>`.pickRestart({
  A: "~@2 [e3,g3,bb3,c4,e4]!2 ~ [f3,a3,c4,f4]@3 ~@4", // C7 F
  B: "[f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] [bb3,d4]@2 [f3,bb3,d4,f4] [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] [bb3,d4]@2 [f3,bb3,d4,f4], ~@6 [f3,f4] ~@11 [f3,f4]@2 ~@4", // Bb F
  C: "[f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [bb3,d4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4] ~, ~@3 f3 ~@8, ~@6 f4 ~@17", // Bb
  D: "[f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,c4]@2 ~@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,c4,f4] ~@3 [f3,a3,c4,f4]@2, ~@3 a3@2 ~@4 a3@2 ~, ~@6 f4 ~@17", // F F5 F F5 F
  E: "[f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [a3,c4]@4 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@4 [f3,a3,c4,f4] ~, ~@6 [f3,f4] ~@17", // F Am F
  F: "[f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] [bb3,d4]@2 [f3,bb3,d4,f4] [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] [bb3,d4]@2 [f3,bb3,d4,f4], ~@6 [f3,f4] ~@11 [f3,f4] ~@5", // Bb F
  G: "[f3,a3,c4,f4] ~@5", H: "~@4 [e3,g3,bb3,c4,e4]@2 [e3,g3,bb3,c4,e4]@3 ~ [f3,a3,c4,f4]@7 ~@7",
  I: "[f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [bb3,d4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4] ~, ~@6 [f3,f4] ~@17", // Bb F
  J: "[d3,g3,b3,f4,g4]@4 [d3,g3,b3,f4,g4]@2 [d3,g3,b3,f4,g4] ~@3 [d3,g3,b3,f4,g4]@2 [d3,g3,b3,f4,g4]@4 [d3,g3,b3,f4,g4]@2 [d3,g3,b3,f4,g4]@4 [d3,g3,b3,f4,g4] ~", // G7
  K: "[e3,g3,bb3,c4,e4]@4 [e3,g3,bb3,c4,e4]@2 [e3,g3,c4,e4] ~@3 [e3,g3,bb3,c4,e4]@2 [e3,g3,bb3,c4,e4]@4 [e3,g3,bb3,c4,e4]@2 [e3,g3,bb3,c4,e4]@4 [e3,g3,bb3,c4,e4] ~, ~@3 bb3@2 ~@7", // C7 C C7
  L: "[f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] [bb3,d4]@2 [f3,bb3,d4,f4] [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] [bb3,d4]@2 [f3,bb3,d4,f4], ~@6 [f3,f4] ~@11 f3@2 ~@4, ~@18 f4 ~@5", // Bb F
  M: "[f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,c4,f4] ~@3 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,c4,f4] ~@3 [f3,a3,c4,f4]@2, ~@3 a3@2 ~@4 a3@2 ~", // F F5 F F5 F
  N: "[f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [a3,c4]@4 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@4 [f3,a3,c4,f4] ~, ~@3 f3 ~@8, ~@6 f4 ~@17", // F Am F
  O: "[d3,g3,b3,f4,g4]@4 [d3,g3,b3,f4,g4]@2 [d3,f4,g4]@2 ~@2 [d3,g3,b3,f4,g4] ~ [d3,g3,b3,f4,g4]@4 [d3,g3,b3,f4,g4]@2 [d3,g3,b3,f4,g4]@4 [d3,g3,b3,f4,g4] ~, ~@3 [g3,b3]@2 ~@7", // G7 G
  P: "[e3,g3,bb3,c4,e4]@4 [e3,g3,bb3,c4,e4]@2 [e3,g3,c4,e4] ~@3 [e3,g3,bb3,c4,e4]@2 [e3,g3,bb3,c4,e4]@4 [e3,g3,bb3,c4,e4]@2 [e3,g3,bb3,c4,e4]@3 ~ [e3,g3,bb3,c4,e4] ~, ~@3 bb3@2 ~@7", // C7 C C7
  Q: "[f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [f3,d4,f4] ~@3 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@3 ~ [f3,bb3,d4,f4] ~, ~@3 bb3@2 ~@7", // Bb Dm Bb
  R: "[f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4] ~", // Bb
  S: "[f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,c4,f4] ~@3 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,c4,f4]@2 ~@2 [f3,a3,c4,f4]@2, ~@3 a3@2 ~@4 a3@2 ~", // F F5 F F5 F
  T: "[f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [bb3,d4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4] ~, ~@3 [f3,f4] ~@8", // Bb F
  U: "[f3,a3,c4,f4]@5 ~@19", V: "~@4 [e3,g3,bb3,c4,e4]@2 [e3,g3,bb3,c4,e4]@2 ~@2 [f3,a3,c4,f4]@11 ~@3",
  W: "[f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] ~@3 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] ~@3 [f3,bb3,d4,f4] ~", // Bb
  X: "[f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,a3,c4,f4] ~@3 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@4 [f3,a3,c4,f4] ~", // F
  Y: "[f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] ~@3 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4]@4 [f3,bb3,d4,f4] ~", // Bb
  Z: "[f3,a3,c4,f4]@4 ~@2 [f3,a3,c4,f4]@3 ~@3 [f3,a3,c4,f4]@3 ~@3 [f3,a3,c4,f4]@3 ~@3", // F
  AA: "[e3,g3,bb3,c4,e4]@4 [e3,g3,bb3,c4,e4]@2 [e3,g3,bb3,c4,e4] ~@3 [e3,g3,bb3,c4,e4]@2 [e3,g3,bb3,c4,e4]@4 [e3,g3,bb3,c4,e4]@2 [e3,g3,bb3,c4,e4]@4 [e3,g3,bb3,c4,e4] ~", // C7
  AB: "[f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,c4,f4]@2 ~@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@3 ~ [f3,a3,c4,f4] ~, ~@3 a3@2 ~@7", // F F5 F
  AC: "[f3,a3,c4,f4]@3 ~ [f3,a3,c4,f4]@3 ~ [f3,a3,c4,f4]@2 ~@2 [eb3,ab3,c4,ab4]@2 ~@2 [eb3,ab3,c4,ab4]@2 ~@2 [eb3,ab3,c4,ab4]@3 ~", // F Ab
  AD: "[bb3,d4]@3 [bb3,d4]@2 [f3,bb3,d4,f4] [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] [bb3,d4]@2 [f3,bb3,d4,f4], [f3,f4] ~@5 [f3,f4] ~@11 [f3,f4] ~@5", // Bb F
  AE: "~@2 [e3,g3,bb3,c4,e4]!2 ~ [f3,a3,c4,f4]@5 ~@2", // C7 F
  AF: "[f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] [bb3,d4]@2 [f3,bb3,d4,f4] [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] [bb3,d4]@2 [f3,bb3,d4,f4], ~@3 f3 ~@5 f3 ~@2, ~@6 f4 ~@11 f4 ~@5", // Bb
  AG: "[f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [a3,c4]@4 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 [a3,c4]@4 [f3,a3,c4,f4] ~, ~@6 [f3,f4] ~@11 [f3,f4] ~@5", // F Am F Am F
  AH: "[~@4 [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 ~@2 [f3,a3,c4,f4]@33 ~@5]/2", // F
})).s("gm_acoustic_guitar_steel").gain(0.42).pan(0.7)

// other · synth drum
const synth_drum = note(`<
  ~ A B C D E F G H I D C J K F G H L M N M O P Q R@2 D C D S T G H U ~@15 V B@2 W X Y@2 R@2 D C J Z F G H I D AA J AB D
  AC AD U ~@3
>`.pickRestart({
  A: "~@16 db4 ~@7", B: "eb4 ~@3 db4 ~ eb4 ~@3 db4 ~ eb4 ~@9 db4 ~", C: "eb4 ~@3 db4 ~@5 eb4 ~ db4 ~@11",
  D: "db4 ~@3 eb4 ~ db4 ~@3 eb4 ~ db4 ~@9 db4 ~", E: "eb4 ~@3 db4 ~@5 eb4 ~ db4 ~@9 db4 ~",
  F: "eb4 ~@3 db4 ~ eb4 ~@3 db4 ~ eb4 ~@3 db4 ~@5 eb4 ~", G: "db4 ~@3 eb4 ~ db4 ~@3 eb4 ~@5 db4 ~@7",
  H: "eb4 ~@3 db4 ~ eb4 ~@3 db4 ~ eb4 ~@11", I: "~@4 db4 ~ eb4 ~@3 db4 ~@5 eb4 ~@7",
  J: "db4 ~@3 eb4 ~ db4 ~@3 eb4 ~ db4 ~@9 eb4 ~", K: "db4 ~@3 eb4 ~@5 db4 ~ eb4 ~@9 db4 ~",
  L: "~@4 db4 ~ eb4 ~@3 db4 ~@5 eb4 ~@5 eb4 ~", M: "db4 ~@3 eb4 ~ db4 ~@3 eb4 ~ db4 ~@3 eb4 ~ db4 ~@3 eb4 ~",
  N: "~@4 db4 ~@5 eb4 ~ db4 ~@3 eb4 ~@7", O: "~@4 db4 ~ eb4 ~@3 db4 ~@11 eb4 ~",
  P: "db4 ~@3 eb4 ~ db4 ~@3 eb4 ~ db4 ~@3 eb4 ~ db4 ~@2 eb4 ~@2", Q: "~@3 db4 ~@6 eb4 ~ db4 ~@3 eb4 ~@7",
  R: "db4 ~@5 eb4 ~@5 db4 ~@5 eb4 ~@5", S: "eb4 ~@3 db4 ~@5 eb4 ~ db4 ~@9 eb4 ~",
  T: "db4 ~@3 eb4 ~ db4 ~@3 eb4 ~ db4 ~@3 eb4 ~@5 eb4 ~", U: "~@4 db4 ~ eb4 ~@3 db4 ~@13", V: "~@19 db4 ~@4",
  W: "eb4 ~@3 db4 ~ eb4 ~@3 db4 ~ eb4 ~@5 db4 ~@5", X: "eb4 ~@5 db4 ~@5 eb4 ~@11",
  Y: "~@4 db4 ~ eb4 ~@3 db4 ~ eb4 ~@3 db4 ~@5 eb4 ~", Z: "db4 ~@3 eb4 ~@3 db4 ~@3 eb4 ~@9 db4 ~",
  AA: "~@3 eb4 ~@6 db4 ~@13", AB: "~@4 db4 ~@5 eb4 ~@5 db4 ~@7", AC: "~@4 eb4 ~@5 db4 ~@13",
  AD: "db4 ~@3 eb4 ~ db4 ~@3 eb4 ~ db4 ~@11",
})).s("gm_synth_drum").gain(0.11)

// drums · kick
const kick = s("bd").struct(`<
  ~@10 A@5 B ~ C A@7 D A@5 B E F A@5 B A G A@5 B E ~ A@7 H A@3 B A@2 E I A@5 B E ~ J K L
>`.pickRestart({
  A: "x!2", B: "x ~@5 x ~@4 x", C: "~@8 x ~ x!2", D: "x ~ x ~@3 x ~@2 x ~ x", E: "x", F: "x ~@2 x ~ x ~@2 x ~ x!2",
  G: "~ x!2 ~ x!2 ~ x!2 ~ x!2", H: "x!4", I: "~@3 x ~ x ~@3 x ~@2", J: "x ~ x ~@2 x ~@2 x ~@2 x", K: "~@3 x ~ x ~@6",
  L: "~@3 x",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct(`<
  ~@9 A B@5 C D E B@7 F B@3 G B H ~ I B@3 J B C K L B@3 M B@2 ~ N B@3 C B@3 O B@3 P B Q ~ R B@5 C ~ S T D ~
>`.pickRestart({
  A: "~@2 x!2 ~ x ~@2 x!2 ~@2", B: "~ x ~ x", C: "~@3 x ~@4 x!2 ~@2", D: "x", E: "~@2 x!2 ~ x ~@3 x ~@2",
  F: "~@3 x ~ x!7", G: "~@3 x ~@5 x ~ x", H: "~@3 x ~@4 x!3 ~", I: "~@3 x", J: "~@3 x ~@4 x!4",
  K: "~@6 x ~@11 x ~@3 x!2", L: "x!2 ~@2 x ~@2 x ~ x ~@2", M: "~ x ~ x ~@4 x!2 ~ x", N: "~@2 x!2 ~ x ~@2 x!2 ~ x",
  O: "x!12", P: "x ~@3 x ~@3 x ~@3 x ~@3 x!3 ~@5", Q: "~@3 x ~@5 x!3", R: "~ x ~@4", S: "~@2 x!2 ~ x ~@5 x",
  T: "x!3 ~@9",
})).gain(0.45)
// … 43 more lines

More by Buddy Holly