Strudelify

Raining in My Heart

Buddy Holly

KeyF♯ majorTempo128 bpm
0:00/0:00
// Raining in My Heart — Holly Buddy
// 128 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 122 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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 1"
const piano = note(`<
  ~ A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A ~ A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4
  B@2 C@2 A ~@9 A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A ~ A@2 B@2 C@2 D ~@2
>`.pickRestart({
  A: "~@2 [f#3,a#3,c#4,f#4]!2 ~@2 [f#3,a#3,c#4,f#4]!2", B: "~@2 [f#3,b3,d#4,f#4]!2 ~@2 [f#3,b3,d#4,f#4]!2",
  C: "~@2 [f3,b3,c#4,g#4]!2 ~@2 [f3,b3,c#4,g#4]!2", D: "~@2 [f#3,a#3,c#4,f#4]!2 ~@4",
})).s("gm_piano").gain(0.19)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E F A@3 B C D E F A@3 G C@2 E H A I A G C@2 E H A I A J C@2 E H A I A G C D E H A I A G C@2 E H A I A G C D
  E H A I A J C@2 E H A I A G C D E H A ~ A G C@2 E H A I A G C@2 E H A I A J C D E H A I A J C@2 E H A ~ A J C@2 E H K
  ~@2
>`.pickRestart({
  A: "f#2@3 ~@3 f#2 ~ c#2@3 ~@5", B: "f#2@3 ~@3 f#2 ~ c#2@3 ~ f#2@3 ~", C: "b2@3 ~@3 b2 ~ f#2@3 ~@5",
  D: "b2@3 ~@3 b2 ~ f#2@3 ~ c3@3 ~", E: "c#3@3 ~@3 c#3 ~ g#2@3 ~@5", F: "c#3@3 ~@3 c#3 ~ g#2@3 ~ c#3@3 ~",
  G: "f#2@3 ~@3 f#2 ~ c#2@3 ~ c#2@3 ~", H: "c#3@3 ~@3 c#3 ~ g#2@3 ~ g#2@3 ~", I: "f#2@3 ~@13",
  J: "f#2@3 ~@3 f#2 ~ c#2@3 ~ d#2@3 ~", K: "f#2@3 ~@3 f#2 ~@9",
})).s("gm_acoustic_bass").gain(0.35)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~ A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A D A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4
  B@2 C@2 A D ~@8 A@2 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 A D A@2 B@2 C@2 E ~@2
>`.pickRestart({
  A: "a#4 c#5 ~ a#4 c#5 a#4 c#5 ~ a#4 c#5 ~ a#4 c#5 a#4 c#5 ~", B: "b4 d#5 ~ b4 d#5 b4 d#5 ~ b4 d#5 ~ b4 d#5 b4 d#5 ~",
  C: "c#5 f5 ~ c#5 f5 c#5 f5 ~ c#5 f5 ~ c#5 f5 c#5 f5 ~", D: "a#4 c#5 ~ a#4 ~@12", E: "a#4 c#5 ~ a#4 c#5 a#4 ~@10",
})).s("gm_electric_guitar_jazz").gain(0.16)

// chords · vibraphone
const vibraphone = note(`<
  ~@4 A@2 B@2 C D E@2 F@2 G H C D E@2 F@2 G H C D E@2 F@2 G H ~ I@2 J@2 K L M N ~@7 C D E@2 F@2 G H C D E@2 F@2 G H C
  O@5 P Q R S@2 T U V W X U Y@2 T U V W X C D E@2 F@2 G H C D E@2 F@2 G H ~ I@2 J@2 K L M N I@2 J@2 K L M N ~
>`.pickRestart({
  A: "[~@3 d#5@2 c#5 a#4 g#4@9]/2",
  B: "[~@6 [d#5,f#5]@4 [c#5,f5]@2 [a#4,c#5]@2 [g#4,b4]@4 [a#4,c#5] [g#4,b4] [f#4,a#4]@12]/2", // D#m C# A#m G#m A#m G#m F#
  C: "~@2 c#4!2 [a#4,f#5] [g#4,d#5] [f#4,c#5] [a#4,f#5]", D: "[f#4,c#5] ~",
  E: "[~@4 [a#4,f#5] [g#4,d#5] [f#4,c#5] g#4 f#4@4 ~@4, ~@7 d#5@5 ~@4]/2", // D#m G#5 F#5
  F: "[~@4 [g#4,d#5]@2 [g#4,d#5] g#4 f4@4 ~@4, ~@7 f5@5 ~@4]/2", // G#5
  G: "~@2 [c#4,f4] [c#4,f4]@2 [d#4,g#4] [f4,a#4] [d#4,g#4]", H: "[c#4,f#4]@7 ~@9",
  I: "[~@3 [c#5,f5,g#5]@2 [c#5,f5,g#5] [b4,d#5,f5] [c#5,f5,g#5]@2 [a#4,c#5,f5]@5 ~@2]/2", // C# Fm7b5 C# A#m
  J: "[~@6 [b4,d#5,f#5]@4 [b4,d#5,f#5]@2 [b4,f#5] ~ [b4,d#5,f#5]@3 [c#5,f5,g#5] [b4,d#5,f#5] [a#4,c#5,f5]@5 ~@8, ~@6 d#5 ~@9]/2", // B B5 B C# B A#m
  K: "~ [g#4,c#5,f5]!2 [g4,c5,e5] [g#4,c#5,f5]@2 [g#4,c#5,f5]@2", L: "[a#4,d#5,f#5] ~@3",
  M: "~@2 [f#4,a#4,c#5]@2 [g#4,c#5,f5]@2 [f#4,a#4,c#5]@2 [g#4,c#5,f5]@3 ~ [g#4,c#5,f5]@4", // F# C# F# C#
  N: "[f#4,a#4] [f#4,g#4] [c#4,f#4]@2, c#5", // F# F#sus2 F#5
  O: "[c#5@5 ~ [c#5,f5,g#5]@4 [c#5,f5,g#5]@2 [b4,d#5,f5]@2 [c#5,f5,g#5]@4 [a#4,c#5,f5]@6 [a#4,f#5]@2 [g#4,d#5]@2 [f#4,c#5]@2 g#4@2 f#4@6 [b4,d#5,f#5]@4 [b4,d#5,f#5]@2 [b4,f#5] ~ [b4,d#5,f#5]@3 [c#5,f5,g#5] [b4,d#5,f#5] [a#4,c#5,f5]@5 [g#4,d#5]@4 [g#4,d#5]@2 g#4@2 f4@2 [g#4,c#5,f5]@2 [g#4,c#5,f5]@2 [g4,c5,e5]@2 [g#4,c#5,f5]@4 [g#4,c#5,f5]@4, f#4@8 ~@22 d#5@7 ~@7 d#5@2 ~@16 f5@4 ~@14]/5", // C# Fm7b5 C# A#m D#m G#5 F#5 B …
  P: "[a#4,d#5,f#5]@2 [c#4,f4] [c#4,f4]@2 [d#4,g#4] [f4,a#4] [d#4,g#4]", // D#m C# G#5 A#5 G#5
  Q: "f#4@2 [f#4,a#4,c#5]@2 [g#4,c#5,f5]@2 [f#4,a#4,c#5]@2 [g#4,c#5,f5]@3 ~ [g#4,c#5,f5]@4, c#4@7 ~@9", // F# C# F# C#
  R: "[f#4,a#4,c#5]@3 [d#5,f#5,a#5]@2 [c#5,f5,g#5]@2 [a#4,c#5,f5]", // F# D#m C# A#m
  S: "[[g#4,b4,d#5]@6 [a#4,f5] [g#4,b4,d#5] [f#4,a#4,c#5]@13 ~ [d#5,f#5,a#5]@4 [c#5,f5,g#5]@4 [a#4,c#5,f5]@2]/2", // G#m A#5 G#m F# D#m C# A#m
  T: "g#4@3 f#4@5, [b4,d#5]", U: "~@3 [d#5,f#5,a#5]@2 [c#5,f5,g#5]@2 [a#4,c#5,f5]", V: "d#5@3 c#5@5, [g#4,b4]",
  W: "~@6 [d#5,f#5,a#5]@4 [c#5,f5,g#5]@3 ~ [a#4,f5]@2, ~@13 c#5@3", // D#m C# A#5
  X: "[g#4,b4,d#5]@6 [a#4,c#5,f5] [g#4,b4,d#5] [f#4,a#4,c#5]@8", // G#m A#m G#m F#
  Y: "[[g#4,b4,d#5]@6 [a#4,f5] [g#4,b4,d#5] [f#4,a#4,c#5]@12 ~@2 [d#5,f#5,a#5]@4 [c#5,f5,g#5]@4 [a#4,c#5,f5]@2]/2", // G#m A#5 G#m F# D#m C# A#m
})).s("gm_vibraphone").gain(0.4)

// other · tenor sax
const tenor_sax = note(`<
  ~ A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G A I J K@2 L M N O A B C D E F G P A B C D E F G H A B
  C D E F G H A B C D E F G A I J K@2 L M N ~@9 A B C D E F G H A B C D E F G A I J K@2 L M N ~ I J K@2 L M Q ~@2
>`.pickRestart({
  A: "a#3 ~ a#3 ~@3 a#3 ~ f#3@2 f#3 ~@3 f#3 ~", B: "a#3@2 a#3 ~@3 a#3 ~ f#3@2 a#3@2 b3@2 c#4@2",
  C: "d#4@2 d#4 ~@3 d#4 ~ b3@2 b3 ~@3 b3 ~", D: "d#4@2 d#4 ~@3 d#4 ~ d#4@2 d#4 ~ d#4@2 e4@2",
  E: "f4 ~ f4 ~@3 f4 ~ c#4@2 c#4 ~@3 c#4 ~", F: "f4 ~ f4 ~@3 g#4 ~ f4@2 d#4@2 c#4@2 b3@2",
  G: "a#3@2 a#3 ~@3 a#3 ~ f#3@2 f#3 ~@3 f#3 ~", H: "a#3 ~ a#3 ~@3 a#3 ~ f#3@2 f#3@2 f#3@2 a#3@2",
  I: "f#4 ~ f#4 ~ d#4 ~ c#4 ~ c#4 ~ c#4 ~ a#3 ~ f#3 ~", J: "g#3@2 f#3 ~ f#3@2 f#3@6 ~@2 f#3@2",
  K: "[d#3 ~ d#3@2 f#3 ~ f#3@2 g#3@2 g3 ~ g3@2 f#3@6 d#3@6 ~@2 d#3 ~ f#3 ~]/2",
  L: "g#3@2 g3@2 g#3 ~ g3 ~ g#3 ~ a#3 ~ b3 ~ a#3 ~", M: "a#3@2 g#3 ~ g#3@2 g#3@7 ~ c#3@2",
  N: "f#3 ~@3 f#3 ~@5 f#3@2 ~@2 f#3 ~", O: "~@2 c#4 ~ c4 ~ c#4 ~ d4 ~ d#4 ~ e4 ~ f4 ~", P: "a#3 ~ a#3 ~@13",
  Q: "f#3 ~@3 f#3 ~@11",
})).s("gm_tenor_sax").gain(0.24)

// drums · kick
const kick = s("bd").struct("<~ A@47 B A@31 ~@9 A@23 ~ A@6 C ~@2>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x", C: "x ~@2 x ~@4",
})).gain(0.56)

// drums · rim
const rim = s("rim").struct("<~@9 A@32 ~@8 A@31 ~@9 A@23 ~ A@6 ~@3>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.48)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~ [~@5 x ~@2]!8 ~@32 [~@5 x ~@2]!7 ~@74>").gain(0.32)

// drums · snare
const snare = s("sd").struct(`<
  A B@8 C@8 D@8 C@8 E@15 ~ C@20 B@4 E F G F G@3 H A ~ A ~ A ~ A ~ C@16 E@7 ~ E@6 I ~@2
>`.pickRestart({
  A: "~@6 x!2", B: "~ x ~ x", C: "~@2 x!2 ~@2 x ~", D: "~@2 x!2 ~@2 x!2", E: "~@2 x ~@3 x!2", F: "x!3 ~@3 x ~",
  G: "x!3 ~@3 x!2", H: "x", I: "~ x ~@2",
})).gain(0.32)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~ A@8 B@8 C ~ C ~ C ~ C ~ B@8 ~ C ~ C@5 D@7 ~ B@20 A@4 E A E A E@3 ~ C ~ C ~ C ~ C ~ B@16 F D F D@4 ~ F D F D@3 F ~@2
>`.pickRestart({
  A: "~@3 x ~@3 x", B: "~@7 x", C: "~@11 x ~@4", D: "~@6 x ~@4 x ~@4", E: "~@6 x ~@7 x!2", F: "~@3 x ~@4",
})).gain(0.16)

// drums · hihat
const hihat = s("hh").struct("<~@9 A@39 B A@31 C ~@8 A@23 C A@6 D ~@2>".pickRestart({
  A: "x!7 ~", B: "x!2 ~@6", C: "x", D: "x!4 ~@4",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A@39 ~ A@31 ~@9 A@23 ~ A@6 ~@3>".pickRestart({
  A: "~@7 x",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@23 A ~@33>".pickRestart({
  A: "x",
})).gain(0.48)

// drums · ride
const ride = s("rd").struct("<~ A@47 B A@31 B ~@8 A@23 ~ A@6 C ~@2>".pickRestart({
  A: "x!8", B: "x", C: "x!4 ~@4",
})).gain(0.24)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@81
  [x ~@2 x ~@2 x ~]
  [x ~@2 x ~@4]
  [x ~@2 x ~@2 x ~]
  [x ~@2 x ~@4]
  [x ~@2 x ~@2 x ~]!4
  ~@33
>`).gain(0.24)

stack(
  piano, bass, electric_guitar_jazz, vibraphone, tenor_sax, kick, rim, rim_soft, snare, snare_soft, hihat, open_hat,
  high_tom, ride, shaker
)

More by Buddy Holly