Strudelify
Let Her Cry cover art

1994 · Cracked Rear View

Let Her Cry

Hootie & the Blowfish

KeyG majorTempo70 bpm
0:00/0:00
// Let Her Cry — Hootie & the Blowfish
// 70 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 8 "Guitar/Synth" named as a guitar, played on electric guitar clean (its cello patch is not one)
// note: duplicate parts dropped: ch 6 "Voice (part 2)" cello (copy of ch 5 "Voice (part 1)" cello)
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Les Paul (for volume).
setcpm(70/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 · rock organ · "Organ"
const rock_organ = note(`<
  ~@3 A B C D A E F G H E F G H I H I J I H K L M K L M E F G H E F G H I H I J I H K L M K L M@2 K L M I ~@11 E F G H E
  F G H I H I J I H K L I H I J I H K L M ~
>`.pickRestart({
  A: "~@13 g5!2 a5", B: "b5", C: "a5", D: "d4", E: "b5@3 ~", F: "d5", G: "[g5,c6]", H: "[b4,d5,g5]", I: "[c5,e5,g5]",
  J: "[f#4,a4,d5]", K: "[f#4,d5,a5]", L: "[g4,c5,g5]", M: "[g4,b4,d5,g5]",
})).s("gm_rock_organ").gain(0.08).pan(0.4)

// chords · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note(`<
  A B C D@2 E F D@2 E F D@2 E F D F D F E F D E F D E F D@2 E F D@2 E F D F D F E F D E F D E G D@2 E H D F D I J F D E
  F D E F D@2 E F D@2 E F D F D F E F D E F@2 D F E F D E F K ~
>`.pickRestart({
  A: "[g2,d3,g3,b3,g4]@4 [g2,b2,b3,g4]@3 [d3,g3,g4] [g2,d3,g3,b3] [d3,b3,g4] [g2,b2,g3,g4]@3 [g3,g4] [g2,g3,b3] [g2,b2,d3,b3,g4]", // G G5 G
  B: "[a2,d3,a3,d4,f#4]@4 [a2,d3,d4,f#4]@3 [d3,a3,f#4]@2 [d3,d4,f#4] [a2,d3,a3,d4,f#4]@3 f#4 [a2,a3,d4] [a2,d3,d4,f#4]", // D D5 D
  C: "[c3,g3,c4,e4]@10 [c3,g3,c4,e4]@3 e4 [c3,g3,c4] [c3,e3,c4,e4]", // C C5 C
  D: "[g2,d3,g3,b3,g4]@4 [g2,b2,b3,g4]@3 [d3,g3,g4] [g2,d3,b3] [d3,b3,g4] [g2,b2,g3,g4]@3 [g3,g4] [g2,g3,b3] [g2,b2,d3,b3,g4]", // G G5 G
  E: "[a2,d3,a3,d4,f#4]@4 [a2,d3,d4,f#4]@3 [d3,a3,f#4]@2 [d3,d4,f#4] [a2,d3,a3,d4,f#4]@3 f#4 [a2,a3,d4] [d3,d4,f#4]", // D D5 D
  F: "[c3,g3,c4,e4]@4 [c3,e3,c4,e4]@3 [e3,g3,e4] [c3,g3,c4] [e3,c4,e4] [c3,g3,c4,e4]@3 e4 [c3,g3,c4] [c3,e3,c4,e4]", // C Em C5 C C5 C
  G: "[c3,g3,c4,e4]@4 [c3,e3,c4,g4]@3 [e3,g3,e4] [c3,g3,c4] [e3,c4,g4] [c3,g3,c4,e4]@3 e4 [c3,g3,c4] [c3,e3,c4,e4]", // C Em C5 C C5 C
  H: "[c3,g3,c4,e4]@4 [c3,e3,c4,e4]@3 [e3,g3,e4] [a2,f#3,d4] [d3,a3,f#4] [d3,g3,d4,g4]@3 d4 [c3,g3,c4] [c3,e3,c4,e4]", // C Em D G5 C5 C
  I: "[b2,g3,b3,e4]@4 [c3,e3,c4,e4]@3 [e3,g3,e4] [c3,g3,c4] [e3,c4,e4] [c3,g3,c4,e4]@3 e4 [c3,g3,c4] [c3,e3,c4,e4]", // Em C Em C5 C C5 C
  J: "[a2,d3,a3,d4,f#4]@4 [g2,d3,d4,g4]@3 [d3,a3,f#4]@2 [d3,d4,f#4] [a2,d3,a3,d4,f#4]@3 f#4 [a2,a3,d4] [d3,d4,f#4]", // D G5 D D5 D
  K: "[g2,d3,g3,b3,g4] ~@3", // G
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.4)

// chords · acoustic guitar steel · "Acoustic Guitar" · soft notes
const acoustic_guitar_steel_2 = note(`<
  A B C A@2 B D A@2 B D A@2 B D A D A D B D A B D A B D A@2 B D A@2 B D A D A D B D A B D A B D A@2 B E A D A D B D A B
  D A B D A@2 B D A@2 B D A D A D B D A B D@2 A D B D A B D ~@2
>`.pickRestart({
  A: "~@7 b2 ~@5 b2 ~@2", B: "~@7 a2@2 ~@4 d3 ~@2", C: "~@13 e3 ~@2", D: "~@7 c3 ~@5 e3 ~@2", E: "~@7 c3 ~@5 g3 ~@2",
})).s("gm_acoustic_guitar_steel").gain(0.15).pan(0.4)

// chords · distortion guitar · "Electric Guitar"
const distortion_guitar = note(`<
  ~@8 A B C A@2 B C A D E D E D E ~@6 A B C A@2 B C A D E D E D E ~@22 A B C A@2 B C A D E D E D E ~@2 D E D E D E ~@4
>`.pickRestart({
  A: "[g2,d3,g3,b3,d4,g4]", B: "[a2,d3,a3,d4,f#4]", C: "[c3,e3,g3,c4,e4]", D: "~@4 d4 b4 g4 d4 b4 g4 d4 b4 g4 d4 b4 g4",
  E: "d4",
})).s("gm_distortion_guitar").gain(0.17).pan(0.7)

// other · overdriven guitar · "An old Les Paul"
const overdriven_guitar = note(`<
  ~@16 A B A B A B ~@2 C D E F@2 ~@7 A B A B A B ~@2 C D E G H I J K L M N O P Q R S T U V W ~@8 A B A B A B ~@2 A B A B
  A B ~@4
>`.pickRestart({
  A: "~@4 d4 b4 g4 d4 b4 g4 d4 b4 g4 d4 b4 g4", B: "d4", C: "~@8 d3@2 g3 b3 d4 [e4,a4] b4 [b4,c5]",
  D: "[a4,b4] d5@3 d5!3 e5 g5@4 b5@4, ~@8 f#5 ~@3 g5 ~@3", // Asus2
  E: "d5!3 [b4,c5] [c5,d5] [a4,b4] b4 ~ g5!3 [g5,a5] c5 b4@3, ~@3 d4@2 ~@3", // Cmaj7 Csus2 Asus2 Gsus2
  F: "[b2 [d3,c5] [g3,b4] c4 [g3,b3] [d4,g4] g4 [a4,b4] [b4,c5] g4 b5@8 ~@14, ~@10 c5 ~@21]/2", // D7 G G5 Asus2 Cmaj7
  G: "b2 [d3,c5] [g3,b4] c4 [g3,b3] [d4,g4] g4 [a4,b4] [b4,c5] g4 [c5,b5]@2 d5 [g4,b4] [d4,g4] c5", // D7 G G5 Asus2 Cmaj7 G G5
  H: "~ b5!2 [g5,a5]@2 ~ d5 [b4,c5] d5@4 g4@4, [b3,b4] ~@2 g5@2 ~@3, ~@8 a4 ~@7", // Gsus2 Cmaj7 B
  I: "e5 [c5,d5] [a2,b4] a2 e5 [d5,e5] [b4,c5] a4 [b4,d5] [g4,d6] [a2,b4] a2 f#5 g5 ~@2", // Csus2 Asus2 Dsus2 Cmaj7 Bm G5 Asus2
  J: "e5 [f#5,g5] [e5,f#5] [f#5,g5] [d5,e5] d5 [d3,d5] [g3,d5] [a2,c4] ~ [g4,b4]@4 b5!2, ~@9 [f#4,a4]@2 ~@5", // Gmaj7 Esus2 Gmaj7 Dsus2 D G5 Am G …
  K: "[b5,d6]@2 b4!2 [b4,d5]@2 b5!3 ~ g3 [g3,b3] a4 [b4,d5] c6 [c6,d6], ~@9 d6@2 ~@5", // Bm G Bm Csus2
  L: "[a5,b5]!2 g5 [b5,c6] d6 [b5,c6] [a5,b5] [g5,a5] a4 [a4,b4] [b4,c5] [a4,b4] [d4,g4] d4!2 [d5,e5]", // Asus2 Cmaj7 Asus2 Gsus2 Asus2 Cmaj7 Asus2 G5 …
  M: "[d5,g5]@2 a5 [d5,b5] [b4,g5]@2 ~ [d5,b5] [f#5,g5,c6,d6] [d5,f#5,b5,c6] [d5,e5,b5,c6]!2 ~ [e5,f#5] [d5,e5]!2", // G5 G Em G Csus2 Bm Cmaj7 Esus2 …
  N: "[b4,e5] [b4,d5] ~ d3!3 ~@4 g4@2 ~ [a4,b4] a4 g4, ~@6 g4 ~", O: "[b4,c5] d5 d5@2 g5@3 b5!3 a5 f#5 e5 d5 ~ a4",
  P: "a4 ~ a4 c5@4 ~ c5 [d5,e5] [d5,e5]@2 b5 [b5,c6] [b5,c6]@2", // Dsus2 Cmaj7
  Q: "c6@3 b5 ~ f#3 [g3,a3] [b3,b4] [c5,c6] b5@3 d6@2 ~@2, ~@2 g5 ~@5", // Gsus2 B C
  R: "c6 [a5,b5] d5 [b5,c6] [c6,d6] d5 ~@2 f#5 [f#5,g5] a5 [b5,c6] [g5,a5] ~ [b5,c6] [a5,b5]", // Asus2 Cmaj7 Csus2 Gmaj7 Cmaj7 Gsus2 Cmaj7 Asus2
  S: "c6@2 g5 c6!2 d6 e6@2 ~@2 [e6,f#6] g6 [d6,e6] g6 [a6,b6] [d6,e6]", // Esus2 Dsus2 Asus2 Dsus2
  T: "d7 [g6,b6] ~ g6 [g6,d7] [g6,b6] ~@2 d7 [d6,b6] [b5,g6] ~ g6!2 [b6,d7] [d6,b6,d7]", // G G5 G Em Bm G
  U: "[f#4,d6,b6] f#4!2 [f#4,g4]@2 ~ a4 [a4,b4] g4!2 ~ e4 d4@2 b5!2", // Bm Gmaj7 Asus2
  V: "b5 c6 d6 [g4,b4] [g4,f#6] g6 a6 ~ b6 a6 g6 b6 a6 g6 b6 a6", W: "[a5,c6] g5@12 ~@3",
})).s("gm_overdriven_guitar").gain(0.64)

// other · electric guitar clean · "Guitar/Synth"
const electric_guitar_clean = note("<~@44 A B C D E F G H I J K L M N O P Q R S T ~@26>".pickRestart({
  A: "~@8 d3 e3 g3 b3 d4 [e4,a4] b4 [b4,c5]", B: "d5@4 d5!3 e5 g5@4 b5@4, a4 ~@7 f#5 ~@7",
  C: "d5!3 [b4,c5] [c5,d5] [a4,b4] b4 ~ g5!3 [g5,a5] c5 b4@3, ~@3 d4@2 ~@3", // Cmaj7 Csus2 Asus2 Gsus2
  D: "b2 d3 g3 c4 [g3,b3] [d4,g4] g4 [a4,b4] [b4,c5] g4 [c5,b5]@2 d5 [g4,b4] [d4,g4] c5", // G G5 Asus2 Cmaj7 G G5
  E: "~ b5!2 [g5,a5]@2 ~@3 b4@4 g4@4, [b3,b4] ~@2 g5@2 ~@3", // Gsus2 B
  F: "e5 [c5,d5] [a2,b4] a2 e5 [d5,e5] [b4,c5] a4 [b4,d5] [g4,d6] [a2,b4] a2 f#5 g5 ~@2", // Csus2 Asus2 Dsus2 Cmaj7 Bm G5 Asus2
  G: "e5 [f#5,g5] [e5,f#5] [f#5,g5] [d5,e5] d5 [d3,d5] [g3,d5] [a2,c4] ~ [g4,b4]@4 b5!2, ~@9 [f#4,a4]@2 ~@5", // Gmaj7 Esus2 Gmaj7 Dsus2 D G5 Am G …
  H: "[b5,d6]@2 b4!2 [b4,d5]@2 b5!3 ~ g3 [g3,b3] a4 [b4,d5] c6 [c6,d6], ~@9 d6@2 ~@5", // Bm G Bm Csus2
  I: "[a5,b5]!2 g5 [b5,c6] d6 [b5,c6] [a5,b5] [g5,a5] a4 [a4,b4] [b4,c5] [a4,b4] [d4,g4] d4!2 [d5,e5]", // Asus2 Cmaj7 Asus2 Gsus2 Asus2 Cmaj7 Asus2 G5 …
  J: "[d5,g5]@2 ~ [d5,b5] [b4,g5]@2 ~@7 [c5,d5] [b4,c5]!2, ~ a5 ~@6", K: "[a4,b4] [g4,a4] ~@4 b4!3 ~ g5@3 d5 c5 d5",
  L: "~ c5 b4 a4 b4@3 d5 b4 d5 c5 b4 a4 g4 ~ g4", M: "g4 ~ e5@4 ~@2 b4 [b4,c5] [b4,c5]@2 d5 [d5,e5] [d5,e5]@2",
  N: "g5@3 e5 ~ b3 [b3,c4] [g4,a4] [a4,g5] e5@3 b5@2 ~@2, ~@2 d5 ~@5", O: "~@7 d6 d6@3 f#4!2 ~ [f#5,g5] [e5,f#5]",
  P: "d5@2 c5 e5!2 c6@4 ~ [g5,a5] b5 [g5,a5] a5 [b5,d6] [a5,b5]", // Gsus2 Bm Asus2
  Q: "b5 [d5,g5] ~ [g5,b5] d5 ~@2 [g5,b5] d5 ~@2 [e5,f#5] [g5,a5] ~ d5 ~", R: "~ d5@2 ~ e5@2 f#5@2 g5@2 ~@6",
  S: "g5 a5 b5 b3!2 a5 b5 c6 ~ c6 b5 a5 c6 [a5,b5] b5 a5", T: "[e5,a5] d5@13 ~@2",
})).s("gm_electric_guitar_clean").gain(0.64)

// bass · fretless bass · "Base"
const bass = note(`<
  ~@7 A B C D E F G H E I J K L M N O P Q O P R B C D E F G H E I J K L M N O P ~@19 A B C D E F G H E I J K L M N O P I
  J K L M N O P ~@2
>`.pickRestart({
  A: "~@4 g2@2 ~ e2", B: "d2 ~ g1 ~", C: "~@2 d2 d2@4 ~@2 g1 d2@4 g2@2", D: "~ g2 ~@2",
  E: "~@4 g2@4 ~@2 d2 e2 a2 b2 ~ g2", F: "~@4 g1@8 ~@2 d2!2, d2 ~", G: "~@4 d2@8 ~ d2!2 ~", H: "~ c2@2 ~", I: "d2 ~",
  J: "~@8 g1@4 f#2 e2 ~@2, g2@3 ~", K: "c2@12 ~@2 d2!2", L: "a2@3 ~", M: "c2@12 ~ d2!2 ~", N: "g2@12 ~@2 d2 f#2",
  O: "a2@12 ~@2 b2 g2", P: "c2@3 ~", Q: "g1 ~", R: "g1@4 g2@2 ~ e2",
})).s("gm_fretless_bass").gain(0.32).pan(0.6)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 A@19 B A@19 B ~@20 A@15 B ~@10>".pickRestart({
  A: "~ x ~@2", B: "~ x ~ x",
})).gain(0.19).pan(0.3)

// drums · mt
const mt = s("mt").struct("<~@15 A B C B@4 ~@13 A B C B@4 ~@29 A B C B@4 ~@12>".pickRestart({
  A: "~@4 x ~@3 x!2 ~ x!3 ~@2", B: "~@12 x!2 ~@2", C: "~@4 x!2 ~@6 x!2 ~@2",
})).gain(0.19).pan(0.3)

stack(
  rock_organ, acoustic_guitar_steel, acoustic_guitar_steel_2, distortion_guitar, overdriven_guitar,
  electric_guitar_clean, bass, tambourine, mt
)

More by Hootie & the Blowfish