Strudelify

Stars

Roxette

KeyC minorTempo133 bpm
0:00/0:00
// Stars — Roxette
// 133 bpm, 4/4, key C 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 133 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(133/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 · soprano sax · "Lead (soprano sax)"
const soprano_sax = note(`<
  ~@6 A B ~@2 C@2 ~@3 D E F G H I F G J@8 K ~@17 L F M N O F M P@8 Q@7 R@2 S@8 T ~@6 A B ~@2 C@2 ~@19 U@3 ~ V@2 W X Y
  ~@3 Z AA@2 AB@2 ~@3
>`.pickRestart({
  A: "~@6 eb5 bb4", B: "c5", C: "[~@12 d5@2 eb5@3 c5@15]/2", D: "~@7 bb4", E: "c5@3 ~ c5@3 ~ bb4@2 c5 ~ c5@2 bb4@2",
  F: "c5@2 bb4@3 ~ bb4@7 ~@3", G: "bb4@2 d5@3 ~ d5@7 ~@3", H: "d5@2 c5@3 ~ c5@6 ~@2 bb4@2",
  I: "c5@3 ~ c5@2 ~@2 bb4@2 c5@2 c5@2 bb4@2",
  J: "[d5@2 c5@3 ~ [g4,c5]@2 c5@2 c5@2 bb4@2 g4@6 ~@2 g4@2 c5 ~ c5@2 bb4@2 c5@4 bb4@6 g4 ~ g4@2 bb4@2 f4@6 eb4@2 f4@6 g4@2 f4@4 eb4@4 g4@2 c5 ~ c5@2 bb4@2 g4@6 ~@2 g4@2 c5 ~ c5@2 bb4@2 c5@4 bb4@4 g4 ~ g4 ~ g4@2 bb4@2 f4@6 eb4@2 f4@6 g4@2 f4@2]/8", // C5
  K: "~@2 eb4@11 ~@3", L: "c5@3 ~ c5@2 bb4@2 c5@2 bb4@2 c5@2 bb4@2", M: "bb4@2 d5@3 ~ d5@8 ~@2",
  N: "d5@2 c5@3 ~ c5@7 ~@3", O: "c5 ~ c5 bb4 c5 bb4 c5 bb4",
  P: "[d5@2 c5@3 ~ [g4,c5]@2 c5@2 c5@2 bb4@2 g4@6 ~@2 g4@2 c5 ~ c5@2 bb4@2 c5@4 bb4@4 ~@2 g4 ~ g4@2 eb4@2 f4@6 eb4@2 f4@6 g4@2 f4@4 ~@4 g4@2 c5 ~ c5@2 bb4@2 g4@6 ~@2 g4@2 c5 ~ c5@2 bb4@2 c5@4 bb4@6 g4 ~ g4@2 bb4@2 f4@6 eb4@2 f4@6 g4@2 f4@2, ~@66 eb4@7 ~@55]/8", // C5
  Q: "[~@2 eb4@12 ab4@10 eb4@4 f4@2 g4@8 ~@2 g4@6 bb4@7 ~@3 ab4@4 g4@2 f4@8 ~@2 f4@5 ~ bb4@10 eb4@4 bb3@2 c4@8 ~@2 c4@6 g4@2]/7",
  R: "[~@8 eb4@4 bb3@2 c4@10 eb4@2 f4@5 ~]/2",
  S: "[f4@8 eb4@4 f4@2 g4@8 ~@2 g4@6 bb4@8 ~@2 ab4@4 g4@2 f4@9 ~ f4@6 bb4@7 ~@3 eb4@4 bb3@2 c4@8 ~@2 c4@6 g4@8 ~ g4 eb4@4 bb3@2 c4@10 eb4@2 f4@5 ~]/8",
  T: "f4@5 ~@3", U: "[~@4 bb4@2 ab4 g4@4 ~ g4@3 bb4@5 ~@4]/3", V: "[~@4 bb4@2 ab4 g4@4 ~ g4@4]/2", W: "f4@2 eb4@11 ~@3",
  X: "c4@8 eb4@2 f4@5 ~", Y: "f4@3 ~", Z: "~@6 g4 ~ g4 ~ g4@2 bb4@2 g4@2", AA: "[c5@7 ~]/2",
  AB: "[~@14 f4@4 eb4@4 c4@9 ~]/2",
})).s("gm_soprano_sax").gain(0.8)

// chords · synth strings 1 · "Fantasia/Syn strings"
const synth_strings_1 = note(`<
  ~@8 A B C D A B E D F B C D A B C D A B C G A B C H@2 I@2 J@2 K@2 A C A B C D A B C D A B C D L B C D A B C M A B C
  H@2 I@2 J@2 A G A C I@2 J@2 N@2 A C ~@4 A B O D A B P D A B C D I@2 J@2 Q@2 A C I@2 J@2 A G A C I@2 J@2 A G A C A B C
  D A B C D R@2 ~
>`.pickRestart({
  A: "[c4,eb4,g4]", B: "[bb3,eb4,g4]", C: "[bb3,d4,f4]", D: "[a3,c4,f4]", E: "[bb3,d4,f4]@15 ~", F: "[eb4,g4], c4@3 ~",
  G: "[ab3,c4,eb4]", H: "[ab3,c4,eb4]/2", I: "[bb3,eb4,g4]/2", J: "[bb3,d4,f4]/2",
  K: "[[c4,eb4,g4]@15 [ab3,c4]@12 ~@5, ~@15 eb4@17]/2", L: "[c4,eb4]@7 ~, g4", M: "[c4,eb4], ab3@11 ~@5",
  N: "[[c4,eb4,g4]@15 ~ [ab3,c4]@16, ~@15 eb4@12 ~@5]/2", O: "[bb3,f4], d4@5 ~@3", P: "[bb3,f4], d4@3 ~",
  Q: "[[c4,eb4,g4]@15 [ab3,c4,eb4]@17]/2", R: "[[c4,eb4,g4], c3@7 ~]/2",
})).s("gm_synth_strings_1").gain(0.31)

// chords · pad new age · "Fantasia/Syn strings"
const pad_new_age = note("<A B C D A B C D ~@125>".pickRestart({
  A: "[eb4,g4,c5]", B: "[eb4,g4,bb4]", C: "[f4,bb4,d5]", D: "[f4,a4,c5]",
})).s("gm_pad_new_age").gain(0.26)

// chords · pad poly · "Polusynth/Birds"
const pad_poly = note("<A B C D ~@11 E ~@32 F ~@84>".pickRestart({
  A: "[eb4,g4] [eb4,g4]@2 [eb4,g4] g4!2 [eb4,g4]!2, c5, ~@2 eb4 ~", // Eb
  B: "[eb4,g4,bb4]@2 [eb4,g4]!2 [eb4,g4,bb4]!2 [eb4,bb4]!2, ~ bb4 ~ g4", // Eb Eb5
  C: "[bb4,d5]!2 f4!2 [bb4,d5]!4, f4 [bb4,d5] f4!2", // Bb
  D: "f4 ~ f4@2 [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@2, [a4,c5] ~@3", // F Am
  E: "[f3,c4]@2 [f3,c4]@2 [f3,c4]@2 [f3,c4]@2 [f3,c4]@2 [f3,c4]@2 [f3,c4]@2 [f3,c4] ~", F: "[f3,c4]!8",
})).s("gm_pad_poly").gain(0.29).pan(0.2)

// other · lead 1 square · "Square/Bkup (oboe)"
const lead_1_square = note("<~@4 A@4 ~@3 B ~@3 B ~@28 B ~@3 B ~@37 A@4 ~@3 B ~@3 B ~@27 B ~@3 B ~@3>".pickRestart({
  A: "~@2 c5 d5 eb5@2 c5 ~@3 c5 d5 eb5@2 c5 ~", B: "~@6 c5 ~ eb5@2 c5 ~@5, ~@7 d5@2 ~@7",
})).s("gm_lead_1_square").gain(0.56).pan(0.1)

// other · oboe · "Square/Bkup (oboe)"
const oboe = note("<~@98 A@7 B@8 C@8 D ~@11>".pickRestart({
  A: "[eb4@7 ~ eb4@6 g4@9 ~ f4@4 eb4@2 d4@9 ~ d4@6 f4@8 ~@2 eb4@3 ~ eb4@2 c4@9 ~ c4@6 eb4@8 ~@2 eb4@4 d4@2 c4@9 ~ c4@8]/7",
  B: "[bb3@6 ~@2 eb4@3 ~ eb4 ~ eb4@9 ~ eb4@6 g4@10 f4@4 eb4@2 d4@9 ~ d4@6 f4@10 eb4@3 ~ eb4@2 c4@9 ~ c4@6 eb4@9 ~ eb4@4 d4@2 c4@9 ~ c4@8]/8",
  C: "[bb3@6 ~@2 eb4@3 ~ eb4 ~ eb4@8 ~@2 eb4@6 g4@10 f4@4 eb4@2 d4@9 ~ d4@6 f4@10 eb4@4 d4@2 c4@8 ~@2 c4@5 ~ eb4@9 ~ eb4@4 d4@2 c4@8 ~@2 c4@8]/8",
  D: "bb3@3 ~",
})).s("gm_oboe").gain(0.64).pan(0.1)

// other · lead 1 square · "Square/Gtr squeak/Bkup (oboe)"
const lead_1_square_2 = note(`<
  ~@20
  [c3@3 ~@3 c3@2 bb2@2 c3!2 c3@3 ~]!3
  [c3@5 ~ c3@2 ~@8]
  ~@29
  [c3@3 ~@3 c3@2 bb2@2 c3!2 c3@3 ~]!3
  [c3@5 ~ c3@2 ~@8]
  ~@76
>`).s("gm_lead_1_square").gain(0.64).pan(0.2)

// other · oboe · "Square/Gtr squeak/Bkup (oboe)"
const oboe_2 = note("<~@98 A@7 B@8 C@8 D ~@11>".pickRestart({
  A: "[g4@7 ~ g4@6 bb4@10 ab4@4 g4@2 f4@9 ~ f4@6 bb4@10 eb4@4 bb3@2 c4@9 ~ c4@6 g4@8 ~@2 eb4@4 bb3@2 c4@10 eb4@8]/7",
  B: "[f4@8 eb4@4 f4@2 g4@9 ~ g4@6 bb4@10 ab4@4 g4@2 f4@8 ~@2 f4@6 bb4@9 ~ eb4@4 bb3@2 c4@9 ~ c4@6 g4@8 ~@2 eb4@4 bb3@2 c4@10 eb4@8]/8",
  C: "[f4@6 ~@2 eb4@4 f4@2 g4@9 ~ g4@6 bb4@10 ab4@4 g4@2 f4@9 ~ f4@6 bb4@10 eb4@4 bb3@2 c4@9 ~ c4@6 g4@8 ~@2 eb4@4 bb3@2 c4@10 eb4@8]/8",
  D: "f4@7 ~@9",
})).s("gm_oboe").gain(0.64).pan(0.2)

// bass · acoustic bass · "Ac. bass"
const bass = note(`<
  ~@8 A B C D A B C D A@9 B C E A B C E@2 ~@8 A B C D A B C D ~ A@8 B C E A B C E@2 ~@24 A B C D A B C D B@2 C@2 A E A C
  B@2 C@2 A E A C B@2 C@2 A E A C A B C D A B C D ~@3
>`.pickRestart({
  A: "c2@2 ~@2 c2@2 ~ c2!2 ~ c2 ~ c2@2 ~@2", B: "eb2@2 ~@2 eb2@2 ~ eb2!2 ~ eb2 ~ eb2@2 ~@2",
  C: "bb1@2 ~@2 bb1@2 ~ bb1!2 ~ bb1 ~ bb1@2 ~@2", D: "f1@2 ~@2 f1@2 ~ f1!2 ~ f1 ~ f1@2 ~@2",
  E: "ab1@2 ~@2 ab1@2 ~ ab1!2 ~ ab1 ~ ab1@2 ~@2",
})).s("gm_acoustic_bass").gain(0.64).pan(0.3)

// other · synth brass 1 · "Syn brass prog."
const synth_brass_1 = note(`<
  ~@7 A@3 B A@3 B A@10 C B A@2 C B A@2 ~@8 A@2 B A@3 B A ~ A@8 C B A@2 C B A@2 ~ C B@2 A@3 B C@2 B@2 A@3 B ~@4 A@6 B A@3
  B A C@2 B@2 A@3 B C@2 B@2 A@3 B C@2 B@2 A@3 B A@2 B A@3 B A ~@3
>`.pickRestart({
  A: "c4!16", B: "bb3!16", C: "eb4!16",
})).s("gm_synth_brass_1").gain(0.22).pan(0.4)

// other · pad choir · "Choir pad"
const pad_choir = note("<~@32 A@8 B ~@24 C@8 D@8 B ~@16 E@7 F@8 G@8 H ~@11>".pickRestart({
  A: "[~@8 eb4@4 f4@2 g4@9 ~ g4@6 bb4@10 ab4@4 g4@2 f4@9 ~ f4@6 bb4@7 ~@3 f4@4 bb3@2 c4@9 ~ c4@6 g4@8 ~@2 eb4@4 bb3@2 c4@10 eb4@8]/8",
  B: "f4@7 ~",
  C: "[~@8 eb4@4 f4@2 g4@9 ~ g4@6 bb4@10 ab4@4 g4@2 f4@9 ~ f4@6 bb4@7 ~@3 eb4@4 bb3@2 c4@9 ~ c4@6 g4@8 ~@2 eb4@4 bb3@2 c4@10 eb4@8]/8",
  D: "[f4@8 eb4@4 f4@2 g4@9 ~ g4@6 bb4@10 ab4@4 g4@2 f4@9 ~ f4@6 bb4@7 ~@3 eb4@4 bb3@2 c4@9 ~ c4@6 g4@8 ~@2 eb4@4 bb3@2 c4@10 eb4@8]/8",
  E: "[eb4@7 ~ eb4@6 g4@10 f4@4 eb4@2 d4@9 ~ d4@6 f4@8 ~@2 eb4@3 ~ eb4@2 c4@9 ~ c4@5 ~ c4@9 ~ eb4@4 bb3@2 c4@10 eb4@8]/7",
  F: "[f4@6 ~@2 eb4@4 eb4@2 eb4@8 ~@2 eb4@6 g4@9 ~ f4@4 eb4@2 d4@9 ~ d4@6 f4@9 ~ eb4@3 ~ eb4@2 c4@9 ~ c4@5 ~ c4@9 ~ eb4@4 bb3@2 c4@10 eb4@8]/8",
  G: "[f4@8 eb4@4 eb4@2 eb4@9 ~ eb4@6 g4@9 ~ f4@4 eb4@2 d4@9 ~ d4@6 f4@8 ~@2 eb4@3 ~ eb4@2 c4@8 ~@2 c4@5 ~ c4@8 ~@2 eb4@4 bb3@2 c4@10 eb4@8]/8",
  H: "f4@3 ~",
})).s("gm_pad_choir").gain(0.56).pan(0.2)

// other · tubular bells · "Crystal/Tubular bells"
const tubular_bells = note("<~@33 A ~@32 A ~@31 A ~@7 A ~@7 A ~@18>".pickRestart({
  A: "g5 ~@15",
})).s("gm_tubular_bells").gain(0.48).pan(0.9)

// chords · piano · "Bright piano"
const piano = note("<~@33 A@2 B@2 C D C E ~@25 A@2 B@2 C D F@2 A@2 B@2 C D G@2 ~@41 H@2 I ~ H@2 I ~@3>".pickRestart({
  A: "~@7 eb4, eb3@3 g4, ~ bb3@7, ~@2 eb4@3 bb4@3, ~@3 g4 eb5@4",
  B: "~@7 f4, bb2@3 bb4, ~ f3@7, ~@2 f4@3 d5@3, ~@3 bb4 f5@4",
  C: "~@7 g4, c3@3 c5, ~ g3@7, ~@2 g4@3 eb5@3, ~@3 c5 g5@4",
  D: "~@7 eb4, ab2@3 ab4, ~ eb3@7, ~@2 eb4@3 c5@3, ~@3 ab4 eb5@4",
  E: "~@8 d5@5 ~@3, bb2@13 ~@3, ~@2 f3@11 ~@3, ~@4 f4@9 ~@3, ~@6 bb4@7 ~@3",
  F: "[~@13 d5 bb4 f4, c3@6 c5 g4@2 [f3,f4]@6 ~, ~ g3@7 bb2@7 ~, ~@2 g4@3 eb5@3 ~@2 bb4@4 ~@2, ~@6 c5@2 g5@8 ~@6 d5@2 f5@5 ~@3]/2", // F
  G: "[~@9 f3@6 ~, c3@6 c5 g4@2 ~@7, ~ g3@7 bb2@7 ~, ~@2 g4@3 eb5@3 ~@8, ~@3 c5 g5@4 ~@8]/2",
  H: "[~@15 c5, ~@7 c4@6 c4@3, ~@8 c5@3 c5@4 ~, ~@9 f4@5 f4@2, ~@5 bb4@3]/2", I: "~ c5@3, c4, ~ f4@7",
})).s("gm_piano").gain(0.56).pan(0.2)

// chords · orchestral harp · "Harp"
const orchestral_harp = note("<~@33 A@4 B@2 C D ~@25 A@4 B@2 C E@5 B@2 C ~@52>".pickRestart({
  A: "[~@7 g4@2 ~@14 f4@2 ~@6 f4, ~ g4@6 ~@2 g4@6 g4@15 bb4@2, ~@2 bb4@4 bb4@4 bb4@4 bb4@2 ~ f4@5 bb4@3 f4@6 ~, ~@3 eb5@2 eb5@6 eb5@2 eb5@3 ~@2 bb4@3 d5@5 bb4@3 d5@3, ~@4 g5@8 g5@4 ~@3 d5 f5@7 d5 f5@4]/4",
  B: "[~@7 g4@2 ~@6 eb4, ~ g4@6 ~@2 eb4@6 ~, ~@2 c5@4 c5@3 ~ ab4@4 ab4@2, ~@3 eb5@2 eb5@4 ~@2 c5@2 c5@3, ~@4 g5@5 ~@3 eb5@4]/2",
  C: "~@7 g4, ~ g4@6 ~, ~ c5@2 c5, ~@3 eb5@2 eb5@3, ~ g5",
  D: "~@8 f5@5 ~@3, ~@2 f4@11 ~@3, ~@4 bb4@9 ~@3, ~@6 d5@7 ~@3",
  E: "[~@5 d5 bb4 ~@8 g4@2 ~@14 f4@2 ~@6 f4, ~@2 f4@11 ~ f4@30 bb4@4 ~@2 f4@10 bb4@6 f4@10 bb4@4, ~@2 bb4@4 ~@3 g4@5 bb4@3 g4@6 g4@16 ~, ~@3 d5@2 ~@5 bb4@3 eb5@5 bb4@3 eb5@3 ~@2 bb4@3 d5@5 bb4@3 d5@3, ~@8 f5@5 ~@9 eb5@2 g5@14 eb5@2 g5@8 ~@6 d5@2 f5@14 d5@2 f5@8]/5",
})).s("gm_orchestral_harp").gain(0.43).pan(0.7)

// other · synth drum · "Syn drum"
const synth_drum = note("<~@6 A ~ B@25 ~@8 B@8 ~ B@16 ~@16 B@48 C ~@2>".pickRestart({
  A: "c2@7 ~@9", B: "c2 ~ c2 ~ c2 ~ c2 ~", C: "c2 ~@7",
})).s("gm_synth_drum").gain(0.5)

// drums · kick
const kick = s("bd").struct("<~@6 A ~ B@8 C@8 B@9 ~@8 B@8 ~ C@7 B D B@7 ~@16 B@48 A ~@2>".pickRestart({
  A: "x", B: "x!4", C: "x ~ x ~ x!3 ~", D: "x ~ x!2",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@7 A B C@7 ~@7 A B C@8 ~@8 C@8 ~@7 A B C@8 ~@23 A B C@39 ~@3>".pickRestart({
  A: "~@8 x!8", B: "x!2 ~ x", C: "~ x ~ x",
})).gain(0.64)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@7 A ~@15 A ~@32 A ~@32 A ~@43>".pickRestart({
  A: "~ x!12 ~@3",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@28 B ~@40 B ~@11 C ~@3 D ~@15 D ~@19>".pickRestart({
  A: "~@7 x", B: "~@6 x!2", C: "~@5 x!3", D: "~@2 x!2 ~ x!2 ~ x ~ x ~ x ~ x!2",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@12 ~@4 A@12 B ~@8 A@8 ~@4 A@12 B ~@20 A@44 ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~@11 A ~@3 A ~@12 A ~@3 A ~@11 A ~@3 A ~@20 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@2
>`.pickRestart({
  A: "x",
})).gain(0.56)

stack(
  soprano_sax, synth_strings_1, pad_new_age, pad_poly, lead_1_square, oboe, lead_1_square_2, oboe_2, bass,
  synth_brass_1, pad_choir, tubular_bells, piano, orchestral_harp, synth_drum, kick, snare, snare_soft, low_tom,
  open_hat, crash
)

More by Roxette