Strudelify
Waiting for a Girl Like You cover art

4

Waiting for a Girl Like You

Foreigner

KeyB♭ minorTempo102 bpm
0:00/0:00
// Waiting for a Girl Like You — Foreigner
// 102 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 7 "WARM PAD" pad warm (copy of ch 5 "WARM STRINGS" string ensemble 2)
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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 · "PIANO 1"
const piano = note(`<
  ~@5 A@4 B@2 C@2 D@8 E@4 F@4 G@8 H@2 I J@3 I K H@2 I L H@2 I K M@8 N@8 G@8 O@2 I L H@2 I K H@2 I L H@2 I K M@8 P@8 Q@8
>`.pickRestart({
  A: "[[bb3,db4,f4]@6 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4]@2]/4", // Bbm Ab Bbm Ab
  B: "[[bb3,db4,f4]@6 [bb3,db4,f4] [ab3,c4,eb4]@8 [ab3,c4,eb4]]/2", // Bbm Ab
  C: "[[bb3,db4,f4]@6 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4]@2]/2", // Bbm Ab
  D: "[[bb3,db4,f4]@6 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] c4@7 c4@2, ~@55 [ab3,eb4]@9]/8", // Bbm Ab Bbm Ab Bbm Ab Bbm Ab5
  E: "[[f3,ab3,c4]@6 [f3,ab3,c4] [eb3,g3,bb3]@7 [eb3,g3,bb3] [f3,ab3,c4]@7 [f3,ab3,c4] [eb3,g3,bb3]@7 [eb3,g3,bb3]@2]/4", // Fm Eb Fm Eb
  F: "[[f3,ab3,c4]@6 [f3,ab3,c4] [eb3,g3,bb3]@7 [eb3,g3,bb3] [f3,ab3,c4]@7 [f3,ab3,c4] [eb3,g3,bb3]@4 [f3,a3,c4,d4]@5]/4", // Fm Eb Fm Eb Dm7
  G: "[[bb3,db4,f4]@6 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@9]/8", // Bbm Ab Bbm Ab Bbm Ab Bbm Ab
  H: "[bb3,eb4,gb4]/2", I: "[b3,eb4,gb4]", J: "[bb3,eb4,gb4]/3", K: "[ab3,b3,eb4]", L: "[bb3,eb4,gb4]",
  M: "[[bb3,db4,f4]@6 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]]/8", // Bbm Ab Bbm Ab Bbm Ab Bbm Ab …
  N: "[~@6 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [f3,ab3,c4]@7 [f3,ab3] [eb3,g3,bb3]@7 [eb3,g3,bb3] [f3,ab3,c4]@7 [f3,ab3,c4] [eb3,g3,bb3]@4 [f3,a3,c4]@5]/8", // Bbm Ab Bbm Ab Fm Eb Fm Eb …
  O: "[bb3,eb4,gb4,bb4]/2", // Ebm
  P: "[~@6 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]@7 [bb3,db4,f4] [ab3,c4,eb4]@7 [ab3,c4,eb4] [bb3,db4,f4]]/8", // Bbm Ab Bbm Ab Bbm Ab Bbm Ab …
  Q: "[~@12 [bb3,db4,f4]@2 [ab3,c4,eb4]@14 [ab3,c4,eb4]@2 [bb3,db4,f4]@14 [bb3,db4,f4]@2 [ab3,c4,eb4]@14 [ab3,c4,eb4]@2 [bb3,db4,f4]@14 [bb3,db4,f4]@2 [ab3,c4,eb4]@14 [ab3,c4,eb4]@2 [bb3,db4,f4]@33 ~]/8", // Bbm Ab Bbm Ab Bbm Ab Bbm
})).s("gm_piano").gain(0.72).pan(0.3)

// chords · piano · "PIANO 1 RIFFS"
const piano_2 = note("<~@9 A@2 B@3 ~@39 A@2 B@3 ~@35 A@2 C@20 ~@2>".pickRestart({
  A: "[~@7 eb5, db6 c6 bb5 ab5 bb5 ab5 f5 ~, ~ db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 ~]/2",
  B: "[~@15 db5@2 ~@7, db6 c6 bb5 ab5 bb5 ab5 f5 eb5 ~@4, ~ db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 ~@9]/3",
  C: "[~@15 eb5, db6 c6 bb5 ab5 bb5 ab5 f5 eb5 db6 c6 bb5 ab5 bb5 ab5 f5 ~, ~ db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 db5@2 ~]/4",
})).s("gm_piano").gain(0.72)

// other · piano · "PIANO 1 LO" · Bb
const piano_3 = note("<~@57 [~ [bb1,bb2] ~ [bb1,bb2]]!8 ~@52>").s("gm_piano").gain(0.72).pan(1)

// chords · string ensemble 2 · "WARM STRINGS"
const string_ensemble_2 = note(`<
  A@8 B C D@2 E F B G@8 H@2 ~ I J@2 ~ K L K L K M@2 N@2 O P@3 Q R S@2 T U@3 Q V W X Y Z AA@8 AB@5 AC AD AE AF AG AH AI
  AJ@2 AK AL@3 AM V AN@2 Q AO@3 AP AQ AR AS C E C AT C AU C AU C AU C X C AS C AT C AS C AU AV@2
>`.pickRestart({
  A: "[~@40 bb4@7 ab4@9 bb4@8, f5@5 f5@3, ~@8 eb5@39 ~@17, ~@16 c6@23 ~@25, ~@24 bb5@39 ~]/8", B: "ab4",
  C: "db6 c6 bb5 ab5, [bb4,f5]@15 ~", D: "[bb5 ab5 f5 eb5 db6 c6 bb5 ab5, ab4@5 ~@3, ~@4 g5 ~@11]/2",
  E: "bb5 ab5 f5 eb5, ab4@15 ~", F: "bb4@7 ~", G: "[bb4@8 ab4@8 bb4@8 ab4@8 bb4@8 ab4@7 ~ f4@7 eb4@9, f5]/8",
  H: "[f4@7 eb4@8 ~]/2", I: "eb4", J: "[~@7 eb4@4 f4@4 ~]/2", K: "ab5", L: "bb5",
  M: "[[f5,bb5]@7 ab5@8 ~, ~@7 f5@3 ~@6]/2", N: "[eb5,gb5]/2", O: "eb5, b4@7 ~",
  P: "[eb5, bb4@23 ~, bb5@7 ~, ab5 ~@11]/3", Q: "[b4,eb5,gb5]@7 ~", R: "[ab4,b4,eb5]@3 ~, gb4 ~@7",
  S: "[~@3 eb5, eb5@5 gb5@3, ~@3 bb4@27 ~@2, ~@8 bb5@7 ~]/2", T: "[gb5,b5]@7 ~, eb5", U: "[[bb4,eb5,gb5]@23 ~]/3",
  V: "[ab4,b4,eb5]@7 ~", W: "db6 c6 bb5 ab5, [bb4,f5]", X: "bb5 ab5 f5 eb5, f4@15 ~, ab4@13 ~@3", Y: "db6 c6 bb5 ab5",
  Z: "bb5 ab5 f5 eb5, c5, ab4@7 ~", AA: "[bb4@8 ab4@8 ~@8 ab4@8 bb4@8 ab4@8 bb4@8 ab4@7 ~, f5]/8",
  AB: "[~@17 eb5 ab5 eb5, f4@15 ~ [bb4,bb5]@4, ~@31 f5@49]/5", AC: "~@3 eb5, ab4, ab5!2, ~ eb5@2 ~",
  AD: "~ eb5 ab5 eb5, bb4, f5@7 ~", AE: "eb5@4 ~@7 eb5@4 ~, ab4, ab5!2, ~@4 eb5@7 ~@5",
  AF: "~@4 eb5@3 ab5@4 ~ eb5@4, bb4, f5@7 ~", AG: "eb5 ~@2 eb5, ab4, ab5@4 ab5@3 ~, ~ eb5@2 ~",
  AH: "~@4 eb5@3 ab5@4 ~ eb5@4, [bb4,bb5], f5@7 ~", AI: "ab4@7 ~, eb5@3 ~, ab5@5 ~@3",
  AJ: "[~@2 bb5 ~@13, [eb5,gb5], bb4@15 ~]/2", AK: "[b4,eb5]@7 ~, gb5", AL: "[eb5,gb5]/3", AM: "[b4,eb5], gb5@7 ~",
  AN: "[[bb4,gb5]@15 ~, eb5]/2", AO: "[[eb5,gb5], bb4@23 ~]/3", AP: "[eb5,gb5]@7 ~, b4", AQ: "[ab4,b4], eb5@3 ~",
  AR: "db6 c6 bb5 ab5, f5@15 ~", AS: "bb5 ab5 f5 eb5, ab4@7 ~", AT: "bb5 ab5 f5 eb5, [f4,ab4]@15 ~",
  AU: "bb5 ab5 f5 eb5, ab4@13 ~@3", AV: "[bb4@7 ~]/2",
})).s("gm_string_ensemble_2").gain(0.48).pan(0)

// chords · string ensemble 2 · "WARM STRINGS" · soft notes
const string_ensemble_2_soft = note(`<
  A B@8 ~ C D E F@2 ~@10 C ~ G ~ H ~@2 I J ~@3 K@2 L M@3 N ~ O P Q R S@2 ~@4 D ~@3 T ~@11 U ~ U ~@6 V@3 ~@10 W X ~ X ~@3
  E ~ E ~ E ~@3 E ~@3 E ~ E G ~
>`.pickRestart({
  A: "~@5 f4@11", B: "[~@9 f4@23, ~ eb4@63 ~@64, ~@17 c5@55 ~@56, ~@33 bb4@31 ~@64]/8", C: "f4", D: "[bb4,f5]",
  E: "f4@15 ~", F: "f5/2", G: "f4@7 ~", H: "db5 bb5@3", I: "~@3 f5@5", J: "f5", K: "[[bb4,bb5]@15 ~]/2",
  L: "[gb5,b5]@7 ~", M: "[~ gb5@5]/3", N: "b5@7 ~", O: "~@3 bb5@5, [bb4,ab5] ~@3, ~ gb5@7", P: "~ gb5 ~@5 b4",
  Q: "b4@7 ~", R: "~@3 bb5@5", S: "[bb5@15 ~]/2", T: "bb4", U: "bb5", V: "[bb4@23 ~]/3", W: "bb4@15 ~", X: "f4@13 ~@3",
})).s("gm_string_ensemble_2").gain(0.24).pan(0)

// bass · electric bass finger · "FINGER BASS"
const bass = note(`<
  ~@5 A B A B A B A B C@5 D C@2 E F E F E@3 G H I H I J@2 K@2 F@2 L F@3 L I F@2 L M F@2 N O A B A B P C D@2 P C@2 D E F
  Q@2 H I R I R I S T F@2 L M F@2 L I F@2 L F@3 L U V W ~ X ~ W Y ~ Y Z AA AB ~ W V AC Y AC Y AC Y AD ~@2
>`.pickRestart({
  A: "bb1@3 eb2 f2 bb2@2 eb2", B: "f2 db2 eb2@2 f1@3 f1", C: "bb1@2 ~ bb1 bb1@2 ~ bb1", D: "bb1@3 bb1 bb1@2 ~ bb1",
  E: "f2@2 ~ f2 f2@2 ~ f2", F: "eb2@2 ~ eb2 eb2@2 ~ eb2", G: "f2@2 ~ f2 f1@2 ~ f1", H: "gb1@2 ~ gb1 gb1@2 ~ gb1",
  I: "ab1@2 ~ ab1 ab1@2 ~ ab1", J: "[gb1@2 ~ gb1 gb1@2 gb1 ab1@3 ~ ab1 ab1@2 ~ ab1]/2",
  K: "[gb1@3 gb1 gb1@2 gb1 ab1@4 ab1 ab1@3 ~]/2", L: "b1@2 ~ b1 b1@2 ~ b1", M: "eb2@3 eb2 eb2@2 ~ eb2",
  N: "b1@3 b1 b1@2 ~ b1", O: "ab1@2 ~ ab1 ab1@2 bb1@2", P: "bb1@2 ~ bb1 bb1@3 bb1",
  Q: "[f2@2 ~ f2 f2@2 f2 eb2@3 ~ f1@5]/2", R: "gb1@3 gb1 gb1@2 ~ gb1", S: "gb1@2 ~ gb1 gb1@2 ~ ab1",
  T: "ab1@3 ab1 ab1@2 ~ ab1", U: "ab1@2 ~ ab1!3 bb1@2", V: "bb1@3 ~@5", W: "f2 ~ eb2@2 ~@4", X: "~@2 eb2@2 f1@3 ~",
  Y: "~@5 bb2@2 ~", Z: "~ eb2 f1 ~", AA: "~@4 f2 bb2@2 ~", AB: "f2 ~@7", AC: "~@2 eb2@2 ~@3 f1", AD: "~ eb2 ~@2",
})).s("gm_electric_bass_finger").gain(0.56).pan(0.4)

// bass · electric bass finger · "FINGER BASS" · soft notes
const bass_soft = note("<~@93 A B C D C B E F E D G H C I A J E J E K E L M@2>".pickRestart({
  A: "~@3 eb2 f2 bb2@2 eb2", B: "~ db2 ~@2 f1@3 f1", C: "bb1@3 eb2 f2 bb2@2 eb2", D: "f2 db2 ~@5 f1",
  E: "bb1@3 eb2 f2 ~@2 eb2", F: "f2 db2 eb2@2 f1@2 ~ f1", G: "bb1@3 eb2 ~@3 eb2", H: "~ db2 eb2@2 f1@2 ~ f1",
  I: "~ db2 ~@2 f1@2 ~ f1", J: "f2 db2 ~@2 f1@2 ~@2", K: "f2 db2 ~@2 f1@3 ~", L: "f2 db2 ~@2 f1@3 f1", M: "bb1/2",
})).s("gm_electric_bass_finger").gain(0.32).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@5 [x ~@2 x!2 ~@2 x]!110 ~@2>").gain(0.8).pan(0.4)

// drums · snare
const snare = s("sd").struct("<~@5 [~ x ~ x]!31 ~ [~ x ~ x]!39 ~ [~ x ~ x]!38 ~@2>").gain(0.8).pan(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@4 A B@31 ~ B@39 ~ B@38 C ~>".pickRestart({
  A: "x!4", B: "x!8", C: "x",
})).gain(0.4).pan(0.4)

stack(piano, piano_2, piano_3, string_ensemble_2, string_ensemble_2_soft, bass, bass_soft, kick, snare, hihat)

More by Foreigner