Strudelify

Tell Her No (acoustic)

The Zombies

KeyA minorTempo128 bpm
0:00/0:00
// Tell Her No (acoustic) — The Zombies
// 128 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level. 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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@4 B@2 C@2 D E@5 F@2 G@2 H@4 B@2 C@2 D E@5 F@2 G@2 I@6 J K@7 C@2 D E@5 F@2 G@2 L@4
>`.pickRestart({
  A: "[d5 e5@2 c5 [f4,a4,b4,d5]@3 [f4,a4,b4,d5]@3 [f4,a4,b4,d5]@3 [f4,a4,b4,d5]@3, [f4,a4] ~@3]/2", // Bm7b5 F
  B: "[d5 e5@2 c5 [e4,g4,b4]@3 [e4,g4,b4]@2 e4 g4@2 a4@2 g4@2, [f4,a4] ~@2 [c4,e4]]/2", // Em F C
  C: "[e4 c4@2 c4 e4 d4@7 ~ [f4,a4,b4,d5]@3, a3 [f3,a3]@2 ~]/2", D: "[f4,a4,b4,d5]@4 [e4,g4,b4]@3 c4",
  E: "[e4@2 g4@2 c5@2 g4@4 e4 c4 e4 c4 d4@6 [f3,a3,b3,d4]@3 [f3,a3,b3,d4]@2 e4 f4 g4 [c4,e4,a4]@3 [c4,e4,a4]@3 [c4,e4,a4]@3 [c4,e4,a4]@3, ~@2 [c4,e4]@3 a3 [f3,a3]@4 ~@10]/5", // Bm7b5 Am C F
  F: "[a4 g4 a4 b4 [e4,g4,c5]@3 [e4,g4,c5]@3 [e4,g4,c5]@3 [e4,g4,c5]@3, [c4,e4] ~@3]/2", // C
  G: "[c5 d5 c5 b4 [c4,e4,a4]@3 [c4,e4,a4]@3 [c4,e4,a4]@3 [c4,e4,a4]@3, [e4,g4] ~@3]/2", // Am Em
  H: "[a4@2 c5@2 b4 g4@2 e4@3 f4 g4 a4 f4@2 [f3,b3,d4]@3 [f3,g3,b3]@2 [e3,g3,c4]@8 ~ [f4,a4,b4,d5]@3, [c4,e4]@4 [c4,e4]@3 c4@5 [a3,c4]@3 ~@17]/4", // Bdim G7 C Bm7b5 C Am
  I: "[a4@2 c5@2 b4 g4@2 e4@3 f4 g4 a4 f4@2 [f3,b3,d4]@3 [f3,g3,b3]@2 [e3,g3,c4]@16 ~@2 [c4,e4,a4] c5@2 d5 c5@2 [c5,e5]@2 [c5,e5]@2, [c4,e4]@4 [c4,e4]@3 c4@5 [a3,c4]@3 ~@24 [e4,a4]@5 e4@4]/6", // Bdim G7 C Am C Am A5
  J: "[b4,d5] [a4,c5]@2 a4 c5@2 b4@2, e4@3 ~ [e4,g4]@4", // Bm Am Em
  K: "[c5 d5@2 [g4,c5,e5]@9 ~@4 c5@2 d5@2 [c5,e5] [b4,d5]@2 [e4,a4,c5]@3 [a4,c5,e5]@2 e5 d5@2 d5@3 e5@2 e5 d5@2 b4@3 g4@2 [e4,g4,b4]@3 [e4,g4,b4]@2 e4 g4@2 a4@2 g4@2, [e4,g4]@3 ~@12 a4@5 ~@36, ~@16 e4@4 e4@3 ~@5 [f4,a4]@8 [f4,b4]@3 f4@5 ~@8 [c4,e4]@4]/7", // C Bm Am Em F Fdim C
  L: "[a4@2 c5@2 b4 g4@2 e4@3 f4 g4 a4 f4@2 [f3,b3,d4]@3 [f3,g3,b3]@2 [e3,g3,c4]@10 ~@2, [c4,e4]@4 [c4,e4]@3 c4@5 [a3,c4]@3 ~@17]/4", // Bdim G7 C Am
})).s("gm_acoustic_guitar_steel").gain(0.3).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  A@4 B C D@2 E C F@2 G H I J K H L@4 B C D@2 E C F@2 G H I J K H M@5 N O P@2 Q R@3 C D@2 E C F@2 G H I J K H S@4
>`.pickRestart({
  A: "[d3 d2 g2 g1@3 g2 ~]/2", B: "b2 g2 c2 g2", C: "~@2 c3@2 a2@2 ~ e2", D: "[a2@2 a2@2 d2@2 ~ d3@3 d2@2 g2@2 ~@2]/2",
  E: "g1 g2 c2 g2", F: "[a2@2 a2@2 d2@2 ~ d3@3 d2@2 g2@2 g1@2]/2", G: "g2 ~@3 a2@2 e3@2", H: "~ e2 a2 e3",
  I: "a2@2 c3 g3", J: "~ g2 c3 g3", K: "c3@2 a2 e3",
  L: "[a2@4 c3@2 ~ g3@3 g2@2 d2@2 ~ g2@3 g2@2 c2@2 ~ g2@3 c3@2 g2@2 ~@2]/4",
  M: "[a2@4 c3@2 ~ g3@3 g2@2 d2@2 ~ g2@3 g2@2 c2@2 ~ g2@3 g1@2 c2@2 ~ g2@3 c3@2 a2@2 ~@2]/5", N: "e3 e2 a2 ~",
  O: "e2 a2 c3 ~", P: "[g3@2 g2@2 c3@2 ~ g2@3 c3@2 a2@2 e3@2]/2", Q: "~ e2 a2 ~", R: "[e3 a2 [d2,d3]@4 g2@4 c2 g2]/3",
  S: "[a2@4 c3@2 ~ g3@3 g2@2 d2@2 ~ g2@3 g2@2 c2@2 ~ g2@3 g1@2 c2@2 ~@2]/4",
})).s("gm_electric_bass_finger").gain(0.24)

// other · drawbar organ
const drawbar_organ = note("<~@4 A@8 B@8 C@8 D@8 E@2 F@8 G@8 D@8 E@2 H@2>".pickRestart({
  A: "[~ [c3,c4]@2 [a2,a3]@2 [d3,d4]@2 [g3,g4]@2 [c3,c4]@2 [a2,a3]@2 [d3,d4]@2 [g3,g4]]/8", // C A D G C A D G
  B: "[~ [a2,a3]@2 [a2,a3]@2 [c3,c4]@2 [c3,c4]@2 [a2,a3]@2 [a2,a3]@2 [c3,c4]@2 [d3,d4]]/8", // A C A C D
  C: "[[g3,g4] [c3,c4]@2 [g3,g4]@2 [c3,c4]@2 [a2,a3]@2 [d3,d4]@2 [g3,g4]@2 [c3,c4]@2 [a2,a3]]/8", // G C G C A D G C …
  D: "[~ [d3,d4]@2 [g3,g4]@2 [a2,a3]@2 [a2,a3]@2 [c3,c4]@2 [c3,c4]@2 [a2,a3]@2 [a2,a3]]/8", // D G A C A
  E: "[~ [c3,c4]@2 [d3,d4]]/2", // C D
  F: "[[g3,g4] [c3,c4]@2 [c3,c4]@2 [a2,a3]@2 [a2,a3]@2 [c3,c4]@2 [c3,c4]@2 [a2,a3]@2 [a2,a3]]/8", // G C A C A
  G: "[~ [d3,d4]@2 [g3,g4]@2 [c3,c4]@2 [a2,a3]@2 [d3,d4]@2 [g3,g4]@2 [c3,c4]@2 [a2,a3]]/8", // D G C A D G C A
  H: "[[g3,g4] [c3,c4]@2 ~]/2", // G C
})).s("gm_drawbar_organ").gain(0.15).pan(0.7)

// chords · synth strings 2
const synth_strings_2 = note(`<
  A ~ A ~ A B@3 ~ C@3 ~@2 D ~ D ~ D ~ E@2 A B@3 ~ C@3 ~@2 D ~ D ~ D ~ F@3 G H I@2 J K@2 ~ B@3 ~ C@3 ~@2 D ~ D ~ D ~ L@2
>`.pickRestart({
  A: "[f4,a4] ~", B: "[~@2 a3 [f3,a3]@2 ~, ~ [c4,e4]@2 ~@3]/3", C: "[~@2 [c4,e4]@3 ~ [f3,a3]@4 ~@2]/3", D: "[c4,e4] ~",
  E: "[~ [e3,g3,c4]@2 ~]/2", F: "[~ [e3,g3,c4]@4 ~]/3", G: "~ e4", H: "~ [e4,g4]", I: "[~ [g4,c5]@2 ~]/2", J: "e4 ~",
  K: "[~ [f4,a4]@2 ~]/2", L: "[~@2 [e3,g3,c4]@5 ~]/2",
})).s("gm_synth_strings_2").gain(0.24).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  A@2 B@2 C@2 D@2 E@2 D@8 F@2 E@2 D C D@2 E@2 D@8 F@2 E@2 G A B@2 C@2 D@3 C D@2 E@2 D@8 F@2 E H
>`.pickRestart({
  A: "x ~@3 x ~@2 x", B: "x!2 ~@2 x!2 ~@2", C: "x!2 ~@3 x ~ x", D: "x!2 ~ x ~ x ~ x", E: "x!2 ~ x ~ x ~@2",
  F: "~ x ~ x ~ x ~ x", G: "x!2 ~ x!2 ~@2 x", H: "x!2 ~ x!2 ~@3",
})).gain(0.22)

// drums · snare
const snare = s("sd").struct("<A@18 B@2 C@2 A@14 B@2 C@2 A@22 B@2 C D>".pickRestart({
  A: "~ x ~ x", B: "x!4", C: "~@2 x ~@4 x", D: "~ x ~@2",
})).gain(0.22)

// drums · low tom
const low_tom = s("lt").struct("<~@65 [~ x]>").gain(0.15)

// drums · open hat
const open_hat = s("oh").struct("<A@8 B C D@2 E@2 F@5 G A@6 B C D@2 E@2 F@5 G A@14 B C D@2 E@2 F@5 G A H>".pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~@3 x ~ x ~@2", D: "~@5 x ~ x", E: "~ x ~ x ~@4", F: "~ x ~ x ~ x ~@2",
  G: "~ x ~ x ~ x ~ x", H: "~ x",
})).gain(0.22)

// drums · crash
const crash = s("cr").struct(`<
  A@6 B@2 C@2 D@2 E@2 F@2 G@4 A@2 B A B@2 C@2 D@2 E@2 F@2 G@4 A@2 B A@5 B@3 A B@2 C@2 D@2 E@2 F@2 G@4 A H
>`.pickRestart({
  A: "x!7 ~", B: "x!3 ~ x!3 ~", C: "x!3 ~ x ~ x!2", D: "x!5 ~ x ~", E: "x ~ x ~ x!4", F: "x ~ x ~ x ~ x!2", G: "x!4",
  H: "x!5 ~@3",
})).gain(0.17)

stack(acoustic_guitar_steel, bass, drawbar_organ, synth_strings_2, kick, snare, low_tom, open_hat, crash)

More by The Zombies