Strudelify
Nothing's Gonna Stop Us Now cover art

1987 · No Protection

Nothing's Gonna Stop Us Now

Starship

KeyF majorTempo105 bpm
0:00/0:00
// Nothing's Gonna Stop Us Now — Starship
// 105 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/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.

// other · overdriven guitar · "Overdrive"
const overdriven_guitar = note(`<
  ~ A@4 B@3 C@2 D E F G H I J K L M N K O M P Q R@2 S T R@2 U V W D E F G H I J K L M N K O M P Q R@2 S T R@2 U X Y Z@2
  AA@2 AB@2 AC AD AE@2 AF AG@3 AH@3 R@2 S T R@2 U AI R@2 S T R@3 AJ R@2 S T R@3 AK
>`.pickRestart({
  A: "[f4@9 ~ f4 ~ g4 ~ a4 c5@4 ~ a4@3 ~ g4 a4@4 ~ f4@11 ~ f4 ~ g4 ~ a4 d5@4 ~ c5@3 ~ a4@3 ~ g4@3 ~]/4",
  B: "[f4@9 ~ f4 ~ g4 ~ a4 c5@4 ~ a4@2 ~@2 g4 a4@4 ~ f4@7 ~@3 d4 ~ f4 ~ f4 ~ a4 bb4]/3",
  C: "[d5@3 ~ c5@3 ~ a4@4 g4 ~ bb4@4 a4 ~ a4 ~ g4 ~ g4@3 ~ f4 ~ bb4@2]/2", D: "~@2 a4 ~ a4 ~ g4 ~ g4@3 ~ c4 ~ f4@2",
  E: "~@2 g4 ~ g4 ~ g4@3 ~ f4 ~ f4 ~ f4@2", F: "~@2 g4 ~ g4 ~ g4@6 ~@2 bb4@2", G: "~@2 a4 ~ a4 ~ g4 ~ g4 ~ f4 ~@3 c5@2",
  H: "~@2 a4 ~ g4 ~ a4 ~ g4 ~ f4 ~ f4 ~ f4@2", I: "~@2 g4 ~ g4 ~ g4 ~@3 f4 ~ f4 ~ f4@2", J: "~@2 g4 ~ g4 ~ g4@7 ~@3",
  K: "~@2 f4!3 ~ f4 ~ f4 ~ f4@5 ~", L: "~@2 g4!3 a4!2 ~ a4@5 ~@3", M: "~@2 c5!3 ~ c5 ~ c5 ~ f4 ~ f4 ~ f4 ~",
  N: "f4 ~ f4 ~ f4 ~ f4 ~ f4 ~ e4@5 ~", O: "~@2 g4 ~ g4 ~ a4 ~ a4@2 ~ g4 f4@3 ~",
  P: "f4 ~ g4 ~ g4@3 ~ g4 f4 e4 f4 g4 f4 e4 f4", Q: "g4@3 ~ c4@3 ~ f4@3 ~ g4 ~ bb4@2",
  R: "~@2 a4 ~ a4 ~ g4 ~ g4 ~ f4@3 ~ bb4@2", S: "~@2 a4 ~ a4 ~ g4 ~ g4 ~ f4@3 ~ d4 ~",
  T: "c4@3 ~ c4@3 ~ f4@3 ~ g4 ~ bb4@2", U: "~@2 a4 ~ a4 ~ g4 ~ g4 ~ f4@3 ~ e4@2",
  V: "~@2 e4 ~ e4 ~ e4 ~ f4 ~ g4@3 ~ bb4@2", W: "~@2 a4 ~ a4 ~ g4 ~ g4@3 ~ f4 ~ bb4@2",
  X: "~@2 e4 ~ e4 ~ e4 ~ f4 ~ g4@5 ~", Y: "f4@11 ~@5",
  Z: "[f4 ~ f4 ~ f4 ~ e4@3 ~ f4@3 ~ d4@4 ~ c4 bb3@2 ~ f4 g4 ~ f4@5 ~]/2",
  AA: "[bb4 ~ bb4 ~ bb4@3 ~ bb4 ~ c5@3 ~ a4@4 ~ g4 f4@3 ~ g4 ~ a4@5 ~]/2",
  AB: "[f4 ~ f4 ~ f4 ~ e4@3 ~ f4@3 ~ d4@4 ~ c4 bb3 ~ bb3 ~ c4 ~ d4@3 ~ bb3 ~]/2",
  AC: "bb4 ~ bb4 ~ bb4 ~ bb4@3 ~ g4@3 ~ d4 ~", AD: "bb4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~ c5@5 ~",
  AE: "[c5@11 ~ f4 ~ f4@7 ~@3 g4 ~ f4@3 ~ bb4@2]/2", AF: "c5@4 ~@2 a4 bb4",
  AG: "[~@2 a4@4 g4@2 g4 ~ f4@3 ~ d4@10 c4 ~@3 g4 ~ f4@10 g4 ~ f4@3 ~ bb4@2]/3",
  AH: "[[f4,c5]@8 ~@4 f4 ~ f4@10 g4 ~ f4@3 ~@7 c4@3 ~ f4@3 ~ g4 ~ bb4@2, ~@30 e4@13 ~@5]/3", // F5
  AI: "~@2 bb4 ~ bb4 ~ bb4!3 ~ c5 ~ g4 ~ bb4@2", AJ: "~@2 bb4 ~ bb4 ~ bb4 ~ bb4 ~ c5 ~ g4 ~ bb4@2",
  AK: "~@2 bb4 ~ bb4 ~ bb4 ~ bb4 ~ c5 ~ g4 ~ bb4 ~",
})).s("gm_overdriven_guitar").gain(0.27).pan(0.9)

// other · overdriven guitar · "Overdrive"
const overdriven_guitar_2 = note(`<
  ~ A@4 B@8 C D@3 E F G E@2 H G I J@4 K@4 L@6 D@3 E F G E@2 H G I J@4 M@5 E N@2 O@2 N@2 P Q R@4 K@4 S@4 K@4 T@4 U@8 V@5
>`.pickRestart({
  A: "[c4@9 ~@6 f4@9 ~@6 d4@11 ~@6 g4@9 ~@8]/4",
  B: "[c4@9 ~@6 f4@9 ~@6 d4@11 ~@6 g4@9 ~@6 f4@10 ~@6 f4@10 ~@6 d4@10 ~@6 d4@10 ~@6 f4@2]/8", C: "~@7 a4",
  D: "[~@14 d4@7 ~@9 d4@13 ~@5]/3", E: "c4@11 ~@5", F: "f4@11 ~@5", G: "f4@5 ~@11", H: "f4 ~", I: "eb4 ~@3 eb4@3 ~@9",
  J: "[e4@3 ~@11 f4@7 ~@9 f4@7 ~@9 f4@7 ~@11]/4", K: "[g3@5 ~@9 f4@7 ~@9 f4@7 ~@9 f4@7 ~@9 c4@2]/4",
  L: "[~@14 f4@10 ~@6 f4@10 ~@6 d4@10 ~@6 d4@10 ~@6 f4@7 ~@9 a4@2]/6",
  M: "[g3@5 ~@9 f4@7 ~@9 f4@7 ~@9 f4@7 ~@9 c4@13 ~@5]/5", N: "[c4@4 ~@2 c4@3 ~ c4@3 ~ bb3@4 ~@14]/2",
  O: "[f4@5 ~@3 f4 ~ g4@3 ~ c4@4 ~@14]/2", P: "f4@4 ~@2 f4@3 ~@7", Q: "g4@4 ~@2 g4@3 ~@7",
  R: "[g4@3 ~@11 f4@7 ~@9 f4@7 ~@9 f4@7 ~@11]/4", S: "[~@14 f4@7 ~@9 f4@7 ~@9 f4@7 ~@11]/4",
  T: "[~@4 c4@3 ~ f4@3 ~@3 f4@7 ~@9 f4@7 ~@9 f4@7 ~@11]/4",
  U: "[g3@5 ~@9 f4@7 ~@9 f4@7 ~@9 f4@7 ~@9 g4@5 ~ c4@3 ~ f4 ~@5 f4@7 ~@9 f4@7 ~@9 f4@7 ~@11]/8",
  V: "[g3@5 ~@9 f4@7 ~@9 f4@7 ~@9 f4@7 ~@9 g4@5 ~ c4@3 ~ f4 ~@5 f4 ~]/5",
})).s("gm_overdriven_guitar").gain(0.27).pan(0.9)

// other · overdriven guitar · "Overdrive"
const overdriven_guitar_3 = note(`<
  ~ A B@3 A C@8 D@3 E F G ~ H I G J K@4 L@4 M@6 D@3 E F G ~ H I G J K@4 N@5 E O@2 P@2 Q@2 R S T@4 L@4 U@4 L@4 V@4 W@8
  X@5
>`.pickRestart({
  A: "a3@9 ~@7", B: "[~@14 bb3@11 ~@6 e4@9 ~@8]/3",
  C: "[~@14 bb3@11 ~@6 e4@9 ~@6 c4@10 ~@6 c4@10 ~@6 bb3@10 ~@6 c4@10 ~@6 c4@7 ~@9 f4@2]/8",
  D: "[~@14 bb3@7 ~@9 c4@12 ~@6]/3", E: "a3@11 ~@5", F: "c4@11 ~@5", G: "d4@5 ~@11", H: "a3@5 ~@3", I: "c4 ~",
  J: "bb3 ~@3 bb3@3 ~@9", K: "[c4@3 ~@11 c4@7 ~@7 c4@9 ~@9 d4@7 ~@11]/4",
  L: "[e3@5 ~@9 c4@7 ~@9 c4@7 ~@9 d4@7 ~@9 g3@2]/4",
  M: "[~@14 c4@10 ~@6 c4@10 ~@6 bb3@10 ~@6 c4@10 ~@6 c4@7 ~@9 f4@2]/6",
  N: "[e3@5 ~@9 c4@7 ~@9 c4@7 ~@9 d4@7 ~@9 g3@13 ~@5]/5", O: "[g3@4 ~@2 g3@3 ~@5 f3@4 ~@14]/2",
  P: "[d4@5 ~@3 d4 ~ e4@3 ~ c4@4 ~@14]/2", Q: "[g3@4 ~@2 g3@3 ~ a3@3 ~ f3@4 ~@14]/2", R: "d4@4 ~@2 d4@3 ~@7",
  S: "e4@4 ~@2 e4@3 ~@7", T: "[e4@3 ~@11 c4@7 ~@7 c4@9 ~@9 d4@7 ~@11]/4", U: "[~@14 c4@7 ~@7 c4@9 ~@9 d4@7 ~@11]/4",
  V: "[~@14 c4@7 ~@9 c4@7 ~@9 d4@7 ~@11]/4",
  W: "[e3@5 ~@9 c4@7 ~@9 c4@7 ~@9 d4@7 ~@9 e4@5 ~@11 c4@7 ~@9 c4@7 ~@9 d4@7 ~@11]/8",
  X: "[e3@5 ~@9 c4@7 ~@9 c4@7 ~@9 d4@7 ~@9 e4@5 ~@11 c4 ~]/5",
})).s("gm_overdriven_guitar").gain(0.27).pan(0.9)

// bass · acoustic bass · "AcousticBs"
const bass = note(`<
  ~ A B C D A B C D E F C G H I C D J B C D H B C K D J B C D J B C D E F C G H I C D J B C D H B C K D J B C D J B C L
  A M N O J M C P D@2 J B C D J B C D J B C D J B C Q R S C D J B C D R S C D J B C D
>`.pickRestart({
  A: "f2 ~ f2 ~@3 f2 ~ f2 ~ f2 ~ f2 ~ f2 ~", B: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  C: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~", D: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  E: "f2 ~ f2 ~ f2 ~ f2@3 ~ f2 ~ f2 ~ f2 ~", F: "d2 ~ d2 ~ d2 ~ d2@3 ~ d2 ~ d2 ~ d2 ~",
  G: "c2 ~ c2 ~@3 c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", H: "f2@3 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~",
  I: "d2 ~ d2 ~ d2 ~ d2 ~@3 d2 ~ d2 ~ d2 ~", J: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~",
  K: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~", L: "c2 ~ c2 ~ c2@3 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  M: "f2 ~ f2 ~ f2@3 ~ f2 ~ f2 ~ f2 ~ f2 ~", N: "bb2 ~ bb2 ~@3 bb2 ~ bb2 ~ bb2 ~@3 bb2 ~",
  O: "g2 ~ g2 ~@3 g2 ~ g2 ~ g2 ~ c3 ~ c3 ~", P: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~", Q: "c2!8", R: "f2!8",
  S: "d2!8",
})).s("gm_acoustic_bass").gain(0.31)

// chords · string ensemble 2 · "Slow Str."
const string_ensemble_2 = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D A B C E D A B C D A B C D A B C D A B C D A B C D A B C E D A B C D A B C D
  A F C G A H C I J D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D
>`.pickRestart({
  A: "[c4,f4,a4]", B: "[d4,f4,a4,c5]", C: "[bb3,d4,f4]", D: "[c4,e4,g4]", E: "[bb3,eb4,g4]",
  F: "[c4,e4,g4]@4 [c4,f4,a4] [c4,f4,a4]@3", G: "[g3,bb3,d4,f4]@5 [c4,e4,g4]@3",
  H: "[c4,f4,a4]@4 [c4,e4,g4] [c4,f4,a4]@3", I: "[g3,bb3,d4,f4]", J: "[c4,e4,g4,bb4]",
})).s("gm_string_ensemble_2").gain(0.26).pan(0.1)

// drums · kick
const kick = s("bd").struct("x!2").gain(0.2)

// drums · snare
const snare = s("sd").struct("<A B@11 A B@3 A B@7 A B@4 A B@3 A B@7 A B@7 A B@8 A B@8 A B@8 A B@7 A B@16>".pickRestart({
  A: "~@2 x ~@3 x!2", B: "~ x ~ x",
})).gain(0.2)

// drums · hihat
const hihat = s("hh").struct("x!8").gain(0.2)

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

stack(overdriven_guitar, overdriven_guitar_2, overdriven_guitar_3, bass, string_ensemble_2, kick, snare, hihat, crash)

More by Starship