Strudelify

Help

Bananarama

KeyC majorTempo186 bpm
0:00/0:00
// Help — Bananarama
// 186 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 3 "PIZZICATO" pizzicato strings (copy of ch 11 "ORGAN" drawbar organ); ch 7 "E.GUITAR 2" electric guitar jazz (copy of ch 5 "E.PIANO" epiano2)
// note: Full arrangement: all 107 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): E.GUITAR 1.
setcpm(186/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 · clavinet
const clavinet = note(`<
  A B C D E@2 F G H I J K L M N G@2 O P Q R@2 S F A T U G C V W X E Y E Z F H J G J I G AA M R AB I H O Q@2 L M S G T A
  AC O AD@2 W AE AF AG AH AG J H O F G I J AA AI AJ AK I H G AL AA AM@2 AN O AO U A O V C W D Y AH Z Y O@2 AI M ~@3
>`.pickRestart({
  A: "~ [d4,a4] ~@2 [d4,a4]@2 ~@2", B: "[d4,a4] ~ [d4,a4] ~ [c4,g4] ~ [c4,g4] ~",
  C: "~@2 [a#3,f4]@2 ~@2 f3 ~ [a#3,f4]@4 ~@4", D: "[a#3,f4]@2 ~@2 [a#3,f4]@2 ~@2 [a3,e4]@7 ~",
  E: "[d4,g4] ~@2 [d4,g4] ~@2 [d4,g4] ~", F: "~ [c4,g4] ~@2 [c4,g4]@2 ~@2", G: "[c4,g4] ~@2 [c4,g4] ~@2 [c4,g4] ~",
  H: "~@2 [c4,g4]@2 ~@2 g3 ~ [c4,g4]@4 ~@4", I: "[c4,g4]@15 ~", J: "[c4,g4]@2 ~@2 [c4,g4]@2 ~@2 [c4,g4]@4 ~@2 g3 ~",
  K: "~@2 [b3,e4]@2 ~@2 e3 ~ [b3,e4]@4 ~@4", L: "~ [a3,e4] ~@2 [a3,e4]@2 ~@2",
  M: "[a3,e4]@2 [a3,e4]@2 ~@2 [a3,e4]@2 ~@6 e3 ~", N: "[c4,f4]@7 ~ [a#3,f4]@7 ~",
  O: "[c4,g4]@2 [c4,g4]@2 ~@2 [c4,g4]@2 ~@6 g3 ~", P: "[b3,e4] ~@2 [b3,e4] ~@2 [b3,e4] ~", Q: "[b3,e4]@15 ~",
  R: "[a3,e4]@15 ~", S: "[c4,f4]!2 ~@2 [a#3,f4] ~ [a#3,f4] ~", T: "[d4,a4]@2 ~@2 [d4,a4]@2 ~@2 [d4,a4]@4 ~@2 a3 ~",
  U: "[d4,a4] ~@2 [d4,a4] ~@2 [d4,a4] ~", V: "[a#3,f4] ~@2 [a#3,f4] ~@2 [a#3,f4] ~", W: "~ [a#3,f4] ~@2 [a#3,f4]@2 ~@2",
  X: "[a#3,f4] ~ [a#3,f4] ~ [a3,e4] ~ [a3,e4] ~", Y: "[d4,g4]@2 [d4,g4]@2 ~@2 [d4,g4]@2 ~@6 g3 ~",
  Z: "~ [d4,g4] ~@2 [d4,g4]@2 ~@2", AA: "~ [b3,e4] ~@2 [b3,e4]@2 ~@2", AB: "[c4,f4]!2 ~@2 [a#3,f4]!2 ~@2",
  AC: "[d4,a4]@2 [d4,a4]@2 ~@2 [d4,a4]@2 ~@6 a3 ~", AD: "[a#3,f4]@15 ~", AE: "[a#3,f4]!2 ~@2 [a3,e4]!2 ~@2",
  AF: "[d4,g4]@2 ~@2 [d4,g4]@2 ~@2 [d4,g4]@4 ~@2 g3 ~", AG: "[d4,g4]@15 ~", AH: "~@2 [d4,g4]@2 ~@2 g3 ~ [d4,g4]@4 ~@4",
  AI: "~@2 [a3,e4]@2 ~@2 e3 ~ [a3,e4]@4 ~@4", AJ: "[a3,e4]@2 ~@2 [a3,e4]@2 ~@2 [a3,e4]@4 ~@2 e3 ~",
  AK: "[c4,f4] ~ [c4,f4] ~ [a#3,f4]!2 ~@2", AL: "[b3,e4]@2 [b3,e4]@2 ~@2 [b3,e4]@2 ~@6 e3 ~",
  AM: "[a3,e4] ~@2 [a3,e4] ~@2 [a3,e4] ~", AN: "[c4,f4] ~ [c4,f4] ~ [a#3,f4] ~ [a#3,f4] ~",
  AO: "~@2 [d4,a4]@2 ~@2 a3 ~ [d4,a4]@4 ~@4", // D5
})).s("gm_clavinet").gain(0.47)

// bass · acoustic bass · "BASS 1"
const bass = note(`<
  A B C D E F G H G H G I J K L H G M N I J O L P A Q A R C S C D E T E U G H G H G H G I J O L H G V N I J K L P A Q A
  R C S C D E T E F G H G H G H G I J K L H G M N I J K L P A Q A H C S C W E T E U G X J Y@2 ~@2
>`.pickRestart({
  A: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~", B: "d3 ~ d3 ~ d3 ~ d3 ~ c3 ~ c3 ~ c3 ~ a2 ~",
  C: "a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~", D: "a#2 ~ a#2 ~ a#2 ~ a#2 ~ a2 ~ a2 ~ a2 ~ g#2 ~",
  E: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~", F: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ d3 ~",
  G: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", H: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ b2 ~",
  I: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ g2 ~", J: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  K: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ g2 ~", L: "f2 ~ f2 ~ f2 ~ f2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~",
  M: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ d#3 ~", N: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~",
  O: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ e2 ~", P: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c#3 ~",
  Q: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ c3 ~", R: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ a2 ~",
  S: "a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ a#2 ~ a2 ~", T: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ f#2 ~",
  U: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ b2 ~", V: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ f3 ~",
  W: "a#2 ~ a#2 ~ a#2 ~ a#2 ~ a2 ~ a2 ~ a2 ~ f#2 ~", X: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ g2 ~",
  Y: "[a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~@2 c3@15 ~@2]/2",
})).s("gm_acoustic_bass").gain(0.56)

// other · epiano2 · "E.PIANO"
const epiano2 = note(`<
  A B C B D E F@2 G H I J K L M N G O I J P Q R@2 S T U@2 S T V@2 W T X@2 Y Z AA@2 ~@67
>`.pickRestart({
  A: "[d4,f4,a4]@2 ~ f4", B: "g#4@2 g#4 g4@3 f4@2", C: "[d4,f4,a#4]@4 ~@2 d4 f4", D: "[d4,g4,b4]@4 ~ d4 f4 d4",
  E: "g#4@2 g#4 g4@5", F: "[[g4,e5]@3 [f4,d5] [e4,c5]@10 ~@2]/2", G: "~ e4!3", H: "e4!4", I: "e4!3 g4",
  J: "e4@4 d4 c4@3", K: "~ d#4 e4@2 e4@2 d#4@2", L: "e4@2 d#4 e4@3 e4@2", M: "f4@2 f4@2 f4 f4@3", N: "e4 ~",
  O: "e4@2 e4 e4@3 e4@2", P: "~@2 e4 d#4 e4@3 d#4", Q: "e4 d#4 e4@6", R: "[f4@2 f4@2 f4@2 f4 e4@7 ~@2]/2", S: "g4!4",
  T: "g4 f4 e4 d4", U: "[f4@4 e4 d4@5 ~@2 e4@2 f4@2]/2", V: "[f4@4 e4 d4@9 ~@2]/2", W: "g4@2 g4@2 g4 g4@3",
  X: "[f4@4 e4 d4@5 ~@2 g4@2 g4@2]/2", Y: "[g4,e5]", Z: "[f4,d5]@4 g4 f4@3", AA: "[e4@3 ~]/2",
})).s("gm_epiano2").gain(0.64)

// other · flute
const flute = note("<~@40 A B C D E F G H A I C D J K L@2 M N O@2 M N P@2 Q N R@2 S T U@2 ~@35>".pickRestart({
  A: "~ e4!3", B: "e4!4", C: "e4!3 g4", D: "e4@4 d4 c4@3", E: "~ d#4 e4@2 e4@2 d#4@2", F: "e4@2 d#4 e4@3 e4@2",
  G: "f4@2 f4@2 f4 f4@3", H: "e4 ~", I: "e4@2 e4 e4@3 e4@2", J: "~@2 e4 d#4 e4@3 d#4", K: "e4 d#4 e4@6",
  L: "[f4@2 f4@2 f4@2 f4 e4@7 ~@2]/2", M: "g4!4", N: "g4 f4 e4 d4", O: "[f4@4 e4 d4@5 ~@2 e4@2 f4@2]/2",
  P: "[f4@4 e4 d4@9 ~@2]/2", Q: "g4@2 g4@2 g4 g4@3", R: "[f4@4 e4 d4@5 ~@2 g4@2 g4@2]/2", S: "[g4,e5]",
  T: "[f4,d5]@4 g4 f4@3", U: "[e4@3 ~]/2",
})).s("gm_flute").gain(0.72)

// bass · fretless bass · "BASS 2"
const bass_2 = note(`<
  A B C D E@2 F@2 G@2 H@2 I@2 J K G@2 H@2 I@2 J K L@3 B M@3 D N@4 O@2 G@4 H@2 I@2 J K G@2 H@2 I@2 J K L@3 B M@3 D N@4
  O@2 G@4 H@2 I@2 J K G@2 H@2 I@2 J K L@3 B M@3 D N@4 O@2 P@2 Q@2 ~
>`.pickRestart({
  A: "d2", B: "d2 c2", C: "a#2", D: "a#2 a2", E: "g2", F: "c3", G: "c2 ~ c2 ~", H: "e2 ~ e2 ~", I: "a2 ~ a2 ~",
  J: "f2 ~ a#2 ~", K: "c3 ~ c3 ~", L: "d2 ~ d2 ~", M: "a#2 ~ a#2 ~", N: "g2 ~ g2 ~", O: "c2", P: "a2", Q: "[c3@15 ~]/2",
})).s("gm_fretless_bass").gain(0.64)

// chords · drawbar organ · "ORGAN"
const drawbar_organ = note(`<
  A B C D E@2 F@2 G@2 H@2 I@2 J G@3 H@2 I@2 J G K@3 B L@3 D M@2 N@2 O F G@4 H@2 I@2 J G@3 H@2 I@2 J G K@3 B L@3 D M@2
  N@2 O F G@4 H@2 I@2 J G@3 H@2 I@2 J G K@3 B L@3 D M@2 N@2 O F P@2 Q@2 ~
>`.pickRestart({
  A: "[a3,d4,f4]", B: "[a3,d4,f4] [g3,c4,e4]", C: "[a#3,d4,f4]", D: "[a#3,d4,f4] [a3,c4,e4]", E: "[g3,b3,f4]",
  F: "[g3,c4,e4]", G: "~ [g3,c4,e4] ~ [g3,c4,e4]", H: "~ [g3,b3,e4] ~ [g3,b3,e4]", I: "~ [a3,c4,e4] ~ [a3,c4,e4]",
  J: "~ [a3,c4,f4] ~ [a#3,d4,f4]", K: "~ [a3,d4,f4] ~ [a3,d4,f4]", L: "~ [a#3,d4,f4] ~ [a#3,d4,f4]",
  M: "~ [g3,b3,d4] ~ [g3,b3,d4]", N: "~ [g3,b3,f4] ~ [g3,b3,f4]", O: "[g3,c4,e4]@3 ~", P: "[a3,c4,e4]",
  Q: "[[c4,e4]@27 ~@5, g3@15 ~]/2", // C
})).s("gm_drawbar_organ").gain(0.29)

// drums · kick
const kick = s("bd").struct(`<
  [x!2 ~ x!3 ~ x]!7
  [x ~@2 x!2 ~@2 x]
  [x!2 ~ x!3 ~ x]!31
  [x ~@2 x!2 ~@2 x]
  [x!2 ~ x!3 ~ x]!31
  [x ~@2 x!2 ~@2 x]
  [x!2 ~ x!3 ~ x]!32
  ~@3
>`).gain(0.48)

// drums · snare
const snare = s("sd").struct(`<
  [~ x ~ x]!7
  [~@4 x ~@5 x!3 ~ x ~]
  [~ x ~ x]!31
  [~ x!7]
  [~ x ~ x]!31
  [~@4 x ~@5 x!3 ~ x ~]
  [~ x ~ x]!32
  ~@3
>`).gain(0.56)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A ~ A ~@7 A ~ A@4 ~@27 A ~@6 A@2 ~ A ~@4 A ~ A ~@3 A ~@4 A ~@3 A ~@4 A ~@4 A ~ A ~@12 A ~@3
>`.pickRestart({
  A: "~@7 x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@8 A ~@15 B ~@15 B ~@15 B ~@15 A ~@15 B ~@18>".pickRestart({
  A: "x", B: "~ x ~@2",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct("<[x!4]!7 [~ x!5 ~ x] [x!8]!31 [~ x!7] [x!4]!31 [~ x!5 ~ x] [x!8]!32 ~@3>").gain(0.64)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!4]!7 [~ x!5 ~ x] [x!8]!31 [~ x!7] [x!4]!31 [~ x!5 ~ x] [x!8]!32 ~@3>")
  .gain(3.24)

stack(clavinet, bass, epiano2, flute, bass_2, drawbar_organ, kick, snare, hihat, open_hat, crash, tambourine, cabasa)

More by Bananarama