Strudelify

And The Beat Goes On

The Whispers

KeyB minorTempo117 bpm
0:00/0:00
// And The Beat Goes On — The Whispers
// 117 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(117/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 · pad bowed · "BOWEDGLASS"
const pad_bowed = note(`<
  ~ A B C D C E A F ~@8 G ~ H ~ I ~ J ~ K@2 L@2 M@2 N@2 ~@4 G ~ H ~ I ~ J ~@9 A B C ~ C E A F ~@24 K@2 L@2 M@2 N@2 ~@4 G
  ~ H ~ I ~ O ~
>`.pickRestart({
  A: "~@4 [d5,f#5,b5]@3 ~ [c#5,e5,a5]@6 ~@2", B: "f#4@11 ~@5", C: "~@4 [d5,f#5,b5]@3 ~ [c#5,e5,a5]@7 ~",
  D: "~@2 f#4@5 ~", E: "~ f#4@12 ~@3", F: "f#4@13 ~@3", G: "~@4 [d5,f#5,b5]@4 [c#5,e5,a5]@7 ~",
  H: "~ [d5,f#5,b5] [c#5,e5,a5]@2", I: "~@2 [d5,f#5,b5]@2 [c#5,e5,a5]@3 ~", J: "~ [d5,b5] [c#5,e5,a5]@2, ~@3 f#5@4 ~@9",
  K: "[~@12 f#4@7 ~@13]/2", L: "[~@4 f#4@5 ~@7]/2", M: "[~@8 f#4@11 ~@13]/2", N: "[~@2 f#4@3 ~@3]/2",
  O: "~ [d5,b5] ~@2, ~@3 f#5@4 ~@9", // G
})).s("gm_pad_bowed").gain(0.35)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D C E A F A G A H C I A J A G A H C I A K L M L N O P L Q R S T U A G A H C I A K ~@8 A B C D C E A F A G A H
  C I A J ~@16 L M L N O P L Q R S T U A G A H C I V ~
>`.pickRestart({
  A: "b2@2 ~@3 b2 d3 e3 f#3 a3 f#3 ~@3 e3 d3", B: "f#2@2 ~ f#2@2 ~ g2@2 ~@4 g2 ~ g2@2, ~@13 g3@2 ~",
  C: "b2@2 ~@3 b2 d3 e3 f#3 a3 f#3@2 ~@2 e3 d3", D: "f#2@2 ~ f#2@2 ~ g2@3 ~ g2 g3 ~ g2 a2@2",
  E: "f#2@2 ~ f#2@2 ~ g2@2 ~@2 g2 g3 ~ g2 a2@2", F: "f#2@2 ~ f#2@2 ~ g2@3 ~ g2 ~@2 g2 a2 ~, ~@6 g3 ~",
  G: "f#2 ~@2 f#2 ~@2 g2@2 ~@2 g2 g3 ~ g2 a2 ~", H: "f#2@2 ~ f#2@2 ~ g2@2 ~@2 g3 ~ g3@3 ~",
  I: "f#2 ~@2 f#2 ~@2 g2@2 ~@2 g2 g3 ~ g2 a2@2", J: "f#2 ~@2 f#2 ~@2 g2@2 ~@2 g3 ~ g3@2 a2@2",
  K: "f#2 ~@2 f#2 ~@2 g2@2 ~@2 g3 ~ g3@2 a2 ~", L: "b2@2 ~@3 b2 b3 d3@2 ~ e3 ~@5",
  M: "e3 ~@4 b3 e3 b3 e3 ~ e3 ~ f#3 ~ f#3 ~", N: "e3@2 ~@3 b3 e3 b3 e3 ~ e3 ~ f#3 ~ f#3 ~",
  O: "b2@2 ~@3 b2 b3 d3@2 ~ e3@2 ~@4", P: "e3@2 ~@3 b3 e3 b3 e3 ~ e3@2 f#3 ~ f#3 ~",
  Q: "e3@2 ~@3 b3 e3 b3 e3 ~ e3@2 f#3 ~ f#3@2", R: "e2@2 ~@4 e2!3 ~@2 d3 ~@2 d3@2", S: "e2 ~@5 e2!3 ~ d3 ~ d3@2 ~@2",
  T: "e2@2 ~@4 e2!3 ~ d3 ~@2 d3 ~@2", U: "e2@2 ~@2 e2@2 ~@2 f#2@2 ~@2 f#2 ~@3", V: "b2@2 ~@3 b2 d3 ~@9",
})).s("gm_acoustic_bass").gain(0.64)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@9 A B C ~ C D C ~ A B C ~ C D C ~ E F G H I J K L M@3 N A B C ~ C D C ~@17 A B C O C D C P ~@2 Q ~ R ~ S ~@3 Q ~ R ~
  S T E F G H I J K L M@3 N A B C ~ C D U ~
>`.pickRestart({
  A: "~ a3 b3 d4 b3 d4 e4 b3 f#4@4 ~@4", B: "~ d3 e3 g3 e3 g3 a3 b3 e4@4 ~@4", C: "~ a3 b3 d4 b3 d4 e4 b3 f#4@3 ~@5",
  D: "~ d3 e3 g3 e3 g3 a3 e3 b3 e4@2 ~@5",
  E: "[f#3,b3]@2 b3@3 [f#3,b3] ~@2 [e3,b3] ~@2 [e3,b3] ~@2 [e3,b3] ~, [d4,f#4,a4]@5 ~@11, ~@2 f#3 ~@5 [f#3,a3,c#4,e4]@7 ~", // B5 E5 D F#m7
  F: "~@2 b3 ~@2 b3 [f#3,a3,c#4,e4] ~ c#4 [f#3,a3,c#4,e4] e3 b3 [f#3,a3,c#4,e4] e3 [f#3,a3,b3,c#4,e4] ~", // F#m7
  G: "b3@2 b3@3 b3 f#3 ~ [e3,b3] ~@2 [e3,b3] ~@2 [e3,b3] ~, [d4,f#4,a4]@5 ~@11, ~@2 f#3 ~@5 [f#3,a3,c#4,e4]@6 ~@2", // E5 D F#m7
  H: "~@2 b3 ~@2 b3 e3 ~ c#4 e3 [f#3,a3,c#4,e4] b3 e3 [f#3,a3,c#4,e4] b3 e3", // F#m7
  I: "b3@2 b3@3 b3 f#3 ~ b3 ~ e3 b3 ~ e3 b3 ~, [d4,f#4,a4]@5 ~@3 [f#3,a3,c#4,e4]@5 ~@3", // D F#m7
  J: "~@2 [e3,b3] ~@2 [e3,b3] ~@2 [e3,c#4] ~@2 [e3,b3] ~@2 [e3,f#3,a3,b3,c#4,e4] ~", // E5 C#m E5 F#m7
  K: "b3@2 b3@3 [f#3,b3] ~@2 [f#3,a3,c#4,e4]@3 [e3,b3] ~@2 [e3,b3] ~, [d4,f#4,a4]@5 ~@11, ~@2 f#3 ~@5 [e3,b3] ~@7", // B5 F#m7 E5 D E5
  L: "~@2 [e3,f#3,a3,c#4,e4] ~@2 [e3,f#3,a3,c#4,e4] b3 ~ [f#3,a3,c#4,e4] b3 e3 [f#3,a3,c#4,e4] b3 e3 [f#3,a3,c#4,e4] ~", // F#m7
  M: "~@2 [g4,b4,d5,e5] ~@2 [g4,b4,d5,e5] ~@2 [g4,b4,d5,e5] ~@2 [g4,b4,d5,e5] ~@2 [g4,b4,d5,e5] ~", // Em7
  N: "~@4 [b4,d5,f#5] ~@3 [a#4,c#5,f#5] ~@3 [a#4,c#5,f#5] ~@3", O: "c#5 ~@2 c#5 ~@2 d5@3 ~@7",
  P: "c#5 ~@2 c#5 ~@2 d5@2 ~@8", Q: "a3 b3@6 ~@9", R: "d4@2 b3@7 ~@7", S: "a3 b3@7 ~@8",
  T: "~@8 [g4,b4,d5]@3 ~ [a4,c#5,e5]@2 ~@2", U: "~ a3 b3 d4 b3 d4 e4 ~@9",
})).s("gm_acoustic_guitar_steel").gain(0.48)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~@17 A B C D E F E G H@2 I@2 J@2 I@2 K@2 L M A B C D E F E G N F O F O F O P ~@24 N F O F O F O P H@2 I@2 J@2 I@2 K@2
  L M A B C D E F Q ~
>`.pickRestart({
  A: "[b3,d4,f#4]@2 [c#4,e4] ~, ~ a3", B: "[f#3,a3,c#4] ~@2 [f#3,a3,c#4] ~@2 [g3,b3,d4]@6 [a3,c#4,e4]@4",
  C: "[b3,d4,f#4]@2 [a3,c#4,e4] ~", D: "[f#3,a3,c#4] ~@2 [f#3,a3,c#4]@3 [g3,b3,d4]@6 [a3,c#4,e4]@4",
  E: "[b3,d4,f#4] [a3,c#4,e4]", F: "[f#3,a3,c#4]@3 [f#3,a3,c#4]@3 [g3,b3,d4]@6 [a3,c#4,e4]@4",
  G: "[f#3,a3,c#4]@3 [f#3,a3,c#4]@3 [g3,b3,d4]@7 ~@3", H: "[[b3,d4,f#4,a4]@2 [f#3,a3,c#4,e4]@4 [f#3,a3,c#4,e4]!2]/2",
  I: "[[b3,d4,f#4,a4]@8 [f#3,a3,c#4,e4]@16 [f#3,a3,c#4,e4] ~ [f#3,a3,c#4,e4] ~ [f#3,a3,c#4,e4]@4]/2", // Bm7 F#m7
  J: "[[b3,d4,f#4,a4]@8 [f#3,a3,c#4,e4]@15 ~ [f#3,a3,c#4,e4]@4 [f#3,a3,c#4,e4]@4]/2", K: "[g3,b3,d4,e4]/2",
  L: "[g3,b3,d4,f#4]", M: "[g3,b3,d4,f#4]@8 [a#3,c#4,f#4]@3 ~ [a#3,c#4,f#4]@3 ~",
  N: "~@7 d4 [a3,c#4,e4]@8, [b3,d4,f#4] ~, ~@3 e4 ~@4", O: "[b3,d4,f#4]@6 e4 d4 [a3,c#4,e4]@8",
  P: "[f#3,a3,c#4]@3 [f#3,a3,c#4]@3 [g3,b3,d4]@6 [a3,c#4,e4]@3 ~", Q: "[b3,d4,f#4] ~",
})).s("gm_epiano1").gain(0.36)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@8 A ~@3 B ~ C ~ D ~@3 A E F ~ G ~@8 H@4 ~@3 A E F ~ G ~@9 I ~ J ~ I ~ A ~@3 B ~ C ~ D ~@12 K@3 L ~@8 H@4 ~@3 A E F
  ~@2
>`.pickRestart({
  A: "~@12 b4 d5 e5 ~", B: "[f#4,a4,c#5]@6 [d4,g4,b4]@9 ~", C: "~@8 b4 ~ b4 ~ b4 d5 ~@2",
  D: "[a4,c#5,e5]@6 [g4,b4,d5,f#5]@9 ~", E: "~@8 f#5 ~ f#5 a5 ~ a5 b5 ~", F: "f#5 ~ f#5 e5 ~ d5 b4@8 ~@2",
  G: "[c#5,e5,a5] ~ [d5,f#5,b5] ~@5", // A Bm
  H: "[~@32 a5@4 b5@12 g5@3 f#5@3 e5@2 f#5@2 ~@2 f#5@2 ~@2, [g3,b3,d4,e4]@7 [a#3,c#4,f#4]]/4", // Em7 F#
  I: "~@10 b4 d5 e5 d5 b4 ~", J: "[a4,c#5,e5]@6 [b4,d5,f#5]@7 ~@3", K: "b4 f#5 e5 f#5 b4 f#5 e5 f#5",
  L: "b4@2 f#5@2 ~ f#5@2 ~@9, ~@2 e5 ~@5",
})).s("gm_string_ensemble_1").gain(0.41)

// chords · clavinet
const clavinet = note("<~@69 A B A B A B A B A B A B A B A B ~@20>".pickRestart({
  A: "b3 ~ [b4,d5,f#5] ~@2 [b3,b4,d5,f#5] f#3 b3 [f#3,a4,c#5,e5]@2 ~ [a4,c#5,e5] ~@2 [f#3,a4,c#5,e5] ~", // Bm F#m7 A F#m7
  B: "[f#4,a4]@2 f#3 [f#4,a4,c#5] ~@2 [f#3,f#4,a4,c#5] ~ g3@2 [g4,b4,d5]@2 a3@2 [a4,c#5,e5]@2, c#5 ~@15", // F#m G A
})).s("gm_clavinet").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@25 B A B A B A B A@3 C A@7 C A@3 C A@11 C A@3 C A@3 C A@12 D A@4 B A B A B A B A@3 C A@6 E ~
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x!3 ~", C: "x ~@3 x ~@3 x ~@3 x ~@2 x", D: "x ~ x ~ x ~ x!2", E: "x!2 ~@2",
})).gain(0.57)

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

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x]!102 [~ x ~@2] ~>").gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@32 [~@7 x] ~@59 [~@7 x] ~@12>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@9 [x!16]!8 [x!8]!86 [x!4 ~@4] ~>").gain(0.57)

// drums · open hat
const open_hat = s("oh").struct("<~@10 [~@7 x] ~ [~@7 x] ~ [~@7 x] ~@90>").gain(0.43)

// drums · crash
const crash = s("cr").struct(`<
  ~@17 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@7 A ~@23 A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "x",
})).gain(0.64)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@53
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!7
  ~@17
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!7
  ~@21
>`).gain(0.36)

// drums · bongos
const bongos = s("bongo:4").struct("<~@69 [~@10 x!2 ~@4] ~ [~@10 x!2 ~@4]!3 ~ [~@10 x!2 ~@4] ~@29>").gain(1.69)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@69 [~@6 x!2 ~@8] ~ [~@6 x!2 ~@8]!3 ~ [~@6 x!2 ~@8] ~@29>").gain(3.26)

stack(
  pad_bowed, bass, acoustic_guitar_steel, epiano1, string_ensemble_1, clavinet, kick, snare, clap, low_tom, hihat,
  open_hat, crash, cowbell, bongos, cabasa
)

More by The Whispers