Strudelify

Mysterious Girl

Peter Andre

KeyE♭ majorTempo86 bpm
0:00/0:00
// Mysterious Girl — Peter Andre
// 86 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 pad new age (copy of ch 5 celesta)
// note: Full arrangement: all 84 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(86/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 · piano
const piano = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~ A B A B A B A B
  A B A B A B A C A B A B A B A B A B A B A B A D ~
>`.pickRestart({
  A: "~@3 [bb3,eb4,g4,bb4] ~@5 [bb3,eb4,g4,bb4] ~@5 [c4,eb4,g4,bb4] ~ [c4,eb4,g4,bb4] ~@3 [c4,eb4,g4,bb4] ~@2", // Eb Cm7
  B: "~@3 [ab3,c4,eb4,ab4] ~@5 [ab3,c4,eb4,ab4] ~@5 [bb3,d4,f4,bb4] ~ [bb3,d4,f4,bb4] ~@3 [bb3,d4,f4,bb4] ~@2", // Ab Bb
  C: "[ab3,c4,eb4,ab4] ~@23", D: "~@3 [ab3,c4,eb4,ab4] ~@5 [ab3,c4,eb4,ab4] ~@14",
})).s("gm_piano").gain(0.3)

// bass · electric bass finger
const bass = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~ A B A B A B A B
  A B A B A B A C A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "eb2@4 ~@4 bb2!2 ~@2 c2@4 ~@4 g2!2 ~@2", B: "ab1@4 ~@4 ab2!2 ~@2 bb1@4 ~ bb1 ~@2 c2 eb2 ~@2",
  C: "~@15 g2@2 ~ f2@2 eb2 c2@3",
})).s("gm_electric_bass_finger").gain(0.3)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A B A B A B A B A B A B A B A B A B A B ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~ A B A B A B A B
  A B A B A B A C A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~@3 [eb4,g4,bb4] ~@5 [eb4,g4,bb4] ~@5 [c4,eb4,bb4] ~@5 [c4,eb4,bb4] ~@2", // Eb Cm7
  B: "~@3 [c4,eb4,ab4] ~@5 [c4,eb4,ab4] ~@5 [d4,f4,bb4] ~@5 [d4,f4,bb4] ~@2", C: "[c4,eb4,ab4] ~@23",
})).s("gm_electric_guitar_clean").gain(0.36)

// other · celesta
const celesta = note("<~ A@5 ~@24 A@5 ~@16 B@8 ~@16 C@8 ~>".pickRestart({
  A: "[~@6 bb5@2 g5 bb5 ~@2 bb5@5 g5 bb5@2 f6@2 ~ eb6@5 ~ c6 eb6@2 c6 eb6@2 ~ g6@2 ~ f6@2 ~ eb6@2 c6 ~@2 bb5@3 ~@4 g5@2 ab5 bb5 ~@2 bb5@2 g5 bb5 ~ bb5@3 f6@2 ~ eb6@5 ~ c6 eb6@2 c6 eb6@2 ~ g6@2 ~ f6@2 ~ eb6@2 c6 ~@2 bb5@3 ~@22]/5",
  B: "[~@17 eb6 bb6@2 ~ bb6@2 f6@8 ~@10 ab6 g6@2 f6 eb6@2 bb5@3 ~@15 eb6 bb6@2 ~ bb6@2 f6@8 ~@10 ab6 g6@2 f6 eb6@2 bb5@3 ~@15 eb6 bb6@2 ~ bb6@2 f6@8 ~@10 ab6 g6@2 f6 eb6@2 bb5@3 ~@15 eb6 bb6@2 ~ bb6@2 f6@8 ~@10 ab6 g6@2 f6 eb6@2 bb5]/8",
  C: "[~@17 eb6 bb6@2 ~ bb6@2 f6@8 ~@10 ab6 g6@2 f6 eb6@2 bb5@3 ~@15 eb6 bb6@2 ~ bb6@2 f6@8 ~@10 ab6 g6@2 f6 eb6@2 bb5@3 ~@15 eb6 bb6@2 ~ bb6@2 f6@8 ~@10 ab6 g6@2 f6 eb6@2 bb5@3 ~@15 eb6 bb6@2 ~ bb6@2 f6@8 ~@10 ab6 g6@2 f6 eb6@2 ~]/8",
})).s("gm_celesta").gain(0.36)

// other · celesta · soft notes
const celesta_soft = note("<~@51 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@2>".pickRestart({
  A: "~@20 eb6 ~@3",
})).s("gm_celesta").gain(0.18)

// chords · rock organ
const rock_organ = note(`<
  ~@22 A B C D A B C D ~@21 A B C D A B C E F G H@2 I J K@2 A B C D A B C D A B C D A B C D ~
>`.pickRestart({
  A: "[g4,bb4,eb5]@3 [g5,bb5,eb6]@3 [g4,bb4,eb5] ~ [g5,bb5,eb6]@2 ~ [g4,bb4,eb5] [g5,bb5,eb6]@4 ~ [f4,bb4,d5] [f5,bb5,d6]@5 ~", // Eb Bb
  B: "[eb5,ab5,c6]@3 [eb4,c5] ~@4 [eb5,ab5,c6] [eb4,c5] ~@2 [f5,bb5,d6]@3 [f4,bb4,d5] ~ [g4,bb4,eb5] [g5,bb5,eb6]@2 [ab4,c5,f5] [ab5,c6,f6]@2 ~, ~@3 ab4@2 ~@4 ab4@2 ~@13", // Ab Cm Ab Cm Bb Eb Fm
  C: "[g5,bb5,eb6]@3 [g4,bb4,eb5]@2 ~@3 [g5,bb5,eb6] [g4,bb4,eb5] ~ [g4,bb4,eb5] [g5,bb5,eb6]@4 ~ [f4,bb4,d5] [f5,bb5,d6]@4 ~ [f4,bb4,d5]", // Eb Bb
  D: "[eb5,ab5,c6]@3 [eb4,c5] ~@4 [eb5,ab5,c6] [eb4,c5] ~ [eb4,ab4,c5] [ab5,c6,eb6]@3 [f4,bb4,d5] ~ [g4,bb4,eb5] [ab5,c6,f6]@2 [ab4,c5,f5] [ab5,c6,f6]@2 ~, ~@3 ab4@2 ~@4 ab4@2 ~@13", // Ab Cm Ab Cm Ab Bb Eb Fm
  E: "[eb5,ab5,c6]@3 [eb4,c5] ~@4 [eb5,ab5,c6] [eb4,c5] ~ [eb4,ab4,c5] [ab5,c6,eb6]@3 [f4,bb4,d5] ~ [g4,bb4,eb5] [ab5,c6,f6,bb6]@2 [ab4,c5,f5,c7] [ab5,c6,f6,eb7]@2 c7, ~@3 ab4@2 ~@4 ab4@2 ~@13", // Ab Cm Ab Cm Ab Bb Eb Fm …
  F: "eb7@2 ~ eb7@2 ~ eb7@3 c7@2 bb6@6 c7@2 ~@4 eb6", G: "ab6@2 eb6 ab6@2 eb6 ab6@2 bb6 c7@2 bb6@6 c7 ~@3 bb5@2 c6",
  H: "[eb6@2 c6 eb6@2 c6 eb6@2 f6 ~@3 [bb5,eb6]@2 c6 [bb5,eb6]@2 c6 [bb5,eb6]@2 f6 ~@3 ab6@2 ~ [eb6,ab6]@2 ~ [eb6,bb6]@2 ~ [eb6,bb6]@2 c7 bb6@2 c7 bb6 ~@2 bb6@2 c7 eb7@2 c7, ~@23 eb6@3 ~@9 f6@3 f6@2 ~@8]/2", // Eb5 Ab5 Eb5
  I: "f7@2 ~ eb7@3 eb7@3 c7@2 bb6@6 c7 ~@5 eb6, eb7 ~@23",
  J: "~ g6 eb6 ~ g6 eb6 ~ g6 eb6 ~ bb6@6 ~ c7 ~@2 [g6,bb6]@3 ~, ab6@2 ~ ab6@2 ~ ab6@2 ~ c7@2 ~@13", // Gm
  K: "[~@2 [f6,ab6] g6@2 f6 g6@2 ~ [d6,f6]@2 ~ eb6@5 f6 eb6 ~@2 bb5@2 ~ [ab5,eb6]@3 ~@21, ~@5 eb6@3 ~@4 bb5@8 ~@3 c6@4 ~@21]/2", // Fm Dm Ab5
})).s("gm_rock_organ").gain(0.2)

// other · string ensemble 2
const string_ensemble_2 = note("<~@28 A@2 ~@22 B@7 ~@9 C@6 D@8 ~@2>".pickRestart({
  A: "[~@23 bb5@24 ~]/2", B: "[~@23 bb5@144 ~]/7", C: "[~@23 bb5@121]/6", D: "[~@23 bb5@169]/8",
})).s("gm_string_ensemble_2").gain(0.36)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@13 A B C D E B C F ~ G H G H G H G H ~@12 A B C D E B C F ~ G H G H G H G H A B C D E B C I G H G H G H G H G H G H
  G H G H ~
>`.pickRestart({
  A: "~@5 eb3 ~@2 eb3!2 ~ eb3 g3@4 ~@2 bb2@2 c3 eb3@2 c3",
  B: "eb3@5 ~ c4 ~ c4 bb3@3 [c4,db4] d4@5 [ab3,c4]@6, ~@2 [bb3,f4] ~", // Dbmaj7 Ab Bb5
  C: "eb3@3 eb3 ~ eb3 ~@2 eb3 eb3@2 eb3 g3@3 bb3 ~@2 f3@3 eb3@3",
  D: "ab2@3 eb3 ~ eb3 ~@2 eb3 eb3@2 eb3 ~@3 g3@3 f3@2 eb3 c3@2 ~", E: "eb3@10 ~ eb3 g3@4 ~@2 bb2@2 c3 eb3@2 c3",
  F: "ab2@3 eb3 ~ eb3 ~@2 eb3 eb3@2 [eb3,c4] d4@5 ~ [ab3,c4]@6, ~@11 bb3@6 ~@7", // Cm Ab
  G: "~@5 eb3 ~@2 eb3 eb3@2 eb3 ~@5 eb3 ~@2 eb3!2 ~ eb3", H: "~@5 eb3 ~@2 eb3 eb3@2 eb3 ~@5 eb3 ~@2 eb3!2 ~@2",
  I: "ab2 ~@14 g3@3 f3@2 eb3 c3@3",
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.8)

// chords · electric guitar clean
const electric_guitar_clean_2 = note(`<
  ~@2 A ~ A ~@2 B C D E F G ~@3 H ~@3 I ~@3 B J B K F L ~ A ~ M B ~ B C D E F G ~@3 H ~@3 I ~@3 B J B K F L ~@2 B C D E
  F ~@3 B J B K F L ~@2 B J B K F L ~
>`.pickRestart({
  A: "~@20 [d4,f4,bb4] ~@3", B: "[bb3,eb4] ~@3",
  C: "~@3 [ab3,c4] ~@4 [eb4,ab4] c4 ~@2 [c4,ab4,a4] [d4,bb4]@4 ~ [c4,ab4,a4] [d4,bb4]@4 ~", // Ab Ab5 F Gm F Gm
  D: "[bb3,eb4]@6 ~@11 [eb4,e4] f4@4 ~ [e4,f4]", E: "eb4@11 ~@9 [f4,bb4] d4 ~ f4",
  F: "[bb3,eb4]@6 ~@11 c4 ~@3 eb4@3, ~@17 eb4@3 ~@4, ~@3 bb4", // Eb5
  G: "[ab3,c4]@8 [c4,eb4,ab4] ~@2 [db4,f4,gb4] [d4,g4,bb4]@3 [c4,f4] ~@2 [d4,g4,bb4]@3 [c4,f4] ~@2, ~@18 [db4,f4,gb4] ~@5", // Ab Gbmaj7 Gm F5 Gm F5 Gbmaj7
  H: "~@12 [g4,bb4]@4 ~@2 [f4,ab4]@5 ~", I: "~@18 [c4,ab4]@2 ~ [d4,bb4]@2 ~", J: "~@3 [ab3,c4] ~@4 [eb4,ab4] c4 ~@14",
  K: "~@20 [f4,bb4] d4 ~ f4", L: "[ab3,c4]@8 [c4,eb4,ab4] ~@15",
  M: "~@3 [ab3,c4] ~@4 [eb4,ab4] c4 ~@2 [c4,f4,gb4] [d4,g4]@4 ~ [c4,f4,gb4] [d4,g4]@4 ~, ~@12 bb4@5 ~ bb4@5 ~", // Ab Ab5 F G5 F G5
})).s("gm_electric_guitar_clean").gain(0.36).pan(0.3)

// chords · synth brass 1 · Cm Ab5 Db Gm Bb5 Eb5 Ab5 Cm …
const synth_brass_1 = note(`<
  ~@67
  [~@3 [g4,eb5]@2 [g4,eb5] ~@3 [g4,eb5] ~@5 [g4,eb5]@2 [g4,eb5] ~@3 [g4,eb5] ~@2]
  [~@3 [ab4,eb5]@2 [ab4,f5] ~@3 f5 ~@2 [bb4,d5,g5]@3 [bb4,f5] ~@2 [bb4,eb5]@2 [bb4,eb5] ab4@2 ~, ~@8 [ab4,eb5]@2 ~@11 f5 ~@2]
  [~@3 [g4,eb5]@2 [g4,eb5] ~@3 [g4,eb5] ~@5 [g4,eb5]@2 [g4,eb5] ~@3 [g4,eb5] ~@2]
  [~@3 [ab4,eb5]@2 [ab4,f5] ~@3 f5 ~@2 [bb4,d5,g5]@3 [bb4,f5] ~@2 [bb4,eb5]@2 [bb4,eb5] ab4@2 ~, ~@8 [ab4,eb5]@2 ~@11 f5 ~@2]
  [~@3 [g4,eb5]@2 [g4,eb5] ~@3 [g4,eb5] ~@5 [g4,eb5]@2 [g4,eb5] ~@3 [g4,eb5] ~@2]
  [~@3 [ab4,eb5]@2 [ab4,f5] ~@3 f5 ~@2 [bb4,d5,g5]@3 [bb4,f5] ~@2 [bb4,eb5]@2 [bb4,eb5] ab4@2 ~, ~@8 [ab4,eb5]@2 ~@11 f5 ~@2]
  ~@11
>`).s("gm_synth_brass_1").gain(0.22).pan(0.3)

// bass · clavinet
const bass_2 = note("<~@16 A B ~@27 A B C D ~@17 A B C D ~@14>".pickRestart({
  A: "~@15 g2@3 f2@2 eb2 c2@3", B: "eb2@7 ~@17", C: "~@18 bb1@2 c2 eb2@2 f2", D: "eb2@3 f2 ~@20",
})).s("gm_clavinet").gain(0.33).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~ A@20 B A@3 C A@24 B A@3 C A@11 B A@3 C A@7 C A@4 ~>".pickRestart({
  A: "x!4", B: "~@7 x", C: "x ~ x ~ x ~ x!2",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~ A@20 ~ A@28 ~ A@15 ~ A@16 ~>".pickRestart({
  A: "~ x ~ x",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A ~@3 B ~@3 C ~@3 A ~@3 D ~@8 E ~@3 A ~@3 B ~@3 C ~@3 A ~@3 D ~@8 E ~@25
>`.pickRestart({
  A: "~@5 x", B: "~@14 x ~@2 x ~@2 x ~@3", C: "~@10 x!3 ~ x ~ x ~@6 x", D: "~@13 x!3 ~@2 x ~ x ~@2 x",
  E: "~@10 x!3 ~ x ~ x ~ x ~ x ~@2 x",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@3 B A@16 C A@3 B A@3 B A@20 C A@3 B A@3 B A@7 D A@3 B A@3 B A@3 B A@3 B ~
>`.pickRestart({
  A: "x ~@2 x ~ x ~@3 x ~ x ~@3 x ~ x ~@2 x ~@3", B: "x ~@2 x ~ x ~@3 x ~ x ~@3 x ~ x ~@6",
  C: "x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@11", D: "x",
})).gain(0.48)

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

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@2 B A ~@3 A ~@3 A ~@3 A ~@3 A@2 ~@2 C A ~@3 A ~@2 B A ~@3 A ~@3 A ~@3 A ~@3 A@2 ~@2 C A ~@3 A ~@6 A@2 ~@2 C A
  ~@2 D A ~@2 C A ~@2 D ~
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~@7 x", D: "~@6 x!2",
})).gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@20 B A@28 B A@15 C A@16 ~>".pickRestart({
  A: "x ~ x!2 ~ x ~@2 x!2 ~@2 x ~ x!2 ~ x ~@2 x!2 ~@2", B: "x ~ x!2 ~ x ~@2 x!2 ~@2 x ~@11", C: "x",
})).gain(0.16)

// drums · ht
const ht = s("ht").struct("<A ~@20 B ~@3 C ~@24 D ~@3 C ~@11 E ~@3 C ~@3 F ~@3 C ~@3 F ~>".pickRestart({
  A: "~@8 x!2 ~@2", B: "~@4 x!3 ~ x ~ x ~@5 x ~@7", C: "~@5 x ~@3 x ~@4 x ~ x ~ x ~@2 x ~@2",
  D: "~@4 x!3 ~ x ~ x ~@5 x ~ x ~@5", E: "~@3 x", F: "~@5 x ~@3 x ~@5 x!4 ~@2 x ~@2",
})).gain(0.4)

// drums · ht · soft notes
const ht_soft = s("ht").struct("<[~@14 x!2 ~@8] ~@20 [~@14 x!2 ~@2 x ~@5] ~@28 [~@14 x!2 ~@8] ~@33>").gain(0.16)

// drums · mt
const mt = s("mt").struct("<A ~@20 A ~@3 B ~@24 A ~@3 B ~@15 B ~@3 A ~@3 B ~@3 A ~>".pickRestart({
  A: "~ x", B: "x",
})).gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ A@20 B A@28 B A@15 ~ A@15 C ~>".pickRestart({
  A: "~@9 x ~ x ~@9 x ~ x", B: "~@9 x ~ x ~@12", C: "~@9 x ~ x ~@9 x ~@2",
})).gain(1.62)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~ A@20 ~ A@28 ~ A@15 B A@16 ~>".pickRestart({
  A: "x ~@8 x ~@2 x ~@7 x ~@3", B: "x",
})).gain(0.46)

stack(
  piano, bass, electric_guitar_clean, celesta, celesta_soft, rock_organ, string_ensemble_2, electric_guitar_muted,
  electric_guitar_clean_2, synth_brass_1, bass_2, kick, rim, snare, hihat, open_hat, crash, tambourine, ht, ht_soft, mt,
  cabasa, woodblocks
)