Strudelify

Silhouettes

Herman's Hermits

KeyC♯ minorTempo120 bpm
0:00/0:00
// Silhouettes — Herman's Hermits
// 120 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 61 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · "ACOU BASS"
const bass = note(`<
  A B C D E F G F E H I J E F G F E H I K E F G F E F G F E F A B L M N O P O N Q R S N O P O N Q R T N O P O N O P O
  U@3
>`.pickRestart({
  A: "g#0@5 ~ f0@5 ~", B: "c#0@9 ~@3 d#0@11 ~", C: "g#1@4 ~@2 g#1@5 ~ f1@4 ~@2 f1@4 ~@2",
  D: "c#1@4 ~@2 c#1@4 ~@2 d#1@4 ~@2 d#1@3 ~@3", E: "g#1@5 ~ g#1@5 ~ f1@5 ~ f1@5 ~", F: "a#0@5 ~ a#0@6 d#1@5 ~ g1@5 ~",
  G: "g#1@5 ~ g#1@5 ~ f1@4 ~@2 f1@5 ~", H: "c#1@5 ~ c#1@5 ~ d#1@5 ~ d#1@4 ~@2", I: "g#1@5 ~ f1@5 ~",
  J: "a#0@11 ~ d#1@9 ~@3", K: "a#0@4 ~@2 d#1@3 ~@3 g#1@8 ~@4", L: "a1@4 ~@2 a1@5 ~ f#1@4 ~@2 f#1@4 ~@2",
  M: "d1@4 ~@2 d1@4 ~@2 e1@4 ~@2 e1@3 ~@3", N: "a1@5 ~ a1@5 ~ f#1@5 ~ f#1@5 ~", O: "b0@5 ~ b0@6 e1@5 ~ g#1@5 ~",
  P: "a1@5 ~ a1@5 ~ f#1@4 ~@2 f#1@5 ~", Q: "d1@5 ~ d1@5 ~ e1@5 ~ e1@4 ~@2", R: "a1@5 ~ f#1@5 ~", S: "b0@11 ~ e1@9 ~@3",
  T: "b0@4 ~@2 e1@3 ~@3 a1@8 ~@4", U: "[a0@25 ~@11]/3",
})).s("gm_acoustic_bass").gain(0.64)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D E F G H I J K L E F G H I J K M E F G H E F G H E F A B N O P Q R S T U V W P Q R S T U V X P Q R S P Q R S
  Y@3
>`.pickRestart({
  A: "[g#2,g#3,c4,d#4]@11 ~ [f3,g#3,c4]@11 ~", B: "[c#3,g#3,c#4,f4,g#4]@11 ~ [d#3,a#3,d#4,g4,a#4]@11 ~",
  C: "[g#3,c4,d#4]@2 ~@4 [g#2,g#3,c4,d#4]@3 ~@3 [f3,g#3,c4]@2 ~@4 [f3,g#3,c4]@2 ~@4, g#2 ~@23", // G# Fm
  D: "[c#3,g#3,c#4,f4,g#4]@3 ~@3 [c#3,g#3,c#4,f4,g#4]@2 ~@4 [d#3,a#3,d#4,g4,a#4]@3 ~@3 [d#3,a#3,d#4,g4,a#4]@2 ~@4", // C# D#
  E: "[g#3,c4,d#4] ~ [g#3,c4,d#4] ~ [f3,g#3,c4] ~ [f3,g#3,c4] ~", // G# Fm
  F: "[c#3,c#4,f4,g#4]@3 ~@3 [c#3,c#4,f4,g#4]@3 ~@3 [d#4,g4,a#4]@3 ~@3 [a#3,d#4,a#4]@2 ~@4, ~@12 [d#3,a#3] ~@5 [d#3,g4] ~@5", // C# D# D#5 D#
  G: "[g#3,c4,d#4] ~@2 [g#3,c4,d#4] ~@2 [f3,g#3,c4] ~@2 [g#3,c4] ~@2, ~@18 f3 ~@5", // G# Fm G#
  H: "[c#3,g#3,c#4,f4]@3 ~@3 [c#3,g#3,c#4,f4]@2 ~@4 [d#3,a#3,d#4,g4,a#4]@3 ~@3 [d#3,a#3,d#4,g4,a#4]@3 ~@3", // C# D#
  I: "[g#3,c4,d#4]@3 ~@3 [g#3,c4,d#4]@3 ~@3 [f3,g#3,c4]@3 ~@3 [g#3,c4]@2 ~@4, ~@18 f3 ~@5", // G# Fm G#
  J: "[c#3,g#3,c#4,f4]@3 ~@3 [c#3,g#3,c#4,f4]@3 ~@3 [d#3,a#3,d#4,g4,a#4]@3 ~@3 [d#3,a#3,d#4,g4,a#4]@2 ~@4", // C# D#
  K: "[g#3,c4,d#4]@3 ~ [f3,g#3,c4]@3 ~", L: "[c#3,g#3,c#4,f4,g#4]@3 ~ [d#3,a#3,d#4,g4,a#4]@3 ~",
  M: "[a#2,a#3,c#4,f4]@2 ~@4 [a#3,d#4]@2 ~@4 [g#2,g#3,c4,d#4]@9 ~@3, ~@6 g3 ~@17", // A#m D#5 G#
  N: "[a3,c#4,e4]@2 ~@4 [a2,a3,c#4,e4]@3 ~@3 [f#3,a3,c#4]@2 ~@4 [f#3,a3,c#4]@2 ~@4, a2 ~@23", // A F#m
  O: "[d3,a3,d4,f#4,a4]@3 ~@3 [d3,a3,d4,f#4,a4]@2 ~@4 [e3,b3,e4,g#4,b4]@3 ~@3 [e3,b3,e4,g#4,b4]@2 ~@4", // D E
  P: "[a3,c#4,e4] ~ [a3,c#4,e4] ~ [f#3,a3,c#4] ~ [f#3,a3,c#4] ~", // A F#m
  Q: "[d3,d4,f#4,a4]@3 ~@3 [d3,d4,f#4,a4]@3 ~@3 [e4,g#4,b4]@3 ~@3 [b3,e4,b4]@2 ~@4, ~@12 [e3,b3] ~@5 [e3,g#4] ~@5", // D E E5 E
  R: "[a3,c#4,e4] ~@2 [a3,c#4,e4] ~@2 [f#3,a3,c#4] ~@2 [a3,c#4] ~@2, ~@18 f#3 ~@5", // A F#m A
  S: "[d3,a3,d4,f#4]@3 ~@3 [d3,a3,d4,f#4]@2 ~@4 [e3,b3,e4,g#4,b4]@3 ~@3 [e3,b3,e4,g#4,b4]@3 ~@3", // D E
  T: "[a3,c#4,e4]@3 ~@3 [a3,c#4,e4]@3 ~@3 [f#3,a3,c#4]@3 ~@3 [a3,c#4]@2 ~@4, ~@18 f#3 ~@5", // A F#m A
  U: "[d3,a3,d4,f#4]@3 ~@3 [d3,a3,d4,f#4]@3 ~@3 [e3,b3,e4,g#4,b4]@3 ~@3 [e3,b3,e4,g#4,b4]@2 ~@4", // D E
  V: "[a3,c#4,e4]@3 ~ [f#3,a3,c#4]@3 ~", W: "[d3,a3,d4,f#4,a4]@3 ~ [e3,b3,e4,g#4,b4]@3 ~",
  X: "[b2,b3,d4,f#4]@2 ~@4 [b3,e4]@2 ~@4 [a2,a3,c#4,e4]@9 ~@3, ~@6 g#3 ~@17", Y: "[[a2,e3,a3,c#4,e4]@25 ~@11]/3",
})).s("gm_piano").gain(0.54)

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B A B C D E F E G A B C D E F E G A H C D E F I J K L M N A B O P Q R S T S U O P Q R S T S U O V W X Y Z W X Y Z
  AA@3
>`.pickRestart({
  A: "[g#3,g#4]@2 [a#3,a#4]@2 [c4,c5]@2 [a#3,a#4]@2 [g#3,g#4]@2 [g3,g4] ~ [f3,f4]@2 [g3,g4]@2 [g#3,g#4]@2 [g3,g4]@2 [f3,f4] ~ [d#3,d#4] ~", // G# A# C A# G# G F G …
  B: "[c#3,c#4]@2 [d#3,d#4]@2 [f3,f4]@2 [d#3,d#4]@2 [c#3,c#4]@2 [c3,c4]@2 [a#2,a#3]@2 [c3,c4]@2 [c#3,c#4] ~ [d#3,d#4]@2 [f3,f4]@2 [g3,g4]@2", // C# D# F D# C# C A# C …
  C: "[g#3,g#4]@16 ~@2 [f3,g#3,c4] ~@5", D: "~@6 [g#3,c#4,f4] ~@11 [a#3,d#4,g4] ~@5",
  E: "~@6 [g#3,c4,d#4] ~@11 [f3,g#3,c4] ~@5", F: "~@6 [c#4,f4] ~@11 [a#3,d#4,g4] ~@5",
  G: "~@6 [a#3,c#4,f4] ~@11 [a#3,d#4,g4] ~@5", // A#m D#
  H: "[a#2,a#3]@2 [c3,c4]@2 [c#3,c#4]@2 [d#3,d#4]@2 [f3,f4]@2 [g3,g4]@2 [g#3,g#4]@7 ~@5", // A# C C# D# F G G#
  I: "~@6 g#3@4 a#3 ~ c4@4 g#3@2 [g#3,a#3]@3 ~ c4 ~, ~@18 [f3,c4] ~@5", // G#sus2 F5
  J: "c#4@6 [g#3,f4] ~@5 [d#4,g4]@4 ~@2 [a#3,d#4,g4] ~@5, ~@3 c#4@3 ~@3 [c#4,f4]@2 ~", // C# D# C#
  K: "[c4,d#4]@5 ~ [g#3,c4,d#4] ~@3 a#3 ~ c4@3 ~ g#3@2 [f3,g#3,c4] ~@3 c4 ~, ~@6 a#3 ~", // Cm G# Fm
  L: "c#4@6 c#4@6 [d#4,g4]@5 ~ [a#3,d#4,g4] ~@5, ~@6 f4 ~@11 [c#4,f4]@4 ~@2", // D# C#
  M: "[c4,d#4]@5 ~ g#3@4 a#3 ~ c4@3 ~ g#3@2 [g#3,a#3]@3 ~ c4 ~, ~@18 [f3,c4] ~@5", // Cm G#sus2 F5
  N: "c#4@6 [g#3,f4] ~@3 c4 ~ a#3@2 ~@2 a#3 ~ [a#3,d#4,g4] ~@3 a#3@2, ~@2 c#4@2 ~@2 g3 ~", // C# D#
  O: "[a3,a4]@2 [b3,b4]@2 [c#4,c#5]@2 [b3,b4]@2 [a3,a4]@2 [g#3,g#4] ~ [f#3,f#4]@2 [g#3,g#4]@2 [a3,a4]@2 [g#3,g#4]@2 [f#3,f#4] ~ [e3,e4] ~", // A B C# B A G# F# G# …
  P: "[d3,d4]@2 [e3,e4]@2 [f#3,f#4]@2 [e3,e4]@2 [d3,d4]@2 [c#3,c#4]@2 [b2,b3]@2 [c#3,c#4]@2 [d3,d4] ~ [e3,e4]@2 [f#3,f#4]@2 [g#3,g#4]@2", // D E F# E D C# B C# …
  Q: "[a3,a4]@16 ~@2 [f#3,a3,c#4] ~@5", R: "~@6 [a3,d4,f#4] ~@11 [b3,e4,g#4] ~@5",
  S: "~@6 [a3,c#4,e4] ~@11 [f#3,a3,c#4] ~@5", T: "~@6 [d4,f#4] ~@11 [b3,e4,g#4] ~@5",
  U: "~@6 [b3,d4,f#4] ~@11 [b3,e4,g#4] ~@5", // Bm E
  V: "[b2,b3]@2 [c#3,c#4]@2 [d3,d4]@2 [e3,e4]@2 [f#3,f#4]@2 [g#3,g#4]@2 [a3,a4]@7 ~@5", // B C# D E F# G# A
  W: "~@6 [a3,a4]@4 [b3,b4] ~ [c#4,c#5]@4 [a3,a4]@2 [b3,b4]@3 ~ [c#4,c#5] ~", // A B C# A B C#
  X: "[d4,d5]@2 ~ [d4,d5]@2 [c#4,c#5] [b3,b4]@2 [c#4,c#5] [d4,d5]@2 [b3,b4]", // D C# B C# D B
  Y: "[c#4,c#5]@5 ~ [c#4,c#5]@4 [d4,d5] ~ [e4,e5]@4 [c#4,c#5]@2 [d4,d5]@4 [e4,e5] ~", // C# D E C# D E
  Z: "[f#4,f#5]@5 ~ [g#4,g#5]@5 ~ [a4,a5]@5 ~ [b4,b5]@3 ~@3", AA: "[[a3,c#4,e4,a4]@25 ~@11]/3",
})).s("gm_acoustic_guitar_steel").gain(0.68)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B C D E F G H I J K L E F G H I J K M E F G N@2 O P@2 Q@2 A B R S T U V W X Y Z AA T U V W X Y Z AB T U V AC@2 U V
  AD@4
>`.pickRestart({
  A: "[g#3,c4,d#4] [f3,g#3,c4]", B: "[g#3,c#4,f4] [d#3,d#4,g4,a#4]", C: "[g#3,c4,d#4]!2 [f3,g#3,c4]!2",
  D: "[c#4,f4,g#4]!2 [d#4,g4,a#4]!2, c#3 d#3", // C# D#
  E: "g#2@2 ~@3 g#2 [f3,g#3,c4]@3 [f3,g#3,c4]@3, [g#3,c4,d#4]!2 ~@2, ~@2 g#2@3 ~@7", // Fm G#
  F: "[a#3,c#4,f4]!2 [d#4,g4]!2, ~ [d#3,a#3]", // A#m D# D#5
  G: "~@5 g#2 [f3,g#3,c4]@3 ~@2 f2, [g#3,c4,d#4]!2 ~ [f3,g#3,c4], ~@2 g#2@3 ~@7", // Fm G# Fm
  H: "~@6 c#4@7 ~@3 [d#3,a#3]@2 [d#4,g4]@6, [c#3,f3,g#3]@13 ~@11", // D#5 D# C#
  I: "[g#3,c4,d#4]@5 ~@5 g#2@2 [f3,g#3,c4]@6 [f3,g#3,c4]@6, ~ [g#3,c4,d#4] ~@2", // G# Fm G#
  J: "[c#4,f4]@3 [c#4,f4]@2 ~ [d#4,g4,a#4]@3 [d#4,g4,a#4]@3, c#3@5 [d#3,a#3]@7", K: "[g#2,g#3,c4,d#4] [f3,g#3,c4]",
  L: "[c#3,c#4,f4]@6 [a#3,d#4,g4]@5 ~", M: "[a#3,c#4,f4]@2 ~@4 [a#3,d#4,g4]@2 ~@4 [g#3,c4,d#4]@9 ~@3",
  N: "[~@6 c#4@7 ~@3 [d#3,a#3]@2 d#4@6 g#2@4 ~@2 [g#3,c4,d#4]@4 g#2 ~ [f3,g#3,c4]@4 ~@2 [f3,g#3,c4]@4 ~@2, [c#3,f3,g#3]@13 ~@5 g4@16 ~@14, ~@4 [g#3,c4,d#4] ~@3, ~@14 g#2@3 ~@7]/2", // D#5 G# Fm C# G#
  O: "[a#3,c#4,f4]@4 ~@2 a#3@6 [d#4,g4]@6 [d#4,g4]@5 ~, ~@6 [c#4,f4]@17 ~, ~@12 [d#3,a#3]@11 ~", // A#m D# C# D#5
  P: "[~@6 [g#3,c4,d#4]@4 g#2 ~ [f3,g#3,c4]@4 ~@2 [f3,g#3,c4]@2 ~@10 c#4@5 ~@7 [d#4,g4]@4 ~@2, [g#3,c4,d#4]@6 ~@18 [c#3,f3,g#3]@11 ~@5 [d#3,a#3]@6 ~@2, ~@4 g#2@6 ~@12 f2@13 ~@13]/2", // G# Fm D# G# C# D#5
  Q: "[[g#3,c4,d#4]@6 [g#3,c4,d#4]@4 ~@2 [f3,g#3,c4]@6 ~@14 f4@2 c#4 ~@3 a#4@2 g4@2 ~@2 a#4@2 g4 ~, ~@9 [f3,g#3,c4]@5 f4@2 ~@5 d#4@2 ~, ~@24 c#3@9 ~@3 [d#3,a#3]@11 ~, ~@26 c#4@7 ~@15, ~@30 g#4@5 ~@13]/2", // G# Fm D#5
  R: "[a3,c#4,e4]!2 [f#3,a3,c#4]!2", S: "[d4,f#4,a4]!2 [e4,g#4,b4]!2, d3 e3",
  T: "a2@2 ~@3 a2 [f#3,a3,c#4]@3 [f#3,a3,c#4]@3, [a3,c#4,e4]!2 ~@2, ~@2 a2@3 ~@7", // F#m A
  U: "[b3,d4,f#4]!2 [e4,g#4]!2, ~ [e3,b3]", // Bm E E5
  V: "~@5 a2 [f#3,a3,c#4]@3 ~@2 f#2, [a3,c#4,e4]!2 ~ [f#3,a3,c#4], ~@2 a2@3 ~@7", // F#m A F#m
  W: "~@6 d4@7 ~@3 [e3,b3]@2 [e4,g#4]@6, [d3,f#3,a3]@13 ~@11", // E5 E D
  X: "[a3,c#4,e4]@5 ~@5 a2@2 [f#3,a3,c#4]@6 [f#3,a3,c#4]@6, ~ [a3,c#4,e4] ~@2", // A F#m A
  Y: "[d4,f#4]@3 [d4,f#4]@2 ~ [e4,g#4,b4]@3 [e4,g#4,b4]@3, d3@5 [e3,b3]@7", Z: "[a2,a3,c#4,e4] [f#3,a3,c#4]",
  AA: "[d3,d4,f#4]@6 [b3,e4,g#4]@5 ~", AB: "[b3,d4,f#4]@2 ~@4 [b3,e4,g#4]@2 ~@4 [a3,c#4,e4]@9 ~@3",
  AC: "[~@6 d4@7 ~@3 [e3,b3]@2 e4@6 a2@4 ~@6 a2@2 [f#3,a3,c#4]@6 [f#3,a3,c#4]@6, [d3,f#3,a3]@13 ~@5 g#4@18 ~@12, ~@4 [a3,c#4,e4]!2 ~@2, ~@14 a2@3 ~@7]/2", // E5 F#m D A
  AD: "[~@6 d4@7 ~@3 [e3,b3]@2 ~@6 [a2,a3,c#4]@50 ~@22, [d3,f#3,a3]@13 ~@5 [e4,g#4]@48 ~@30]/4", // E5 A D E
})).s("gm_electric_guitar_muted").gain(0.5)

// drums · kick
const kick = s("bd").struct("<A@2 B@2 C@6 B@2 C@6 B@2 C@10 A@2 B@2 C@6 B@2 C@6 B@2 C@8 D ~@2>".pickRestart({
  A: "x!2", B: "x!4", C: "x ~@4 x!2 ~ x ~@2 x", D: "x",
})).gain(0.62)

// drums · snare
const snare = s("sd").struct("<A@2 B C B@7 C B@7 C B@10 A@2 B C B@7 C B@7 C B@7 D ~@3>".pickRestart({
  A: "~@5 x ~@5 x", B: "~ x ~ x", C: "~@3 x ~@6 x!2", D: "x ~@2 x ~@2 x ~@4 x",
})).gain(0.62)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~ A ~ B ~@7 B ~@7 B ~@11 A ~ B ~@7 B ~@7 B ~@7 A ~@3>".pickRestart({
  A: "~@9 x!2 ~", B: "~@6 x!4 ~@2",
})).gain(0.19)

// drums · hihat
const hihat = s("hh").struct("<A@2 ~@2 B@6 ~@2 B@6 ~@2 B@10 A@2 ~@2 B@6 ~@2 B@6 ~@2 B@8 ~@3>".pickRestart({
  A: "~ x ~ x", B: "x!4",
})).gain(0.62)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@4 A@6 ~@2 A@6 ~@2 A@10 ~@4 A@6 ~@2 A@6 ~@2 A@8 ~@3>".pickRestart({
  A: "~@2 x ~@2 x ~@2 x ~@3",
})).gain(0.19)

// drums · open hat
const open_hat = s("oh").struct("<A@2 B@2 C@6 B@2 C@6 B@2 C@10 A@2 B@2 C@6 B@2 C@6 B@2 C@8 D ~@2>".pickRestart({
  A: "x!2", B: "x!4", C: "~@11 x", D: "x",
})).gain(0.62)

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

stack(
  bass, piano, acoustic_guitar_steel, electric_guitar_muted, kick, snare, snare_soft, hihat, hihat_soft, open_hat, ride
)

More by Herman's Hermits