Strudelify
Hold My Hand cover art

1994 · Cracked Rear View

Hold My Hand

Hootie & the Blowfish

KeyB majorTempo84 bpm
0:00/0:00
// Hold My Hand — Hootie & the Blowfish
// 84 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(84/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 clean
const electric_guitar_clean = note(`<
  A B A B A B A B A B A B C D C D A B A B A B A B C D C D E F E F E F G@2 A B A B A B A B A B A B C D C D E F E H E H
  G@2 A B A B A B A B E H E H E H G@2 E H E H E H G@2 A B A I@2
>`.pickRestart({
  A: "[b3,f#4,b4,c#5,f#5]@2 ~ [b3,f#4,b4,c#5,f#5] ~@2 [b3,e4,g#4,b4,e5]@3 ~ [b3,e4,g#4,b4,e5] ~ [b3,e4,g#4,b4,e5]!4", // Bsus2 E
  B: "[b3,f#4,b4,c#5,f#5]@2 ~ [b3,f#4,b4,c#5,f#5] ~@2 [b3,e4,g#4,b4,e5]@3 ~ [b3,e4,g#4,b4,e5] ~ [b3,e4,g#4,b4,e5] ~ [b3,e4,g#4,b4,e5]!2", // Bsus2 E
  C: "[c#4,f#4,a#4,c#5,f#5]@2 ~ [c#4,f#4,a#4,c#5,f#5] [c#4,f#4,a#4,c#5,f#5]@3 ~ [b3,e4,g#4,b4,e5] ~ [b3,e4,g#4,b4,e5]@3 ~ [b3,f#4,b4,f#5]@2", // F# E B5
  D: "~@2 [b3,f#4,b4,f#5] ~ [b3,f#4,b4,f#5]@2 ~ [b3,f#4,b4,f#5] ~ [b3,f#4,b4,f#5]!2 ~ [b3,f#4,b4,f#5]!3 ~", // B5
  E: "[b3,f#4,b4,f#5] ~ [b3,f#4,b4,f#5] ~ [b3,f#4,b4,f#5] ~ [b3,f#4,b4,f#5] ~ [b3,e4,g#4,b4,e5] ~ [b3,e4,g#4,b4,e5] ~ [b3,e4,g#4,b4,e5] ~ [c#4,f#4,a#4,c#5,f#5]@2", // B5 E F#
  F: "~@2 [c#4,f#4,a#4,c#5,f#5] ~ [f#4,a#4,c#5,f#5]!4 ~@2 [f#4,a#4,c#5,f#5]!3 ~@3", G: "[[b3,e4,g#4,b4,e5]@27 ~@5]/2",
  H: "~@2 [c#4,f#4,a#4,c#5,f#5] ~ [f#4,a#4,c#5,f#5]!4 ~@2 [f#4,a#4,c#5,f#5]!2 [f#4,a#4,c#5] ~@3", // F#
  I: "[[b3,f#4,b4,c#5,f#5]@2 ~ [b3,f#4,b4,c#5,f#5] ~@2 [b3,e4,g#4,b4,e5]@21 ~@5]/2", // Bsus2 E
})).s("gm_electric_guitar_clean").gain(0.27).pan(0.4)

// bass · fretless bass
const bass = note(`<
  A B A B A B A B A B A B C ~@3 A B A B A B A B ~@4 D ~ D ~ D ~@3 A B A B A B A B A B A B ~@4 D ~ D ~ D ~@3 A B A B A B
  A B D ~ D ~ D ~@3 D ~ D ~ D ~@3 A B E F@2
>`.pickRestart({
  A: "~@5 e3@4 ~ e3 ~ e3!4", B: "~@5 e3@4 ~ e3 ~ e3 ~ e3!2", C: "f#3@2 ~ f#3 f#3@3 ~ e3 ~ e3@3 ~@3",
  D: "~@8 e3 ~ e3 ~ e3 ~@3", E: "~@6 e3@3 ~ e3 ~ e3!4", F: "[e3@2 ~ e3 ~@2 e3@21 ~@5]/2",
})).s("gm_fretless_bass").gain(0.29)

// bass · acoustic bass · ""Cracked Rearview""
const bass_2 = note(`<
  ~@4 A B C A@2 B C D E F G H I J K L M J K N G O G P Q R S R S T U@2 M V W L I J K L M J K N G O G P Q R S R S T X@2 Y
  Z AA AB AC AD AE AF Q R S R S T AG@2 Q R S R S T X@2 AH AI AJ AK@2
>`.pickRestart({
  A: "b2@2 ~ a#2 b2 ~ e2@7 ~@3", B: "b2@2 ~ a2 b2 ~ f#3@4 ~@2 e3@3 ~", C: "b2@2 ~ a2 b2 ~ e2@4 ~@2 f#2@3 ~",
  D: "b2@2 ~ a2 b2 ~ b2 ~ a2 b2!3 a2 b2 a2 e1", E: "f#1@4 ~@2 f#1 ~ e2 b1 e1 ~ f#1 g#1 b1@2",
  F: "~@2 b1 ~ b1@3 ~ b1 ~ a1 b1 ~ a1 b1 c#2", G: "f#1@3 ~ f#1 ~ f#1 ~ e2 b1 e1 ~ f#1 g#1 b1@2",
  H: "~@4 b2@2 ~@2 b2 a#1 b1 ~ b2 ~ a#1 b1", I: "b2@2 ~ a2 b2 ~ e2@3 ~ e2 ~@2 e2@3",
  J: "b2@2 ~ a2 b2 ~ f#3@3 ~ b2 c#3 e3 ~ c#3 ~", K: "b2@2 ~ a2 b2 ~ e2@3 ~ e2 ~ e2 f#2 ~ e2",
  L: "b2@2 ~ a2 b2 ~ b2 ~ a2 b2!2 ~ b2 ~ a2 f#2", M: "b2@2 ~ a2 b2 ~ e2@3 ~ e2 ~ e2@3 ~",
  N: "b2@2 ~ a2 b2 ~ b2 ~ a2 b2!4 ~ a2 e1", O: "~@2 b1 ~ f#2@3 ~ b1 f#2 a1 b1 f#2 a1 b1 c#2",
  P: "~@2 b1 ~ b2@2 ~ b1 ~ a1 b1 ~ b2 b1@2 ~", Q: "b1@3 ~ b1@3 ~ e1 ~ e1@3 ~ f#1@2",
  R: "~@2 f#1 ~ f#2@3 ~ f#1 e1 f#1 ~ f#2 f#1@2 ~", S: "b1@3 ~ f#2@3 ~ e1 ~ e1@3 ~ f#1@2",
  T: "~@2 f#1 ~ f#2@3 ~ f#1 e1 f#1 e1 f#2@3 ~", U: "[e1@25 ~@3 e2 f#2 ~ f#2]/2",
  V: "b2@2 ~ a2 b2 ~ f#3@4 ~@2 e3 ~ e3 ~", W: "b2@2 ~ a2 b2 ~ e2@3 ~ e2 ~ e2 f#2 ~ d#2", X: "[e1@27 ~@5]/2",
  Y: "b2@2 ~ a2 b2 ~ b2@3 ~ a2 b2 ~ a2 b2 ~", Z: "b2@2 ~ a2 b2 ~ f#3@3 ~ e3 ~ b2 c#3!3",
  AA: "b2@2 ~ a2 b2 ~ b2@3 ~ a2@2 ~ f#2 ~ e2", AB: "b2@2 ~ a2 ~ a2 f#2@3 ~ e2 ~ a2 b2 a2 e1",
  AC: "f#1@3 ~ f#2 ~ f#1 ~ e2 b1 ~ e1 f#1 g#1 b1@2", AD: "~@2 b1 ~ e2 f#2!3 e2 f#2!5 e2 c#2",
  AE: "f#1@3 ~ f#2 ~ f#1 ~ e2 b1 e1 ~ f#1 g#1 b1@2", AF: "~@2 b1 ~ b1@2 ~ b1 ~ a1 b1 ~ b2 ~ b1 ~",
  AG: "[e1@25 ~@5 f#1 g#1]/2", AH: "b2@2 ~ a2 b2 ~ e2@7 ~@3", AI: "b2@2 ~ a2 b2 ~ f#3@3 ~@3 c#3 ~ c#3 ~",
  AJ: "b2@2 ~ a2 b2 ~ e2@3 ~@3 f#2@3 ~", AK: "[b2@2 ~ a2 b2 ~ b2@21 ~@5]/2",
})).s("gm_acoustic_bass").gain(0.41)

// chords · string ensemble 1 · ""Matadero""
const string_ensemble_1 = note(`<
  ~@8 A B A B C D C D A B E F A B E F C D C D G H G H G H I@2 A B A F A B E F A B E F C D C D G H G H G H I@2 J K L K
  M@2 N O G H G H G H I@2 G H G H G H I@2 A B A P@2
>`.pickRestart({
  A: "d#5@2 ~ f#5 ~ d#5 g#5@9 ~", B: "d#5@2 ~ f#5 ~ d#5 b4@9 ~",
  C: "[c#4,f#4,a#4,c#5,f#5]@2 ~ [c#4,f#4,a#4,c#5,f#5] [c#4,f#4,a#4,c#5,f#5]@3 ~ [b3,e4,g#4,b4,e5] ~ [b3,g#4,b4,e5]@3 ~ [b3,f#4,b4,f#5]@2", // F# E B5
  D: "~@2 [b3,f#4,b4,f#5] ~ [b3,f#4,b4,f#5]@2 ~ [b3,f#4,b4,f#5] ~ [b3,f#4,b4,f#5]!2 ~ [b3,f#4,b4,f#5]!3 ~", // B5
  E: "d#5@2 ~ f#5 ~ d#5 g#5@7 ~@3", F: "d#5@2 ~ f#5 ~ d#5 b4@2 ~ [e5,g#5] ~@2 [e5,g#5]@3 ~",
  G: "[b3,f#4,b4,f#5] ~ [b3,f#4,b4,f#5] ~ [b3,f#4,b4,f#5] ~ [b3,f#4,b4,f#5] ~ [b3,e4,g#4,b4,e5] ~ [b3,e4,g#4,b4,e5] ~ [b3,e4,g#4,b4,e5] ~ [c#4,f#4,a#4,c#5,f#5]@2", // B5 E F#
  H: "~@2 [c#4,f#4,a#4,c#5,f#5] ~ [c#4,f#4,a#4,c#5,f#5]!4 ~@2 [c#4,f#4,a#4,c#5,f#5]!3 ~@3", // F#
  I: "[[b3,e4,g#4,b4,e5]@27 ~@5]/2", J: "f#5@2 ~ g#5@2 ~ f#5@2 ~ d#5@2 ~ d5 d#5@2 ~",
  K: "f#5 g#5 ~ g#5 d5 d#5 b4@7 ~@3", L: "b4@3 ~ d5 d#5 e5@3 ~ e5 ~ d5 d#5 ~ d#5",
  M: "[f#4 g#4 b4 g#4 b4 c#5 ~ f#5 c#5!2 b4 d4 f#4 g#4 b4@5 ~@2 g#4 ~ g#4 f#4 ~ f#4 d#4 ~ d#4 c#4@2]/2",
  N: "~@2 c#4 d#4 f#4 d#4 f#4 g#4 b4 ~ b4 c#5 d#5 c#5 d#5 e5", O: "d#5 f#5 e5 d#5 c#5@2 ~ c#5 ~ b4 g#4 d4 f#4 g#4 b4 ~",
  P: "[d#5@2 ~ f#5 ~ d#5 b4@21 ~@5]/2",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@12 A B A C D E F E G E@2 H I J A C A K L M N O P ~ Q G E H E G E G E G E G I M A C N M R M A S P ~ T E G@2 U V A P W
  X Y Z Y AA P ~ AB AC AB C AD M P ~ AE G E AF ~
>`.pickRestart({
  A: "x ~@3 x!2 ~ x", B: "~@8 x ~@2 x ~@2 x ~", C: "~ x ~ x ~@4", D: "x ~@4 x ~@2", E: "x ~@2 x ~@2 x ~@3 x ~@5",
  F: "x ~ x!2 ~@2 x ~", G: "x ~@2 x ~@2 x ~@3 x ~@2 x ~@2", H: "x ~@2 x ~@2 x ~@9", I: "x ~@8 x!2 ~@3 x ~",
  J: "~ x ~@6", K: "~@3 x ~@4 x ~@2 x ~@2 x ~", L: "x ~@8 x!2 ~@4 x", M: "~@2 x ~@5 x ~@2 x ~@2 x ~",
  N: "x ~@7 x ~@2 x ~@2 x ~", O: "~@9 x ~ x ~@4", P: "x", Q: "x ~ x!2 ~ x ~@2", R: "x ~@8 x ~ x ~@2 x ~",
  S: "~@4 x ~@2 x", T: "x ~@5 x ~@3 x ~@2 x ~@2", U: "x ~@2 x ~@2 x ~ x ~ x ~@3 x ~", V: "x ~@3 x!2 ~@2",
  W: "x ~ x ~@4 x!2 ~ x ~@3 x ~", X: "x ~ x ~@3 x!3 ~ x ~@2 x ~@2", Y: "x!2 ~ x!3 ~ x",
  Z: "~@2 x ~@3 x ~ x ~ x ~@2 x ~@2", AA: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", AB: "x ~@2 x!3 ~ x",
  AC: "~@2 x ~@2 x ~ x ~@2 x ~@2 x ~@2", AD: "x!3 ~ x!2 ~ x", AE: "~@2 x!2 ~ x ~@2", AF: "x ~@2 x ~@2 x ~@3 x ~ x ~@3",
})).gain(0.8)

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

// drums · hihat
const hihat = s("hh").struct("<~@12 A B C B D B@2 E F B G H I J B@2 K B G L M I B@2 N I O ~@50>".pickRestart({
  A: "~@2 x!2 ~@4 x ~ x!3 ~ x!2", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", C: "x ~ x!3 ~ x ~ x!5 ~ x!2",
  D: "x ~ x!3 ~@2 x!2 ~ x!3 ~ x!2", E: "x ~@2 x!2 ~ x!3 ~ x!3 ~@3", F: "x ~@2 x!2 ~ x ~ x ~ x ~ x ~ x!2",
  G: "x ~ x!3 ~ x!3 ~ x!3 ~ x ~", H: "x ~ x!3 ~ x!3 ~ x ~ x ~ x!2", I: "x ~ x!3 ~ x ~ x ~ x!3 ~ x!2",
  J: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x!2", K: "x ~ x ~ x ~ x!3 ~ x!3 ~ x!2", L: "x ~ x ~ x ~ x!3 ~ x!3 ~@2 x",
  M: "x!3 ~ x ~ x!7 ~ x!2", N: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", O: "x ~ x!3 ~ x ~ x ~@7",
})).gain(0.56)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@12 A ~@3 B ~@2 C D ~ E F G D ~@2 H ~ E I J G ~@2 K G@2 ~@50>".pickRestart({
  A: "~@6 x!2 ~@8", B: "~@3 x ~@4", C: "~ x ~@13 x", D: "~@7 x ~@3 x ~@4", E: "~@15 x", F: "~@11 x ~@4", G: "~@7 x ~@8",
  H: "~@3 x ~@12", I: "~@3 x ~ x ~@3 x ~@3 x!2 ~", J: "~@3 x ~ x ~@10", K: "~@3 x ~@7 x ~@3 x",
})).gain(0.32)

stack(electric_guitar_clean, bass, bass_2, string_ensemble_1, kick, snare, hihat, hihat_soft)

More by Hootie & the Blowfish