Strudelify

Never Give Up on the Good Times

Spice Girls

KeyF majorTempo117 bpm
0:00/0:00
// Never Give Up on the Good Times — Spice Girls
// 117 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 124 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.

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@4 A B A B A B A B C D E F C D E F C D E F G H I J A B A B A B A B C D E F C D E F C D E F G H I J A B A B A B A B
  K@2 L M@4 N O P Q N O P Q R S T U B V B V B V B V B V B V B V B V ~@4 B V B V W X W X B V B V B V B V B V B V B V B V
  ~
>`.pickRestart({
  A: "f1!4 ~ ab1 ~ f1 bb1@3 ~ ab1@3 ~", B: "g1!4 ~ bb1 ~ g1 c2@3 ~ bb1@3 ~", C: "f1@2 ~@4 g1 ab1 bb1@4 ab1@4",
  D: "g1@2 ~@4 ab1 bb1 c2@3 ~ g1@4", E: "f1@3 ~@3 g1 ab1 bb1@4 ab1@4", F: "g1@2 ~@4 g1 ab1 c2 ~ g2@2 bb1@2 f2@2",
  G: "ab1@2 ~@4 ab1 g1 ab1@3 ~ ab1@3 ~", H: "bb1@2 ~@4 bb1 ab1 f1@4 bb1@4", I: "eb2@3 ~@3 eb2@2 f2@2 ~@4 f2 ~",
  J: "gb2@2 ~@5 gb2!2 ~ gb2 ~ ab2@3 ~", K: "[ab1@5 ~ bb1@7 ~ eb2@15 ~@3]/2", L: "ab1@5 ~ bb1@8 ~@2",
  M: "d1 d2 d1 d2 d1 d2 d1 d2", N: "g1@2 ~@4 a1 bb1 c2@4 bb1@4", O: "a1@2 ~@4 bb1 c2 d2@3 ~ a1@4",
  P: "g1@3 ~@3 a1 bb1 c2@4 bb1@4", Q: "a1@2 ~@4 a1 bb1 d2 ~ a2@2 c2@2 g2@2", R: "bb1@2 ~@4 bb1 a1 bb1@3 ~ bb1@3 ~",
  S: "c2@2 ~@4 c2 bb1 g1@4 c2@4", T: "f2@3 ~@3 f2@2 g2@2 ~@4 g2 ~", U: "ab2@2 ~@5 ab2!2 ~ ab2 ~ bb2@3 ~",
  V: "a1!4 ~ c2 ~ a1 d2@3 ~ c2@3 ~", W: "g1!4 ~ f2 ~ g1 c2@3 ~ bb1@3 ~", X: "a1!4 ~ a2 ~ c2 f2@3 ~ e2@3 ~",
})).s("gm_electric_bass_finger").gain(0.41)

// other · electric guitar muted · "Noise"
const electric_guitar_muted = note("<~@60 A B A C D C D ~@57>".pickRestart({
  A: "~@2 ab2 ~ bb2 ~@4 ab2 ~ bb2 ~ ab2 bb2 ab2", B: "~@2 ab2 ~ bb2 ~@4 ab2 ~ bb2@2 ab2 bb2 ab2",
  C: "~@4 a3 g3 ~ g3 ~@4 a3 g3 ~ g3", D: "~@4 a3 g3 f3 g3 ~@4 a3 ~@2 g3",
})).s("gm_electric_guitar_muted").gain(0.3)

// other · electric guitar muted · "Noise" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@62
  [~@13 bb2 ~@2]
  [~@6 f3 ~@7 f3 ~]
  [~@14 f3 ~]
  [~@6 f3 ~@7 f3 ~]
  [~@14 f3 ~]
  ~@57
>`).s("gm_electric_guitar_muted").gain(0.15)

// other · lead 1 square · "Polysynth / Clavinet Wawa" · F
const lead_1_square = note(`<
  [a5@2 ~ a5 f5 ~ d5 f5 a5@2 ~ a5 f5 ~ d5 f5]
  [a5@2 ~ a5 f5 ~ d5 f5 a5 ~ f5 ~ [f5,a5]@4]
  [[f5,a5]@2 ~ a5 d5 ~ d5 f5 a5@2 ~ a5 d5 ~ d5 f5]
  [a5@3 a5 d5 ~ d5 f5 a5 ~ f5 ~ [f5,a5]@4]
  ~@120
>`).s("gm_lead_1_square").gain(0.25)

// chords · pad poly · "Polysynth / Clavinet Wawa"
const pad_poly = note("<~@4 A B A B A B A C ~@15 D@2 ~@22 D@2 ~@71>".pickRestart({
  A: "~ [ab3,eb4] ~ [f3,ab3,eb4] ~ [f3,ab3,eb4] ~ [f3,ab3,eb4] [f3,bb3,d4]@3 ~ [f3,ab3,eb4]@3 ~, f3 ~@7", // Ab5 Fm7 Bb Fm7
  B: "[g3,bb3,d4]!2 ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] [g3,c4,eb4]@3 ~ [g3,bb3,d4]@2 ~@2", // Gm Cm Gm
  C: "[g3,bb3,d4]!2 ~ [g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,bb3,d4] [g3,c4,eb4]@3 ~@5", D: "[bb4@7 f5@7 eb6@12 ~@6]/2",
})).s("gm_pad_poly").gain(0.2)

// chords · epiano1 · "Polysynth / Clavinet Wawa"
const epiano1 = note(`<
  ~@11 A B C D C D C D C D C D C E F G H D C D C D C D C D C D C D C D C D C D C E F G H D C D C D C D C I@2 J ~@4 K L K
  L K L K L M N O P K L K L K L K L K L K L K L K L ~@12 K L K L K L K L K L K L K L K L ~
>`.pickRestart({
  A: "~@12 [bb3,d4,f4]@3 ~", B: "[ab3,c4,eb4]@3 ~@5 [ab3,c4,eb4]@3 ~ [bb3,d4,f4]@3 ~",
  C: "[g3,bb3,d4]@3 ~@5 [g3,bb3,eb4]@3 ~ [g3,bb3,d4]@3 ~", D: "[eb3,ab3,c4]@4 ~@4 [ab3,c4,eb4]@3 ~ [bb3,d4,f4]@3 ~",
  E: "[bb3,db4,gb4]@3 ~@5 [ab3,db4,f4]@2 ~@2 [bb3,db4,gb4]@2 ~@2", // Gb Db Gb
  F: "[ab3,db4,f4]@3 ~@5 [gb3,bb3,db4]@2 ~@2 [ab3,c4,eb4]@2 ~@2", // Db Gb Ab
  G: "[bb3,db4,gb4]@3 ~@3 [bb3,db4,gb4] ~ [ab3,db4,f4]@3 ~@3 [ab3,db4,f4] ~", // Gb Db
  H: "[bb3,db4,gb4]@4 ~@3 [bb3,db4]!2 ~ [db4,gb4]@2 [c4,eb4,ab4] ~ [c4,eb4,ab4]@2, ~@7 gb4@2 ~ bb3 ~@5", // Gb Bbm Gb5 Ab
  I: "[[bb3,db4,gb4]@4 ~@2 [ab3,c4,eb4]@6 ~@2 [f3,bb3,d4]@13 ~@5]/2", J: "[bb3,db4,gb4]@2 ~ [ab3,c4,eb4]@3 ~@2",
  K: "[f3,bb3,d4]@4 ~@4 [bb3,d4,f4]@3 ~ [c4,e4,g4]@3 ~", L: "[a3,c4,e4]@3 ~@5 [a3,c4,f4]@3 ~ [a3,c4,e4]@3 ~",
  M: "[c4,eb4,ab4]@3 ~@5 [bb3,eb4,g4]@2 ~@2 [c4,eb4,ab4]@2 ~@2", // Ab Eb Ab
  N: "[bb3,eb4,g4]@3 ~@5 [ab3,c4,eb4]@2 ~@2 [bb3,d4,f4]@2 ~@2", // Eb Ab Bb
  O: "[c4,eb4,ab4]@3 ~@3 [c4,eb4,ab4] ~ [bb3,eb4,g4]@3 ~@3 [bb3,eb4,g4] ~", // Ab Eb
  P: "[c4,eb4,ab4]@4 ~@3 [c4,eb4]!2 ~ [eb4,ab4]@2 [d4,f4,bb4] ~ [d4,f4,bb4]@2, ~@7 ab4@2 ~ c4 ~@5", // Ab Cm Ab5 Bb
})).s("gm_epiano1").gain(0.56)

// chords · drawbar organ · "Organ"
const drawbar_organ = note(`<
  ~@4 A B A B A B A B ~@16 A B A B A B A B ~@16 A B A B A B A B ~@19 C D C D C D C D C D C D C D C D ~@6 E F E F C D C D
  C D C D C D C D C D C D C D ~
>`.pickRestart({
  A: "[f4,ab4,eb5]!4 ~ [f4,ab4,eb5] ~ [f4,eb5] [f4,bb4,d5]@3 ~ [f4,ab4,eb5]@3 ~", // Fm7 F7 Bb Fm7
  B: "[g4,d5] [g4,bb4,d5]!3 ~ [g4,bb4,d5] ~ [g4,d5] [g4,c5,eb5]@3 ~ [g4,bb4,d5]@3 ~", // G5 Gm G5 Cm Gm
  C: "[g4,bb4,f5]!4 ~ [g4,bb4,f5] ~ [g4,f5] [g4,c5,e5]@3 ~ [g4,bb4,f5]@3 ~", // Gm7 G7 C Gm7
  D: "[a4,e5] [a4,c5,e5]!3 ~ [a4,c5,e5] ~ [a4,e5] [a4,d5,f5]@3 ~ [a4,c5,e5]@3 ~", E: "[f4,bb4,d5] ~ [bb4,d5,f5] ~",
  F: "[a4,c5,e5]@3 ~@5 [a4,c5,f5]@3 ~ [a4,c5,e5]@3 ~", // Am F Am
})).s("gm_drawbar_organ").gain(0.31)

// other · electric guitar clean · "Clean Guitar 1"
const electric_guitar_clean = note(`<
  ~@3 A ~@3 A ~ A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@7 A ~ B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@10 C ~ D ~ C ~ C ~ C ~ C
  ~ C ~ C ~ C ~@3 C ~ C ~ C ~@9 C ~ C ~ C ~ C ~ C ~ C ~@3 C ~ C ~ C ~@3
>`.pickRestart({
  A: "~@7 [f4,f5]", B: "~@10 [f4,f5]@3 ~@3", C: "~@7 [g4,g5]", D: "~@10 [g4,g5]@3 ~@3",
})).s("gm_electric_guitar_clean").gain(0.5).pan(0)

// chords · electric guitar clean · "Clean Guitar 2"
const electric_guitar_clean_2 = note(`<
  ~@29 A ~@3 A ~@7 A ~ B ~ A ~@7 A ~@3 A ~@10 C ~ D ~ C ~@7 C ~@3 C ~@3 C ~@3 C ~@15 C ~@3 C ~@3 C ~@3 C ~@3
>`.pickRestart({
  A: "~@8 f4 [bb4,d5] ~ [bb4,d5] ~@4", B: "~@12 [f4,f5]@3 ~", C: "~@8 g4 [c5,e5] ~ [c5,e5] ~@4", D: "~@12 [g4,g5]@3 ~",
})).s("gm_electric_guitar_clean").gain(0.35).pan(1)

// other · string ensemble 2 · "Slow Strings"
const string_ensemble_2 = note("<~@41 A B C D ~@2 E F G ~@10 H@2 I J@4 ~ K L M N ~@2 O P Q ~@47>".pickRestart({
  A: "~@2 eb4 d4", B: "c4", C: "d4@4 f4@2 eb4@6 d4@3 ~", D: "c4@3 ~@5", E: "~@3 eb4", F: "gb4@3 f4@3 eb4@2",
  G: "db4@3 b3@3 bb3@2", H: "[[bb3,db4,gb4]@3 [ab3,c4,eb4]@4 [f3,bb3,d4]@9]/2", I: "[bb3,db4,gb4]@3 [ab3,c4,eb4]@3 ~@2",
  J: "[d2,d3]/4", K: "~@2 f4 e4", L: "d4", M: "e4@4 g4@2 f4@6 e4@3 ~", N: "d4@3 ~@5", O: "~@3 f5", P: "ab5@3 g5@3 f5@2",
  Q: "eb5@3 db5@3 c5@2",
})).s("gm_string_ensemble_2").gain(0.35)

// other · flute
const flute = note("<~@59 A B@2 C D E F G H ~@33 I@3 ~@20>".pickRestart({
  A: "~@12 bb4 c5 eb5 g5", B: "[bb5@10 ab5 gb5@2 ab5 ~ g5@2 gb5 g5@4 f5 [eb5,e5] d5 f5@2 eb5 ~ bb4@2 ~, ~@7 bb5 ~@8]/2",
  C: "~@6 bb4!2 ab4 ~ bb4 ab4 ~ bb4@2 ~", D: "d6@6 c6 a5 c6 d6 ~@4 a5 ~", E: "c6 ~ b5 ~ a5 ~@2 b5@3 a5@4 ~@2",
  F: "a5 d6 ~ c6 ~ a5 ~ ab5 ~ g5 f5 d5 g5@2 f5 g5", G: "a5@2 d6 a5@2 d6 a5@2 d6 a5@2 d6 a5 g5 f5 gb5",
  H: "g5@2 ~ b4 a4 ~@11", I: "[~@15 d6@6 c6 ~ a5@2 ~@2 f5 ~ e5 ~ d5@3 ~@14, ~@15 c6 ~@32]/3",
})).s("gm_flute").gain(0.41).pan(0.6)

// other · flute · soft notes · Fmaj7 Csus2
const flute_soft = note("<~@64 [~@6 g5 ~@9] ~@2 [~@2 [e5,f5] [c5,d5] g4 ~@11] ~@34 [~@9 g5 ~@6] ~@21>")
  .s("gm_flute").gain(0.2).pan(0.6)

// other · blown bottle · "Flute 2"
const blown_bottle = note("<~@63 A B C D E ~@27 F G H I J K L M L N O P ~@17>".pickRestart({
  A: "d6@6 c6 a5 c6 d6 ~@4 a5 ~", B: "c6 ~ b5 ~ a5 ~ g5 b5@3 a5@4 ~@2",
  C: "a5 d6 ~ c6 ~ a5 ~ ab5 ~ g5 f5 d5 g5@2 f5 g5", D: "a5@2 d6 a5@2 d6 a5@2 d6 a5@2 d6 a5 g5 f5 gb5",
  E: "g5@2 [e5,f5] [b4,c5,d5] [g4,a4] ~@11", F: "d4 ~ d4 ~ d4 ~ d4 ~ c4 d4 ~ d4 ~ d4 ~ d4",
  G: "~ d4 ~ d4 ~ d4 ~ d4 [e4,f4] g4 ~ f4 ~ d4 ~ d4", H: "~ d4 ~ d4 ~@2 d4!2 c4 d4 ~ d4 ~ d4 ~ d4",
  I: "d4 ~@2 d4 ~ d4 ~ d4 f4 g4 ~ f4 ~ d4 ~ d4", J: "d4!2 ~ d4 ~ d4 ~ d4 c4 d4 ~ d4 ~ d4 ~ d4",
  K: "~ d4 ~ d4!2 ~ d4 ~ f4 g4 ~ f4 ~ d4 ~ d4", L: "~ d4 ~ d4 ~ d4 ~ d4 c4 d4 ~ d4 ~ d4 ~ d4",
  M: "~ d4 ~ d4!2 ~ d4 ~ g4 f4 ~ f4 ~ d4 ~ d4", N: "~ d4 ~ d4 ~ d4 ~ d4 a4 g4 ~ g4 ~ d4 ~@2",
  O: "d4 ~ d4!2 ~ d4 ~ d4!2 c4 ~ d4 ~ d4 ~ d4", P: "~ d4 ~ d4 ~ d4 ~ d4 f4 g4 ~ f4 ~ d4 ~@2",
})).s("gm_blown_bottle").gain(0.36).pan(0.4)

// chords · electric guitar clean · "Guitar WaWa"
const electric_guitar_clean_3 = note(`<
  ~@67 A B A B A B A B C D E F G H I J I J K L G H I J I J K L ~@2 M N M N M N M N M N G H I J I J K L G H I J I J K L ~
>`.pickRestart({
  A: "[bb3,d4,f4]@2 ~ [bb3,d4,f4] ~@4 [f4,a4]@3 [a4,c5] ~@4, ~@8 c5 ~@2 g4@3 ~@2", // Bb F Am
  B: "[e4,a4]@2 ~ [e4,a4] ~@4 [e4,a4,c5] ~ [e4,a4,c5] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~", // A5 Am Gm
  C: "[bb3,eb4] ~ bb3 [bb3,eb4]!2 ~@2 bb3 [bb3,eb4]!2 ~@2 [bb3,eb4]@2 [bb3,eb4]!2", // Eb5
  D: "[bb3,eb4] ~ bb3!2 [bb3,eb4] ~ bb3 [bb3,eb4]!4 ~ [bb3,eb4] ~ [bb3,eb4]!2", // Eb5
  E: "[bb3,eb4] ~ bb3 [bb3,eb4]!2 ~ [bb3,eb4] ~ [bb3,eb4]!5 ~ [bb3,eb4]!2", // Eb5
  F: "[bb3,eb4] ~ [bb3,eb4] bb3 eb4 [bb3,eb4] ~ [bb3,eb4]!4 ~ [bb3,eb4] ~ [bb3,eb4] ~", // Eb5
  G: "[bb3,d4,f4]@2 ~ [bb3,d4,f4] ~@4 [f4,a4]@3 [a4,c5] ~@2 [bb3,eb4]!2, ~@8 c5 ~@2 g4@3 ~@2", // Bb F Am Eb5
  H: "[e4,a4]@2 ~ [e4,a4] ~@2 bb3 [bb3,eb4] [e4,a4,c5] ~ [e4,a4,c5] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~", // A5 Eb5 Am Gm
  I: "[bb3,d4,f4]@2 ~ [bb3,d4,f4] ~@2 bb3 [bb3,eb4] [f4,a4]@3 [a4,c5] ~@2 [bb3,eb4]!2, ~@8 c5 ~@2 g4@3 ~@2", // Bb Eb5 F Am Eb5
  J: "[e4,a4]@2 ~ [e4,a4] ~@2 [bb3,eb4]!2 [e4,a4,c5] ~ [e4,a4,c5] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~", // A5 Eb5 Am Gm
  K: "[bb3,d4,f4]@2 ~ [bb3,d4,f4] ~@2 [bb3,eb4]!2 [f4,a4]@3 [a4,c5] ~@2 [bb3,eb4]!2, ~@8 c5 ~@2 g4@3 ~@2", // Bb Eb5 F Am Eb5
  L: "[e4,a4]@2 ~ [e4,a4] ~@3 bb3 [e4,a4,c5] ~ [e4,a4,c5] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~", // A5 Am Gm
  M: "[f4,bb4,d5] ~ [bb4,d5,f5] ~", N: "[a4,c5,e5]@3 ~@5 [a4,c5,f5]@3 ~ [a4,c5,e5]@3 ~",
})).s("gm_electric_guitar_clean").gain(0.29)

// chords · brass section · "Brass"
const brass_section = note("<~@79 A ~ B ~ C@2 B D A ~ B ~ C@2 B D ~@12 C@2 B D C@2 B D C@2 B D C@2 B D ~>".pickRestart({
  A: "[f5,d6]!2 ~ [f5,d6] ~ [f5,d6] ~@6 [c5,a5]@2 ~@2", B: "~@3 [d4,d5]",
  C: "[[f5,d6]!4 ~ [f5,d6] ~ [f5,d6] ~@4 [c5,a5]@20]/2", D: "~@6 [c5,a5] [e5,c6] [f5,d6]!2 ~@2 [f5,d6]@3 ~",
})).s("gm_brass_section").gain(0.59)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@7 B A@3 B A@3 B A@3 B A@3 C A@3 C A@3 C A@3 C A@3 B A@3 B A@3 C A@3 C A@3 C A@2 C A@2 C A@4 B A@3 B A@3 C A@3 C
  A@3 C A@3 C A@3 C A@3 B A@3 B A@3 C A@3 C A@3 C A@3 C A@3 C ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~@2 x ~@3", C: "~@4 x ~@2 x ~ x ~@2 x ~@3",
})).gain(0.46)

// drums · clap
const clap = s("cp").struct("<~@12 [~ x ~ x]!111 ~>").gain(0.41)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A B C B D ~ D ~ E B@3 E B@3 E B@3 E B@3 E B@3 E B@3 E B@3 E B@3 E B@3 E B@3 E B@3 E B@3 E B@10 E B@3 E B@3 E B@3 E B@3
  E B@3 E B@3 E B@3 E B@3 E B@3 E B@3 E B@3 E B@3 E B@3 E B@3 ~
>`.pickRestart({
  A: "x ~@3 x ~@3 x ~@2 x!3 ~@2", B: "x!4", C: "x ~@3 x ~@3 x ~@2 x!2 ~@3", D: "x", E: "x ~@3 x ~@3 x ~@3 x!2 ~@2",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct(`<
  A B C A ~@4 D B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@2 B D@2 B D@2 B D B D@3 B
  D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@3 B D@2 ~
>`.pickRestart({
  A: "~ x ~@3 x ~ x", B: "~@2 x ~@3 x ~@3 x ~@3 x!2", C: "~ x ~ x ~@3 x", D: "~ x ~ x ~ x ~ x",
})).gain(0.46)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct(`<
  A ~ B C ~@6 D@2 ~@2 D@2 ~@2 D@2 ~@2 D@2 ~@2 D@2 ~@2 D@2 ~@2 D@2 ~@2 D@2 ~@2 D@2 ~@2 D@2 ~@2 D@2 ~@2 D@2 ~@2 D@2 ~ D@2
// … 60 more lines

More by Spice Girls