Strudelify

Wishing on a Star

The Cover Girls

KeyF minorTempo82 bpm
0:00/0:00
// Wishing on a Star — The Cover Girls
// 82 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 104 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(82/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@2 B@2 C@2 D@2 E@2 F@2 E@2 G@2 H I ~@2 H I ~@2 E@2 F@2 E@2 G@2 H I ~@2 H I ~@4 J K L M@2 N ~@2 J K L O@2 P Q R S T
  U E@2 F@2 E@2 G@2 H I ~@2 H I ~@2 V W V W V W ~@2 V W V W V W V W V W V W V W V W ~@2
>`.pickRestart({
  A: "[[f3,eb4]@16 ~@4 c3@4 [f3,d4,g4]@4 [c4,f4,ab4]@22 ~@6 [bb3,eb4,g4]@5 ~@3, ~@12 bb4 ~ f2@13 ~@5]/2", // F7 G7 Fm Eb
  B: "[[bb2,ab3,db4]@21 ~@3 f2@4 [bb2,ab3,db4,f4]@35 ~]/2", // Bbm7
  C: "[[f3,c4,eb4,f4,ab4]@16 ~@8 [f3,d4,g4]@4 [c4,f4,ab4]@22 ~@6 [bb3,eb4,g4]@5 ~@3, ~@24 bb4@2 ~@2 f2@25 ~@11]/2", // Fm7 G7 Fm Eb
  D: "[[bb2,ab3,db4,f4]@21 ~@3 f2@4 [bb2,ab3,db4,f4]@35 ~]/2", E: "[eb4@15 ~@9 [d4,g4,bb4]@3 ~ [c4,f4,ab4]@22 ~@14]/2",
  F: "[[bb2,ab3,db4]@21 ~@3 f2@4 ~@32 f4@4, ~@28 bb2@33 ~@3, ~@28 [ab3,db4,f4]@20 ~@8 eb4@7 ~, ~@44 f3@19 ~]/2", // Bbm7 Db
  G: "[[ab3,db4]@3 ~@3 [f2,eb4] db4 ~@4 bb4 db4 f4 bb4, bb2@5 db4@2 f4@7 ~@2, ~@12 f3@16 [bb2,bb3]@35 ~, ~@4 f3@3 ~, ~@9 db4@4 ~@3]/2", // Db5 F7 Bb
  H: "~@5 eb4@3", I: "~@3 ab5@5", J: "[bb3,db4,f4]@16 ~@4 [bb3,db4,f4]@11 ~", K: "eb4@9 ~@7",
  L: "[bb2,db4]@17 ~@3 [ab4,c5,eb5]@6 ~@6", // Bbm Ab
  M: "[[eb3,bb3]@10 ~@2 eb3@9 ~@3 [f3,eb4,ab4]@2 ~@2 [ab3,db4,f4]@14 ~@2 [ab3,db4]@8 bb2@4 [ab3,db4]@4 bb2@3 ~, ~@14 bb2@11 ~@7]/2", // Eb5 Fm7 Db Db5
  N: "~@12 [bb3,eb4,g4]@11 ~ [bb3,eb4,g4]@3 ~ [bb3,eb4,g4]@2 ~@2", // Eb
  O: "[[eb3,bb3]@10 ~@2 eb3@9 ~@3 [f3,eb4,ab4]@2 ~@2 [ab3,db4,f4]@14 ~@2 [ab3,db4]@8 [bb2,db4,f4,ab4]@7 ~ [bb2,db4,f4,ab4]@3 ~, ~@14 bb2@11 ~@7]/2", // Eb5 Fm7 Db Db5 Bbm7
  P: "~@12 [eb4,g4]@8 [eb4,g4]@3 ~ [bb3,eb4,g4]@3 ~ [bb3,eb4,g4]@2 ~@2, ~@12 bb3@11 ~@9, ~@20 bb4@9 ~@3", // Eb
  Q: "[ab3,db4,f4]@12 ~@4 [ab3,db4,f4] ~@7 bb2@6 ~@2, bb2@5 ~ bb2@4 [ab3,db4,f4]@5 ~", // Db
  R: "[bb3,eb4,g4]@12 ~@4 [bb3,eb4,g4] ~@3 [bb3,eb4,g4]@8 c3@4, c3@10 ~@2 c3@9 ~@11", // Eb
  S: "[ab3,db4,f4]@13 ~@3 [ab3,db4,f4] ~@7 bb2@7 ~, bb2@5 ~@5 [ab3,db4,f4]@5 ~", // Db
  T: "[eb2,eb3]@8 [f4,ab4,db5]@7 ~ [ab5,bb5,eb6]@8 [f4,ab4,db5]@8, ~@15 eb5@8 ~@9", // Eb Db Absus2 Db
  U: "[f3,ab3,db4]@8 [f4,ab4,db5]@7 ~ [ab5,bb5,eb6]@8 ~@8, ~@15 eb5@8 ~@9", // Db Absus2
  V: "[f3,c4,g4]@2 ~@6 [c4,eb4,g4] ~@5 [c4,eb4,g4] ~ f3 ~ [c4,eb4,g4] ~@5 [c4,eb4,g4] ~@5 [c4,eb4,g4] ~, eb4 ~@31", // Fsus2 Cm
  W: "[db4,f4]@2 [ab3,db4,f4]@3 ~@3 [ab3,db4,f4]@4 ~@2 [ab3,db4]@3 ~@3 [ab3,db4,f4]@4 bb2 ~ [ab3,db4,f4]@4 ~@2, [bb2,ab3] ~@31", // Db Db5 Db Bb7
})).s("gm_piano").gain(0.31)

// chords · piano · soft notes
const piano_soft = note(`<
  ~ A ~ B ~ C ~@3 D E B F D E G ~ H I ~@2 H I ~@2 D E B F D E G ~ H I ~@2 H I ~@5 J K L M N ~@3 J K L O N ~@2 P ~@2 D E
  B F D E G ~ H I ~@2 H I ~@3 Q ~ Q ~ Q ~@3 Q ~ Q ~ Q ~ Q ~ Q ~ Q ~ Q ~ Q ~@2
>`.pickRestart({
  A: "[c4,f4,ab4]@15 ~@17", B: "f4@21 ~@11", C: "~@5 c3 ~@2", D: "[f3,c4,f4,ab4]@4 ~ c3 ~@2",
  E: "~@24 [bb3,eb4,g4]@5 ~@3", F: "~@20 db4@11 ~, ~@8 ab3@7 ~", G: "~@8 bb3@5 ~@3, f4@21 ~@11", H: "~@5 [bb3,g4]@3",
  I: "~@3 f5@5", J: "g4@18 ~@2 [eb4,bb4]@9 ~@3, c4@29 ~@3", K: "[ab3,f4]@17 ~@15",
  L: "[eb4,g4]@10 ~@2 [bb3,eb4,g4]@9 ~@11", M: "~@12 f4@9 ~@3 f4@4 ~@4", N: "[bb3,eb4,g4]@11 ~@9 c3@10 ~@2, c3@9 ~@7",
  O: "~@3 f4@2 ~@3", P: "~@6 bb2@5 ~@5", Q: "~@6 bb2 ~@5 bb2 ~ f4@3 ~ bb2 ~@13",
})).s("gm_piano").gain(0.18)

// bass · fretless bass
const bass = note(`<
  ~@9 A@2 B@2 A@2 B@2 C D E F C G H I J ~@2 K A@2 B@2 C D E F C G H I L M N O P Q R S L M T U V W R X R Y Z AA ~ A@2 B@2
  A@2 B@2 C D E F C G H I AB AC AB AC AB AC ~@2 AB AC AB AC AB AC AB AC AB AC AB AC AB AC AB AC ~@2
>`.pickRestart({
  A: "[f1@11 ~ c2@3 ~ c2@7 ~ g2@4 f2@14 ~@2 f1@3 ~ c2@6 ~@2 f1@7 ~]/2",
  B: "[bb1@11 ~ f2@3 ~ f2@6 ~@2 c3@4 bb2@14 ~@2 bb1@3 ~ f2@6 ~@2 bb1@7 ~]/2", C: "c2@11 ~ c2@4 f1@8 c2@8",
  D: "bb1@11 ~ bb1@4 f1@8 [a2,bb2] [g2,ab2] [f2,gb2] [eb2,e2] [db2,d2] [b1,c2] [a1,bb1] [g1,ab1]", // Bbmaj7 Abmaj7 Gbmaj7 Emaj7 Dmaj7 Cmaj7 Bbmaj7 Abmaj7
  E: "c2@10 ~@2 c2@4 g1@8 g2@7 ~", F: "bb1@11 ~ bb1@4 f1@8 f2@4 eb2@2 db2@2", G: "bb1@5 ~ bb1@2 f1@4 bb1@4",
  H: "c2@5 ~ c2@2 g1@2 g2@2 c2@2 g1@2", I: "bb1@11 ~ bb1@4 bb1@4 ab1@4 g1@4 gb1@4", J: "f1@11 ~@21",
  K: "~@8 c3@2 bb2@2 ab2 bb2 ab2@2", L: "bb1@3 ~@25 c2@3 ~", M: "c2@3 ~@9 c2@7 ~ c2@4 d2@4 eb2@2 f2 ~",
  N: "bb1@10 ~@2 bb1@3 ~ bb1@15 ~", O: "c2@11 ~ c2@3 ~ bb2@3 ~ bb2@3 ~ eb2@2 f2@2 eb2@4",
  P: "bb1@11 ~ f1@4 bb1@11 ~ ab1@2 bb1@2", Q: "f1@10 ~@2 f1@3 ~ f2@3 ~ eb2@3 ~ c2@3 ~ f1@3 ~",
  R: "bb1@9 ~@3 ab1@3 ~ bb1@10 ~@2 bb1@3 ~",
  S: "c2@12 bb1@3 ~ c2@7 ~ [b2,c3] [a2,bb2] [g2,ab2] [f2,gb2] [eb2,e2] [db2,d2] c2 ~", // Cmaj7 Bbmaj7 Abmaj7 Gbmaj7 Emaj7 Dmaj7
  T: "bb1@10 ~@2 ab1@3 ~ bb1@4 bb1@7 ~ ab1@4", U: "c2@3 ~ c2@8 eb2@8 c2@8 [b1,c2] [a1,bb1] [g1,ab1] [f1,gb1]",
  V: "bb1@11 ~ f1@4 ab1@3 ~ bb1@7 ~ ab1@2 bb1@2", W: "f1@10 ~@2 f1@3 ~ f3@3 ~ eb3 ~ c3 ~ bb2@4 ab2@2 f2 ~",
  X: "c2@3 ~ c2@4 eb2@4 c2@11 ~ [b2,c3] [a2,bb2] [g2,ab2] [f2,gb2] [eb2,e2] [db2,d2] c2 ~", // Cmaj7 Bbmaj7 Abmaj7 Gbmaj7 Emaj7 Dmaj7
  Y: "c2@3 ~ c2@8 eb2@7 ~ c2@3 ~ f2@3 ~ eb2@2 c2 ~", Z: "bb1@9 ~@3 ab1@3 ~ bb1@10 ~@2 gb1@2 ab1@2", AA: "eb2@7 ~@9",
  AB: "f1@5 ~ f1@3 ~ f1@3 ab1@3", AC: "bb1@12 ~@2 ab1 ~ bb1 ~ ab1@2 bb1@3 ~ c2@4 eb2@2 f2@2",
})).s("gm_fretless_bass").gain(0.29).pan(0.6)

// other · pad new age
const pad_new_age = note("<~@9 A@2 B ~ C D E F ~@45 A@2 B ~ C D E F ~@34>".pickRestart({
  A: "[~@12 ab5@3 ~ g5@8 eb5@3 ~ f5@15 ~@21]/2", B: "~@6 eb5 ~ db5 ~@7", C: "~@6 ab5 ~ g5 ~ eb5 ~ c5 ~ f5 ~",
  D: "~@2 c6 ~@13", E: "~@6 eb5 db5 c5 bb4 ab4 f4 eb4 db4 c4 bb3", F: "ab3 ~@15",
})).s("gm_pad_new_age").gain(0.12).pan(0.4)

// other · pad new age · soft notes
const pad_new_age_soft = note("<~@11 A ~@4 B ~@47 A ~@4 B ~@34>".pickRestart({
  A: "~@9 c5 bb4 ab4 f4 eb4 db4 bb3", B: "~@2 f3 ~@13",
})).s("gm_pad_new_age").gain(0.06).pan(0.4)

// other · oboe
const oboe = note("<~@3 A@2 ~@2 B@2 ~@18 C D ~@2 E F@2 ~@23 G H G ~@24 I@2 ~@18>".pickRestart({
  A: "[~@12 f4@4 c4@8 ab3@4 bb3@35 ~]/2", B: "[~@8 f4@4 ab4@2 f4@2 db4@2 c4@5 ~ ab3@3 ~ bb3@27 ~@9]/2",
  C: "~@8 f5@3 eb5@3 db5@2, ~@15 eb5@2 ~@15", D: "c5@6 ab4@5 ~ f4@20", E: "~@4 bb5@3 ab5, ~@15 ab5@2 ~@15",
  F: "[g5@6 eb5@6 c5@4 eb5@8 f5@37 ~@3]/2", G: "c5@2 db5@2 c5@2 ab4@2 f4@4 c5@2 db5@2 c5@2 ab4@2 f4@4 c5@3 ~ ab4@3 ~",
  H: "bb4@3 g4@3 eb4 bb4", I: "[bb4@3 c5]/2",
})).s("gm_oboe").gain(0.25).pan(0.4)

// chords · pad warm
const pad_warm = note(`<
  ~@9 A@2 B@2 A@2 C@2 D E F G H E F E A@2 B@2 A@2 C@2 D E F G H E F E I ~ J K L M L K I ~ J K L M L K L K L N@2 A@2 B@2
  A@2 C@2 D E F G H E F E O ~ O ~ O ~ P Q O ~ O ~ O ~ O ~ O ~ O ~ O ~ O ~ O ~
>`.pickRestart({
  A: "[[f4,ab4,c5]@63 ~]/2", B: "[[db4,f4,bb4]@63 ~]/2", C: "[[f4,bb4,db5]@61 ~@3]/2", D: "[c4,eb4,g4]@15 ~",
  E: "[db4,f4,bb4]@31 ~", F: "[c4,eb4,g4]@31 ~", G: "[db4,f4,bb4]@15 ~", H: "[c4,eb4,g4]", I: "bb4 ~@15",
  J: "[bb4,db5,f5]", K: "[c5,eb5,g5]", L: "[f4,bb4,db5]", M: "[ab4,c5,eb5]", N: "[[eb3,eb4]@25 ~@7]/2", O: "ab4",
  P: "[c4,c5,eb5,g5]", Q: "[bb3,bb4,db5,f5]",
})).s("gm_pad_warm").gain(0.09).pan(0.6)

// chords · pad warm · soft notes
const pad_warm_soft = note(`<
  ~@41 A ~@4 B ~@2 A ~@4 B ~@23 C ~ C ~ C ~@3 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~
>`.pickRestart({
  A: "[f4,db5] ~@15", B: "f4", C: "[f4,c5,eb5]",
})).s("gm_pad_warm").gain(0.04).pan(0.6)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A@8 ~@4 B@4 C D C E C D C F ~@4 B@4 C D C E C D C F G ~ H I J K J I L@2 H I J K J I M N O P ~@5 B@4 C D C E C D C F
  Q R Q R Q R S T Q R Q R Q R Q R Q R Q R Q R Q R ~@2
>`.pickRestart({
  A: "f6/8", B: "[f5@107 ~ f5@3 ~ f5@3 ~ f5@3 ~ g5@3 ~ ab5@3 ~]/4", C: "bb5 eb6", D: "db6@12 eb6@2 db6 c6",
  E: "~@2 f5 ab5, db6@31 ~", F: "~ f5 ab5 bb5, db6@31 ~", G: "bb5 ~@15", H: "f5 ab5", I: "bb5", J: "f5@16 ab5@15 ~",
  K: "g5@8 ab5@4 g5@8 eb5@11 ~", L: "[bb4,bb5]/2",
  M: "c6 db6 c6 ab5 ~@2 c6 db6 [ab5,c6] ~ f5@2 c6@2 ab5@2, f5@4 f5@4 ~ ab5@5 ~@2", N: "~@3 g5@3 eb5 bb5, bb5@7 ~",
  O: "c6@2 db6@2 c6@2 ab5@2 ~@4 c6@2 db6@2 [ab5,c6]@2 ~@2 f5@4 c6@4 ab5@3 ~, f5@4 f5@4 ~ ab5@5 ~@2", P: "[eb5,eb6] ~@3",
  Q: "g5@10 ab5@3 bb5@3", R: "c6@3 ~@9 c6@3 ~@5 c6@3 ~@3 c6@3 ~@3", S: "g5", T: "f5",
})).s("gm_string_ensemble_1").gain(0.06).pan(0.7)

// chords · synth strings 1
const synth_strings_1 = note("<~@78 A B A B A B ~@2 A B A B A B A B A B A B A B A B A ~>".pickRestart({
  A: "[f4,ab4,c5,eb5,g5] ~@15", // Fm7
  B: "[bb4,f5]@2 ~@10 [bb4,f5]@2 ~@6 [bb4,f5,ab5]@2 ~@4 [bb4,f5,ab5,c6] ~@5, [ab5,c6] ~@11 [ab5,c6] ~@7 c6 ~@11", // Bb5 Bb7 Fm Ab
})).s("gm_synth_strings_1").gain(0.29).pan(0.4)

// other · ocarina
const ocarina = note(`<
  ~@17 A B A B A B A B ~@8 A B A B A B A B ~@2 B A B A B A ~@2 B A B A B A B A B ~@10 A B A B A B A B ~@26
>`.pickRestart({
  A: "eb5 c5 ~ bb4 g4 f4 ~ eb4 c4 eb4 ~ f4 g4 bb4 ~ c5 eb5 c5 ~ bb4 ~@3 eb4 c4 eb4 ~ f4 g4 bb4 ~ c5",
  B: "db5 c5 ~ ab4 f4 db4 ~@2 bb3 ~@2 db4 f4 ab4 ~ c5 db5 c5 ~ ab4 f4 db4 ~ c4 bb3 c4 ~ db4 ~ ab4 ~ c5",
})).s("gm_ocarina").gain(0.11).pan(0.3)

// other · ocarina · soft notes
const ocarina_soft = note(`<
  ~@17 A B A B A B A B ~@8 A B A B A B A B ~@2 B A B A B A ~@2 B A B A B A B A B ~@10 A B A B A B A B ~@26
>`.pickRestart({
  A: "~@20 g4 f4 ~@10", B: "~@7 c4 ~ c4 ~@18 f4 ~@3",
})).s("gm_ocarina").gain(0.05).pan(0.3)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@41 A B ~@6 A B ~@19 B C B C B D E C F G F G F G ~@2 F G F G F G F G F G F G F G F G H ~
>`.pickRestart({
  A: "[bb4,db5,f5] ~@27 [c5,eb5,g5]@2 ~@2", B: "[c5,eb5,g5] ~@15", C: "[bb4,db5,f5] ~@15", D: "[bb4,db5,f5] db5@15",
  E: "[c5,eb5,g5] [c5,g5,bb5]@15", F: "[f4,c5,eb5,g5] ~@15", G: "[bb4,db5,f5,ab5] ~@15",
  H: "[f4,c5,eb5,g5] [f4,c5,eb5,g5]@15", // Cm
})).s("gm_synth_brass_1").gain(0.21).pan(0.4)

// chords · synth brass 1 · soft notes
const synth_brass_1_soft = note(`<
  ~@42 A ~@7 A ~@19 B C B C B D E C F ~ F ~ F ~@3 F ~ F ~ F ~ F ~ F ~ F ~ F ~ F ~@3
>`.pickRestart({
  A: "~ [c5,eb5,g5]@7", B: "~ [c5,eb5,g5]@15", C: "~ [bb4,db5,f5]@15", D: "~ [bb4,f5]@15", E: "~ eb5@15",
  F: "~ [f4,c5,eb5,g5]@15", // Cm
})).s("gm_synth_brass_1").gain(0.02).pan(0.4)

// other · woodblock
const woodblock = note(`<
  ~@10 A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~ A ~ B ~ C ~ D ~ E ~ B ~ C ~ D ~ E ~ B ~ C ~ D ~ C ~@4 A ~ B ~ C ~
  D ~ A ~ B ~ C ~ D ~@26
>`.pickRestart({
  A: "~@18 db4 ~ eb4 ~ db4 ~ eb4 ~@3 bb3@2 ~@2", B: "~@18 db4 ~ eb4 ~ db4 ~ bb3 ~ bb3 ~ db4 ~@3",
  C: "~@18 db4 ~ eb4 ~ db4 ~ eb4 ~ db4 ~ bb3@2 db4@2", D: "~@18 db4 ~ eb4 ~ db4 ~ db4 ~@3 bb3 ~@3",
  E: "~@20 eb4 ~ db4 ~ eb4 ~ db4@2 bb3@2 ~@2",
})).s("gm_woodblock").gain(0.13).pan(0.6)

// other · orchestra hit
const orchestra_hit = note("<~@17 A B ~@2 C D ~@10 A B ~@2 C D ~@31 A B A B C D C D ~@26>".pickRestart({
  A: "bb4@9 ~@7", B: "db5 ~", C: "bb4@5 ~@3", D: "db5@3 ~",
})).s("gm_orchestra_hit").gain(0.06).pan(0)

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

// drums · rim
const rim = s("rim").struct("<~@25 [~ x ~ x] ~ [~ x ~ x] [~@9 x!3 ~ x ~@2] ~@75>").gain(0.5)

// drums · snare
const snare = s("sd").struct(`<
  ~@9 A@11 B A@3 C ~@4 A@7 B A@3 C B D A B A@3 E B D A B F A G H I B I ~@2 A@11 B A@3 C J K J L J M ~@2 J N J L J K J L
  J K J L J K J L ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~", C: "~@8 x ~@3 x ~@3 x ~@6 x!2 ~ x ~ x ~@3", D: "~@3 x",
  E: "~@8 x ~@3 x ~@3 x ~ x ~ x ~@2 x!2 ~ x ~ x ~@3", F: "~@4 x ~@7 x ~ x!2", G: "~@4 x ~@2 x ~@4 x ~@3",
  H: "~@4 x ~@3 x ~@3 x ~@3 x ~ x ~@4 x!2 ~ x ~ x ~@3", I: "~@4 x ~@2 x ~@4 x ~ x!2", J: "~@4 x ~@4 x ~@2 x ~@2 x",
  K: "~@4 x ~@2 x ~ x ~ x!2 ~ x!2", L: "~@8 x ~@5 x!3 ~ x ~@3 x!3 ~@3 x ~ x ~", M: "~@4 x ~@2 x ~ x ~@2 x ~ x ~",
  N: "~@4 x ~@2 x ~ x ~@2 x ~@3",
})).gain(0.5)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@24 A ~@7 B ~@7 A ~@3 C ~@3 A ~@3 C ~@3 A ~@20 A ~ D ~@11 D ~@3 D ~@3 D ~@4
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@9 x!3 ~ x!3", C: "~@7 x ~@8", D: "~@23 x ~@8",
})).gain(0.25)

// … 29 more lines