Strudelify

Things Will Never Be the Same

Roxette

KeyA minorTempo98 bpm
0:00/0:00
// Things Will Never Be the Same — Roxette
// 98 bpm, 4/4, key A 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 110 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(98/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 · acoustic guitar nylon
const acoustic_guitar_nylon = note("<A B@2 C D E F G ~@19 H@2 I J ~@41 K L M N O P ~@24 Q R S T U V W@2>".pickRestart({
  A: "~@14 a3 b3", B: "[c4@4 e4@2 b3@6 c4@2 a3@14 ~@2 a3 b3]/2", C: "c4@3 ~ e4@2 b3@6 d4@4", D: "c4 b3 a3@12 ~@2",
  E: "c4@2 e4 d4@3 g4@2", F: "f4 e4 d4@12 ~@2", G: "c4@2 e4 b3@5", H: "[~@8 b3 c4 b3 a3 g3@11 ~@9]/2",
  I: "~@6 a3 ~ f#3@3 g3@3 a3@2, ~@7 g3@2 ~@7", J: "d4@3 ~@13", K: "a4@2 a4 g4 a4@12", L: "~@12 a4 c5 a4 g4",
  M: "e4 g4 e4 d4 c4@10 d4 c4", N: "e4@3 d4@3 c4@6 a3@2 e4@2", O: "d4@4 ~@2 d4 c4 b3@3 c4@3 d4@2", P: "g4@2 a4 g4",
  Q: "~@9 d5 b4@4 a4@2, ~@4 e5 ~@3", R: "g4@3 ~ a4@2 e4@8 a4 g4", S: "b4@3 a4@3 g4@2 e4@7 ~",
  T: "~ g4@2 d5@3 g4@2 f#4@2 g4@2 d5@4, e4@15 ~", U: "~ g4@2 d5@3 g4@2 f#4@2 g4@2 d5@3 ~, e4@15 ~",
  V: "~ g4@2 d5@3 g4@2 f#4@2 g4@2 d5@2 ~@2, e4@7 ~", W: "[~ g4@2 d5@3 g4@2 f#4@2 g4@2 ~ d5@13 ~@6, e4@13 ~@3]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.64)

// other · overdriven guitar
const overdriven_guitar = note("<~@9 A@2 B C D@2 E@2 ~@61 F ~ G H I J K@2 ~@24>".pickRestart({
  A: "[[a3,c4,e4]@15 ~]/2", B: "[g3,c4,e4]@15 ~", C: "[a3,c4,e4]@7 ~", D: "[[g3,b3,d4]@29 ~@3]/2",
  E: "[[a3,d4,f#4]@3 ~]/2", F: "a4@2 a4 ~ a4@3 a4@3 a4@2 a4@4", G: "~@4 e5@2 g5@2 e5@2 d5@2 c5@2 d5 ~",
  H: "d5@4 c5 ~ c5@6 c5@2 b4 a4", I: "b4@6 ~@2 b4@3 c5@3 d5@2", J: "e5@2 d5 b4@3 g5@2", K: "[a5@25 ~@7]/2",
})).s("gm_overdriven_guitar").gain(0.64)

// chords · pad warm
const pad_warm = note(`<
  A B C@2 D E F G@2 H@2 I J K@2 L@2 M@2 N O K@2 M@2 N P K@2 Q@2 R S T U R V T V R W X@2 R W Y Z AA@2 AB AC AD@2 L@2 A S
  T I A V T V R AE X@2 R W AF AG@2 AA@2 AH R AI@2 AA@2 U A AD@2 L@2 R W X@2 R W AF Z R AJ X@2 R W Y Z AK@8
>`.pickRestart({
  A: "[a3,c4,e4]@15 ~", B: "[g3,c4,e4]@7 ~ [g3,b3,d4]@6 ~@2", C: "[[f3,a3,c4]@3 [g3,b3,d4]]/2", D: "[c4,e4]@7 ~, a3",
  E: "[c4,e4] [g3,b3,d4], g3@3 ~@5", F: "[d4,f4], a3@7 ~", G: "[[f3,a3,c4] [g3,b3,d4]@3]/2", H: "[a3,c4,e4]/2",
  I: "[g3,c4,e4]", J: "[a3,c4,e4]", K: "[g3,b3,d4]/2", L: "[[a3,d4,f#4]@15 ~]/2", M: "[[a3,c4,e4]@31 ~]/2",
  N: "[g3,c4,e4]@7 ~ [a3,c4,e4]@6 ~@2", O: "[a3,c4]@3 ~ [c4,e4]@4, f3@4 g3@3 ~", P: "[f3,a3,c4]@7 ~ [g3,c4,e4]@6 ~@2",
  Q: "[[a3,d4,f#4]@31 ~]/2", R: "[a3,c4,e4]@7 ~", S: "[g3,b3,d4]@15 ~", T: "[f3,a3,c4]@15 ~", U: "[g3,c4,e4]@15 ~",
  V: "[g3,b3,d4]@7 ~", W: "[g3,c4,e4]@3 ~ [g3,b3,d4]@3 ~", X: "[[f3,a3,c4]@11 ~ [g3,b3,d4]@3 ~]/2",
  Y: "[a3,d4,f4]@13 ~@3", Z: "[f3,a3,c4]@3 ~ [g3,b3,d4]@3 ~", AA: "[[a3,c4,e4]@15 ~]/2",
  AB: "[g3,c4,e4]@3 ~ [a3,c4,e4]@3 ~", AC: "[f3,a3,c4]@7 ~ [g3,c4,e4]@7 ~", AD: "[[g3,b3,d4]@31 ~]/2",
  AE: "[g3,c4,e4]@6 ~@2 [g3,b3,d4]@7 ~", AF: "[a3,d4,f4]@7 ~", AG: "[[f3,a3,c4]@3 ~ [g3,b3,d4]@11 ~]/2",
  AH: "[g3,c4,e4]@7 ~", AI: "[[g3,b3,d4]@15 ~]/2", AJ: "[g3,c4,e4]@6 ~@2 [g3,b3,d4]@5 ~@3", AK: "[[e3,g3,b3]@63 ~]/8",
})).s("gm_pad_warm").gain(0.17)

// chords · pad sweep · G
const pad_sweep = note("<~@8 [[d4,g4,b4]@15 ~] ~@101>").s("gm_pad_sweep").gain(0.43)

// chords · piano
const piano = note("<~@8 A@3 ~@12 B@3 ~@4 C@3 ~@5 D@3 ~@10 E@6 ~@14 F@3 ~@36>".pickRestart({
  A: "[~@6 [g4,b4,d5]!7 [g4,b4,d5]@32 ~@3]/3", B: "[~@5 a4@16 ~@3, ~@4 e5@5 e5@32 ~@7, ~@7 d5@32 ~@9]/3",
  C: "[~@4 a4@3 [a4,e5]@2 a4 a4@2 a4@2 [a4,d5]@32 ~@2, ~@4 d5@5 e5@3 e5@32 ~@4, ~@5 d5@2 ~@17]/3", // A5 D5
  D: "[~ [a4,a5]@2, ~ [e4,e5]@4 ~, ~@3 [g4,g5]@8 ~]/3", // A E G
  E: "[~@4 a4@3 [a4,e5]@2 a4 a4@2 a4@2 [a4,d5]@6 a4@3 [a4,e5]@2 a4 [a4,d5]@10 a4@3 [a4,e5]@2 a4 a4@2 a4@2 [a4,d5]@6 a4@3 [a4,e5]@2 a4 a4@2 a4@2 [a4,d5]@32 ~@2, ~@4 d5@5 e5@3 e5@11 ~@2 e5@14 ~@2 e5@3 e5@11 ~@2 e5@3 e5@32 ~@4, ~@5 d5@2 ~@3 d5@3 ~@5 d5@3 d5@2 ~@3 d5@3 d5@2 ~@17]/6", // A5 D5 A5 D5 A5 D5 A5 D5
  F: "[~@6 [g4,b4,d5]!6 [g4,b4,d5]@32 ~@4]/3", // G
})).s("gm_piano").gain(0.37)

// chords · piano · G Am
const piano_2 = note("<~@62 [~@2 [g4,b4] g5, ~@6 d5 ~] [[a4,c5,e5,a5]@11 ~@5] ~@46>").s("gm_piano").gain(0.47)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@9 A B C D E@2 F@2 ~@22 G H I@2 J K L M ~@16 N H I@2 G O L P@2 Q@2 R S T@2 U@2 V S W@2 X@2 N Y I@2 N H L M N H I@2 Z
  AA AB AC AD@2 ~@6
>`.pickRestart({
  A: "a4@2 e5 d5@3 c5@2", B: "b4@3 c5@3 a4@2", C: "g4@2 e5 d5@3 c5@2", D: "b4@3 c5@3 e5@2", E: "[[g4,d5]@7 e5]/2",
  F: "[[a4,d5]@7 ~]/2", G: "[a4,c5,e5]", H: "[g4,c5,e5] [g4,b4,d5]", I: "[[f4,a4,c5]@3 [g4,b4,d5]]/2",
  J: "[c5,e5]@7 ~, a4", K: "[g4,c5,e5] [g4,b4], ~@4 d5@3 ~", L: "[a4,d5,f5]", M: "[f4,a4,c5] [g4,b4,d5]",
  N: "[a4,c5,e5]@15 ~", O: "[g4,c5,e5]@4 [b4,d5]@3 ~, ~ g4", P: "[[f4,a4,c5] [g4,b4,d5]@3]/2", Q: "[[a4,c5,e5]@15 ~]/2",
  R: "[g4,c5,e5]@7 ~", S: "[c5,e5], a4@7 ~", T: "[[b4,d5], g4@15 ~]/2", U: "[[a4,c5,e5]@31 ~]/2", V: "[g4,c5,e5]@15 ~",
  W: "[[b4,d5]@31 ~, g4 ~@3]/2", X: "[[a4,d5,f#5]@7 ~, b4 ~@31]/2", Y: "[c5,e5] [b4,d5], g4@3 ~ g4@3 ~",
  Z: "[a4,e5], c5@7 ~", AA: "[c5,e5]@4 [b4,d5]@3 ~, g4@3 ~ g4@4", AB: "[d5,f5], a4@7 ~",
  AC: "[f4,a4]@4 [g4,b4,d5]@3 ~, c5@3 ~@5", AD: "[[e4,g4,b4]@3 ~]/2",
})).s("gm_string_ensemble_1").gain(0.57)

// other · synth brass 1
const synth_brass_1 = note("<~@72 A B C D E ~ A B F D G ~ H I ~@24>".pickRestart({
  A: "a4@2 e5 d5@3 c5@2", B: "b4@3 c5@3 a4@2", C: "g4@3 ~ e5@2 d5@6 c5@4", D: "b4@3 c5@3 e5@2", E: "[a4,d5]",
  F: "g4@2 e5 d5@3 c5@2", G: "d5@7 ~", H: "~@8 [e4,e5] g5 [a4,a5]@4 [e4,e5] [g4,g5], ~@9 g4@2 ~@5",
  I: "[a4,a5]@4 [e4,e5] ~ [a4,a5]@2 ~@8, ~@5 [g4,g5]@2 ~@9", // A E A G
})).s("gm_synth_brass_1").gain(0.57)

// bass · acoustic bass
const bass = note(`<
  ~@9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z P AA AB AC AD AE AF AG AD AH AI AJ AK AD AL AM AN AA AO AP AQ
  X Y AR AD AA AS AT AD AU AV AW AX AY AP AZ BA BB BC BD BE BF BG BH BI BD BE BF BJ BK BL AD AY BM AG AD BN AP AG BO BP
  BM BQ BR BS AP BT BU BV ~@6
>`.pickRestart({
  A: "a2@2 ~@4 a2 ~@2 a2!2 ~ a2@2 ~@2", B: "a2@2 ~@4 a2@2 ~ a2!2 ~ a2@4", C: "c3@4 ~@2 c3@2 ~ c3!2 ~ c3@4",
  D: "a2@3 ~@3 a2@2 ~ a2!2 ~ a2@3 ~", E: "g2@4 ~@2 g2@2 ~ g2 ~@2 g2@2 ~@2", F: "g2@2 ~ g2@3 g2@2 ~ g2!2 ~ g2@2 ~@2",
  G: "d3@2 ~ d3@3 d3@6 d3@2 ~@2", H: "d3@2 ~ d3@3 d3@2 ~ d3 ~@2 d3 ~@3", I: "a2@2 ~ a2 ~@2 a2@10",
  J: "a2@2 ~ a2 ~@2 a2@6 a2@4", K: "c3@2 ~ c3 ~@2 c3@2 a2@2 ~@4 a2@2", L: "f2@2 ~ f2@3 f2@2 c3@2 ~@4 c3@2",
  M: "g2@2 ~ g2 ~@2 g2@2 ~@2 g2@2 ~@2 g2 ~", N: "g2@2 ~ g2@3 g2@4 g2 ~ g2@3 ~", O: "a2@2 ~ a2@3 a2@2 ~ a2@3 ~@2 a2 ~",
  P: "a2@2 ~ a2@3 a2@4 a2@2 a2@4", Q: "c3@2 ~ c3@3 c3@2 a2@2 ~ a2@3 a2@2", R: "f2@2 ~ f2@2 f2@2 ~ c3@2 ~ c3@5",
  S: "g2@2 ~ g2@2 ~ g2@6 g2@2 ~@2", T: "g2@2 ~ g2@3 g2@3 ~@3 g2@4", U: "d3@2 ~ d3@3 d3@2 ~ d3@7",
  V: "d3@2 ~@2 d3@2 d3@2 ~@4 d3@3 ~", W: "~ c3 ~ a2@3 a2@2 ~@2 a2 ~ a2@2 ~@2", X: "g2@2 ~ g2@3 g2@2 ~@2 g2 ~ g2@4",
  Y: "f2@2 ~ f2@3 f2@4 f2 ~ f2@4", Z: "c3@2 ~ c3@3 c3@4 c3 ~ c3@4", AA: "g2@2 ~ g2@3 g2@4 g2 ~ g2@4",
  AB: "f2@2 ~ f2@3 f2@4 f2@3 ~ f2@2", AC: "g2@2 ~ g2@3 g2@2 ~@2 g2 ~ g2 ~@3", AD: "a2@2 ~ a2@3 a2@4 a2 ~ a2@4",
  AE: "c3@2 ~ c3@2 ~ c3@2 g2@2 ~@2 g2 ~ g2@2", AF: "f2@2 ~ f2@3 f2@2 ~@2 f2 ~ f2@2 ~@2",
  AG: "f2@2 ~ f2@3 f2@2 g2@2 ~ g2@3 g2@2", AH: "c3@2 ~ c3 ~ c3@2 ~ g2@2 ~ g2@2 g2@2 ~",
  AI: "d3@2 ~ d3@2 d3@2 ~@3 d3 ~ d3@4", AJ: "f2 ~@2 f2@2 f2@2 ~ g2@4 g2!2 ~@2",
  AK: "a2@2 ~ a2@3 a2@2 ~@2 a2 ~ a2@2 ~@2", AL: "c3@2 ~ c3@3 c3@2 a2@2 ~@2 a2@3 ~",
  AM: "f2 ~@2 f2 ~@2 f2@2 c3@2 ~ c3@3 c3@2", AN: "g2@2 ~ g2 ~@2 g2@4 g2@2 g2@2 ~@2",
  AO: "d3@2 ~ d3@3 d3@4 d3 ~ d3@2 ~@2", AP: "d3@2 ~ d3@3 d3@4 d3 ~ d3@4", AQ: "a2@2 ~ a2 ~@2 a2@2 ~@2 a2 ~ a2@4",
  AR: "c3@2 ~ c3@3 c3@2 ~@2 c3 ~ c3@4", AS: "f2@2 ~ f2@3 f2@6 f2@3 ~", AT: "g2@2 ~ g2@3 g2 ~@3 g2@5 ~",
  AU: "c3@2 ~ c3@3 c3@2 g2@3 ~ g2@4", AV: "f2@2 ~ f2@3 f2@4 f2 ~ f2@3 ~", AW: "f2@2 ~ f2@3 f2@2 g2@3 g2@3 g2@2",
  AX: "a2@3 a2@3 a2@4 ~ a2@5", AY: "c3@2 ~ c3@3 c3@2 g2@2 ~ g2@3 g2@2", AZ: "f2@2 ~ f2@2 f2@3 g2@2 ~ g2@3 g2@2",
  BA: "g2@2 ~ g2@3 g2@6 g2@4", BB: "a2@2 ~ a2@3 a2@4 a2@2 a2@3 ~", BC: "a2@2 ~ a2@3 a2@4 a2 ~@2 a2@3",
  BD: "c3@2 ~ c3@3 c3@6 c3@4", BE: "a2@2 ~ a2@3 a2@6 a2@4", BF: "g2@2 ~ g2@3 g2@4 g2@2 ~@2 g2@2",
  BG: "g2@2 ~ g2@3 g2@4 g2@3 ~ g2@2", BH: "a2@2 ~ a2@3 a2@3 a2@2 ~ a2@3 ~", BI: "a2@2 a2@2 ~@2 a2@3 a2@2 ~@3 a2@2",
  BJ: "g2@2 ~ g2@3 g2@6 g2 ~ g2@2", BK: "d3@2 ~ d3@3 d3 ~@2 d3 ~@4 d3 ~", BL: "d3@2 ~ d3@3 d3 ~ d3 ~@7",
  BM: "f2@2 ~ f2@3 f2@4 f2@2 f2@3 ~", BN: "c3@2 ~ c3 ~ c3@3 g2@2 ~ g2@3 g2@2", BO: "a2@2 ~ a2@3 a2@4 a2@2 ~@2 a2@2",
  BP: "c3@2 ~ c3@2 c3@2 ~ g2@2 ~ g2@3 g2@2", BQ: "f2@2 ~ f2@3 f2@2 g2@2 ~ g2@2 g2@2 ~",
  BR: "a2@2 ~ a2@3 a2@2 ~ a2@2 ~ a2@4", BS: "c3@2 ~ c3 ~@2 c3@2 g2@2 ~ g2@3 g2@2",
  BT: "f2 ~@2 f2 ~ f2@3 g2 ~@2 g2@3 g2@2", BU: "e3@2 ~ e3@3 e3@2 e3@2 ~ e3@3 e3@2", BV: "e3 ~@7",
})).s("gm_acoustic_bass").gain(0.64)

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

// drums · snare
const snare = s("sd").struct("<~@9 A@8 ~@22 A B A@5 C A@7 C ~@8 A B A@5 C ~ A@13 C A@7 C A@8 ~@8>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@6 x ~@4", C: "~ x ~@2",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@21 A ~@9 B C@6 D ~@16 C@2 B C B C B C ~@7 E ~@14 F ~@7 F ~@16>".pickRestart({
  A: "~@13 x ~@2", B: "x!4 ~@2 x ~@3 x ~ x ~@3", C: "x!5 ~ x ~@3 x ~ x ~@3", D: "x!5 ~@3 x ~ x ~ x ~@3", E: "~@7 x",
  F: "~@11 x!2 ~@3",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~@9 [x!16]!7 ~@23 [x!16]!63 ~@8>").gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@7 B ~@4 C ~@24 C ~@7 A ~@15 A@2 ~@13 D ~@7 D ~@7 B E ~@7>".pickRestart({
  A: "~@13 x!2 ~", B: "~@15 x", C: "~@3 x", D: "~@9 x!2 ~@5", E: "x",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@7 B ~@29 C ~@7 A ~@15 A@2 ~@13 D ~@7 D ~@7 B ~@8>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@11 x ~@4", D: "~ x",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct("<~@38 [~@3 x] ~@71>").gain(0.72)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@9 A@7 B ~@4 C ~@5 C ~@3 C D C D C D C ~ A@7 E A@3 E@2 A@3 B D C D C D C@2 A@7 F ~ A@3 E A@9 B A@5 B A B A B A B A B
  A B ~@8
>`.pickRestart({
  A: "~@2 x ~@2 x!2 ~", B: "~ x ~ x", C: "~@3 x", D: "~@5 x!2 ~", E: "~@2 x ~@3 x!2", F: "~ x ~@2",
})).gain(0.64)

stack(
  acoustic_guitar_nylon, overdriven_guitar, pad_warm, pad_sweep, piano, piano_2, string_ensemble_1, synth_brass_1, bass,
  kick, snare, low_tom, hihat, mid_tom, high_tom, crash, tambourine
)

More by Roxette