Strudelify

Cruel Summer

Bananarama

KeyC♯ minorTempo110 bpm
0:00/0:00
// Cruel Summer — Bananarama
// 110 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 95 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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.

// bass · piano
const bass = note("<~@2 [~@7 a1] [b1 ~@3] ~@2 [~@7 a1] [b1 ~@3] ~@87>").s("gm_piano").gain(0.45).pan(0.7)

// other · agogo
const agogo = note(`<
  [a4 ~@2 c5 ~@2 a4 ~ a4 c5 ~ c5 a4 ~@2 c5 ~ a4 ~@2 a4 c5 ~ c5]!33
  [c#5!6 c5!6 b4!6 a#4!6]
  [a4 ~@2 c5 ~@2 a4 ~ a4 c5 ~ c5 a4 ~@2 c5 ~ a4 ~@2 a4 c5 ~ c5]!31
  [c#5!6 c5!6 b4!6 a#4!6]
  [a4 ~@2 c5 ~@2 a4 ~ a4 c5 ~ c5 a4 ~@2 c5 ~ a4 ~@2 a4 c5 ~ c5]!28
  [a4 ~@23]
>`).s("gm_agogo").gain(0.25).pan(1)

// other · agogo
const agogo_2 = note(`<
  [~@6 c5 ~@5 c5 ~ c5 ~@3 c5 ~@5]
  [c5 ~ c5 ~@3 c5 ~@5 c5 ~ c5 ~@3 c5 ~@5]!32
  ~
  [~@2 c5 ~@3 c5 ~@5 c5 ~ c5 ~@3 c5 ~@5]
  [c5 ~ c5 ~@3 c5 ~@5 c5 ~ c5 ~@3 c5 ~@5]!30
  ~
  [c5 ~ c5 ~@3 c5 ~@5 c5 ~ c5 ~@3 c5 ~@5]!28
  [c5 ~@23]
>`).s("gm_agogo").gain(0.15).pan(0.1)

// bass · slap bass 1
const bass_2 = note(`<
  ~@2 A ~ B ~ A ~ B C D E D F D E G F H I J E J K L M N O P Q N R S T U V U W H I J E J K L M N O P Q N R S T N R X Y Z
  R AA AB G I AC K J K AD AE N O P AF N O S AG N O P AF N O S AG N O P AF N O S AH AI
>`.pickRestart({
  A: "a1@3 a1 ~@20", B: "g#1@3 g#1 ~@20", C: "~@18 c#2@2 b1 g#1@3", D: "c#2@3 b1 ~@19 b1", E: "a1@3 g#1@3 ~@17 b1",
  F: "a1@3 g#1@3 ~@6 b1@3 g#1 ~ b1@3 g#1 b1@3", G: "c#2@3 b1 ~@20", H: "c#2 b1 ~@6", I: "a1@3 g#1@3 ~@17 g#1",
  J: "c#2@3 b1@3 ~@17 b1", K: "a1 g#1 ~@6", L: "f#1 f#1@3 g#1@4", M: "a1!4 g#1 ~@3", N: "c#2 ~@4 b1 ~@3 a1 ~@13 a1",
  O: "b1 ~@4 a1 ~@3 a1 ~@4 g#1 b1@2 g#1 b1@2 g#1 b1@3", P: "c#2 ~@4 b1 ~@3 a1 ~@8 a1@4 ~ b1",
  Q: "b1 ~@5 b1@4 ~ a1!2 ~@4 g#1 b1@2 g#1 b1@3", R: "b1 ~@4 a1 ~@3 a1 ~@4 g#1 b1@2 g#1 b1@2 g#1 b1@2 g#1",
  S: "c#2 ~@4 b1 ~@3 a1 ~@14", T: "b1 ~@4 a1 ~@3 a1 ~@4 e1!2 ~@2 c#1@6", U: "f#1@3 e1 ~@19 g#1",
  V: "a1@3 g#1@3 ~@17 e1", W: "a1@3 g#1@3 f#1@3 ~@3 b1 ~@4 b1 ~@2 b1!2 ~@2", X: "c#2 ~@4 b1 ~@3 a1@3 ~@11 a1",
  Y: "b1 ~@4 a1 ~@3 a1@3 ~@5 g#1 b1@2 g#1 b1@3", Z: "c#2 ~@4 b1 ~@3 a1 ~@11 a1@2 a1",
  AA: "c#2@4 ~ b1 ~@3 a1 ~@5 a1 ~@4 a1 ~@3", AB: "b1@4 ~ a1 ~@3 a1 ~@4 e1!2 ~@2 c#1@2 c#1!2 ~@2",
  AC: "c#2@4 ~ b1@2 ~@16 b1", AD: "f#1@4 ~ f#1@7 g#1@12", AE: "a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~ g#1@6 ~@6",
  AF: "~@6 b1@3 a1@3 a1 ~@4 g#1 b1@2 g#1 b1@3", AG: "b1 ~@4 a1 ~@3 a1 ~@4 e1 e1@3 c#1@6",
  AH: "b1 ~@4 a1 ~@3 a1 ~@4 e1 e1@3 c#1@3 ~@3", AI: "~@18 c#2 ~@5",
})).s("gm_slap_bass_1").gain(0.5)

// chords · epiano2
const epiano2 = note(`<
  ~@2 A B ~@2 A B ~@2 C D C D C D C D C D C D C D@2 E F G F G F G F G ~@4 C D C D C D@2 E F G F G F G F G F G F G F G F
  G ~@6 D E F G F G F G F G F G F G F G F G F G F G F G F G ~
>`.pickRestart({
  A: "[a3,c#4,e4]@4 ~ [a3,c#4,e4]@4 [a3,c#4,e4] ~@14", B: "[b3,d#4,f#4]@4 ~ [b3,d#4,f#4]@4 [a3,c#4,e4]@15",
  C: "[c#4,e4,g#4] [b3,d#4,f#4]", D: "[a3,c#4,e4] [b3,d#4,f#4]", E: "[a3,c#4,e4]!4 [b3,d#4,f#4] ~@3",
  F: "[g#3,c#4,e4]@4 ~ [g#3,c#4,e4] ~@3 [a3,c#4,e4]@15", G: "[b3,d#4,f#4]@4 ~ [b3,d#4,f#4] ~@3 [a3,c#4,e4]@15",
})).s("gm_epiano2").gain(0.35).pan(0.3)

// chords · synth brass 1
const synth_brass_1 = note("<~@10 A B A B A B A B ~@46 A B A B ~@27>".pickRestart({
  A: "~@6 [c#4,e4,g#4]@3 [c#4,e4,g#4] ~@4 [b3,d#4,f#4] ~@3 [b3,d#4,f#4]@6", // C#m B
  B: "~@6 [a3,c#4,e4]@3 [a3,c#4,e4] ~@4 [b3,d#4,f#4] ~@3 [b3,d#4,f#4]@6", // A B
})).s("gm_synth_brass_1").gain(0.25)

// other · blown bottle
const blown_bottle = note(`<
  ~@16 A@2 ~@5 B C ~@2 D E ~@2 D E F ~@6 A@2 ~@2 C ~@2 D E ~@2 D E F ~ D E ~@2 D E F ~@2 G@2 ~@5 D E ~@2 D E ~@10 D E
  ~@2 D E ~ H
>`.pickRestart({
  A: "[~@3 c#6 ~ b5 ~@2 g#5 ~@2 f#5@6 g#5 e5 ~@2 f#5 ~ g#5@6 f#5 e5 ~ d#5 c#5 ~ d#5@7 ~@6]/2",
  B: "~@12 c#5@3 d#5 ~@2 e5 ~@2 f#5 ~@2", C: "g#5@9 a5 ~ g#5 f#5@12", D: "~@12 g#5 ~@2 b5 ~ g#5 ~@2 f#5 e5 ~@2",
  E: "c#5 ~@23", F: "d#5@4 ~ e5 ~@2 f#5 ~@2 g#5@4 f#5 ~ e5 f#5 ~ g#5 ~@3",
  G: "[~@3 c#6 ~ b5 ~@2 g#5 ~@2 f#5@6 g#5 e5@3 f#5 ~ g#5@6 f#5 e5 ~ d#5 c#5 ~ d#5@7 ~@6]/2",
  H: "g#5 ~@2 b5 ~ g#5 ~@2 f#5 e5 ~@8 c#5 ~@5",
})).s("gm_blown_bottle").gain(0.52)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@6 A B A C ~@16 D ~ E F G ~ H ~ I B I J ~@8 D ~ E F G ~ H ~ K ~ E F G ~ H ~@5 I L M A D ~ N ~ G ~ O ~ D ~ N ~ G ~ O ~
  D ~ N ~ G ~ O ~@2
>`.pickRestart({
  A: "~@11 c#3 b2 ~@2 c#3@2 ~ e3 ~ c#3@4", B: "~@11 b2 ~@2 c#3 ~@2 e3@7", C: "~@11 c#3 b2 ~ c#3 ~@2 f#3 ~@2 e3 c#3@3",
  D: "~@17 c#3 b2 ~@2 c#3 ~@2", E: "~@17 c#3 ~@2 e3 ~@2 f#3", F: "~ e3 ~@10", G: "~@17 f#3 ~@2 e3 f#3 ~@2",
  H: "~@11 f#3 ~@2 e3 ~@2 c#3 f#3 ~ e3@2 ~@2", I: "~@11 c#3 b2 ~@2 c#3@2 ~ e3 ~ c#3@2 ~@2",
  J: "~@11 f#3 ~@2 e3 ~@2 c#3 e3@3 c#3 ~@2", K: "~@17 c#3 b2@3 c#3 ~@2", L: "~@11 b2 ~@2 c#3 ~@2 e3 ~@2 c#3@4",
  M: "~@11 c#3 b2 ~@2 c#3@2 ~ f#3@2 ~ e3 ~@2", N: "~@11 c#3 ~@2 e3 ~@2 f#3 ~@2 e3@4",
  O: "~@11 f#3 ~@2 e3 ~@2 c#3 f#3 ~ e3@4",
})).s("gm_electric_guitar_muted").gain(0.4)

// other · orchestra hit
const orchestra_hit = note(`<
  ~@2 A ~ A B A ~ A C ~@15 D E ~@2 F G ~@3 A ~ A ~@8 D E ~@2 F G ~@2 F G ~@2 F G ~@3 A ~ A H A ~ A I ~@3 F G ~@2 F G ~@2
  F G ~@2 F G ~@2 F G ~@2 F J
>`.pickRestart({
  A: "[g#4,g#5] ~ [b4,b5] [g#4,g#5] ~@20", B: "~@18 [f#4,f#5]@2 ~ [g#4,g#5]@2 ~",
  C: "[e3,e4] ~@2 [e3,e4] ~@2 [e3,e4] ~@2 [e3,e4] ~@2 [f#3,f#4]@3 ~@9", // E F#
  D: "[e3,e4]@2 ~ [e3,e4]@2 ~ [e3,e4]@2 ~ [e3,e4]@2 ~ [f#3,f#4]@2 ~@4 [e3,e4]@2 ~@4", E: "[c#3,c#4] ~@11",
  F: "~@9 [e4,e5] ~@2", G: "[c#4,c#5] ~@11", H: "~@6 [f#4,f#5] ~@2 [g#4,g#5] ~@2",
  I: "[e3,e4]@2 ~ [e3,e4]@2 ~ [e3,e4]@2 ~ [e3,e4]@2 ~ [f#3,f#4]@2 ~@10", J: "~@6 [c#4,c#5,c#6] ~",
})).s("gm_orchestra_hit").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B A B A B A C A B A B A B A B A B A B A B A C D E D E D E D E A B A F A B A B G H A C D E D E D E D E@9 A B A B
  A B A C E@6 I E@7 I E@7 I E J
>`.pickRestart({
  A: "x!2 ~@6", B: "x!2 ~@3 x ~ x", C: "x!5 ~@3", D: "x ~@8 x ~@13 x", E: "x ~@8 x ~@2 x ~@10 x", F: "x ~@2 x ~@4",
  G: "x ~@2 x ~@19 x", H: "~ x ~@3 x ~ x", I: "x ~@2 x!2 ~@2 x", J: "~@3 x",
})).gain(0.49)

// drums · snare
const snare = s("sd").struct("<~@2 A@7 B A@15 B A@11 C A@7 B A@23 B A@24 D>".pickRestart({
  A: "~ x ~ x", B: "x!5 ~@3", C: "~ x!2 ~@5", D: "~@3 x",
})).gain(0.49)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@10 A B C B C B C B A B C B C B C D E F G F G F G F A B C H A B C B C B C D E F G F G F G F E F G F G F G F A B C B A
  B C D E F G F G F G F E F G F G F G F E F G F G F G F ~
>`.pickRestart({
  A: "~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2", B: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x!2 ~@5",
  C: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2", D: "x!5 ~@3", E: "~ x!7", F: "x!5 ~ x ~", G: "x!8",
  H: "x!3 ~@5",
})).gain(0.33)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 B ~ B ~ B ~ B ~ A ~@3 A ~ A ~ A ~@3 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ A ~ A ~ A ~@3 B
  ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~ x",
})).gain(0.33)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@10 [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!84 x>").gain(0.22)

stack(
  bass, agogo, agogo_2, bass_2, epiano2, synth_brass_1, blown_bottle, electric_guitar_muted, orchestra_hit, kick, snare,
  hihat, open_hat, crash, tambourine
)

More by Bananarama