Strudelify
Lady in Red cover art

1986 · Into The Light

Lady in Red

Chris de Burgh

KeyB♭ majorTempo77 bpm
0:00/0:00
// Lady in Red — Chris de Burgh
// 77 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(77/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.

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@2 A B A C D E F G H E F I J K L M N O P Q R S T@2 U V W X Y Z A AA A AB AC AD F G H AE F I AF AG AH M N O P Q R S
  T@2 U V W X Y AI AJ X Y AK A AA A AB A AA A AB AL@2 ~@2
>`.pickRestart({
  A: "bb1 ~ bb1!2 f1 g1 bb1@6 d1@4", B: "eb1@5 ~ eb1@4 f1@6", C: "eb1@4 ~@2 eb1@4 f1 ~ f1@4", D: "bb1@6 f1 d1 eb1@8",
  E: "f1@5 ~ f1 eb1 d1@4 gb1@4", F: "g1@7 g1 g1@4 f1@4", G: "eb1@7 bb1 eb2@3 bb1 eb2 f2@3",
  H: "bb1@6 f1 d1 eb1@6 eb1@2", I: "eb1@7 bb1 eb2 f2 eb2@4 bb1 g1", J: "c2@7 g1 c2 ~ c2@6",
  K: "f1@7 f1!2 ~ f1@4 f1 gb1", L: "g1@6 ~ g1 g1@5 ~ d2 g2", M: "f2@5 ~ f2@2 eb2@4 eb2@4", N: "bb1@3 bb1 d2@3 d2",
  O: "eb2@5 ~ eb2@2 f2@6 f2@2", P: "g2@6 g2@4 d2 d3 a2@4", Q: "g2@6 g2@2 g2@2 ~ d2 d2@3 bb1",
  R: "c2@6 c2 ~ c2@6 f1 eb1", S: "f1@5 ~ f1!2 f1@5 ~ f1!2",
  T: "[bb1@6 bb1@2 d2@2 f2!2 c3@2 bb2@4 ab2@2 f3@2 d3@4 bb2 f2 d2@3 bb1]/2", U: "eb2@6 eb2 ~ eb2@6 bb1 g1",
  V: "gb1@6 a1 ~ d2@6 gb2 ~", W: "g2@6 g2 ~ f2@6 f2 ~", X: "e2@3 d2", Y: "c2@13 ~ eb1 e1",
  Z: "f1@6 f1@2 f1 ~ f1@4 f1!2", AA: "eb1@5 ~ eb1@4 f1@4 f1 g1", AB: "eb1@4 ~@2 eb1@4 f1 ~ f1@3 f1",
  AC: "bb1@6 f1 d1 eb1@6 eb1!2", AD: "f1@5 ~ f1 eb1 d1@3 d1 gb1@3 gb1", AE: "f1@5 ~ f1 eb1 d1@6 gb1@2",
  AF: "c2@7 g1 c2@8", AG: "f1@6 f1 ~ f1@5 f1 f1@2", AH: "g1@6 ~ g1!2 ~ g1@3 ~ d2 g2", AI: "f1@6 f1@2 f1 ~ f1@4 f2@2",
  AJ: "g2@6 g2 ~ f2@6 f2!2", AK: "f1@6 f1@2 f1@6 f1!2", AL: "bb1/2",
})).s("gm_synth_bass_2").gain(0.64)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~@2 A B A B C D E F C D G H I J K L M N O K P Q A R S T U V P Q A B A B C D E F C D G H I J K L M N O K P Q A R S T U
  V P Q U V P Q A B A B A B A B W@2 ~@2
>`.pickRestart({
  A: "[bb2,f3,bb3,d4]", B: "[eb2,g3,d4]@5 [f2,f3,c4]@3, bb3", C: "[bb2,f3] [eb2,g3], [bb3,d4]",
  D: "[f2,g3,a3] [d3,gb3,a3], c4", E: "[g2,d3,g3,bb3]@3 [f2,f3,a3]", F: "[eb2,eb3,g3,bb3]",
  G: "[g2,d3,g3,bb3]@3 [f2,ab3,bb3,d4]", H: "[eb2,g3,bb3,eb4]", I: "[c3,g3,c4,eb4]", J: "[f2,a3,c4,eb4]",
  K: "[g2,g3,bb3,d4]", L: "[f2,a3,c4,f4]", M: "[bb2,bb3] [d3,a3], [f3,d4]", N: "[eb3,g3,bb3,eb4] [f3,a3,c4,f4]",
  O: "[g3,bb3,d4,g4]@3 [f3,a3,c4,f4]", P: "[c3,eb3,g3,c4]", Q: "[f2,f3,a3,c4]", R: "[bb2,f3,ab3,d4]",
  S: "[eb3,g3,bb3,eb4]", T: "[gb3,a3,c4,d4]", U: "g3 f3, bb3", V: "e3@3 d3, [g3,bb3]", W: "[bb2,f3,bb3,d4]/2",
})).s("gm_synth_strings_1").gain(0.24)

// other · pad new age · "FANTASIA"
const pad_new_age = note("<~@32 A B C@2 D E F@2 G E G H@2 E G I ~@18 A B A B A B A B ~@4>".pickRestart({
  A: "bb4 ~@2 bb4 ~@2 bb4 ~@9", B: "bb4 ~@2 bb4 ~@2 bb4 ~@2 bb4 ~@6",
  C: "[bb4 ~@2 bb4 ~@2 bb4 ~@9 bb4 ~@2 bb4 ~@2 bb4 ~@2 bb4 ~@6, ~@3 bb5@13]/2", D: "d6@15 ~", E: "c6",
  F: "[bb5@31 ~]/2", G: "d6", H: "bb5/2", I: "f6",
})).s("gm_pad_new_age").gain(0.27).pan(0.3)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@17 A B C D C E F D C G H I J E F K L M N ~@11 A B C D C E F D C G H D J E F O I E P K L M N K L M N ~@4
>`.pickRestart({
  A: "~@15 bb3", B: "~ bb3 g3 ~ bb3@2 g3 ~@6 f3 g3 bb3", C: "~ bb3 g3 ~ bb3@2 g3 ~@8 bb3",
  D: "~ bb3 g3 ~ bb3@2 g3 ~@5 c4 bb3@2 ~", E: "~ bb3 g3 ~ bb3@2 g3 ~@8 f3", F: "~ f3 c3 ~ f3@2 d3 ~@8 bb3",
  G: "~ bb3 g3 ~ bb3@2 g3 ~@8 a3", H: "~ a3 gb3 ~ a3@2 d3 ~@8 bb3", I: "~ bb3 g3 ~ bb3@2 g3 f3 ~@7 bb3",
  J: "~ bb3 g3 ~ bb3@2 g3 f3 ~@4 bb3 g3 ~@2", K: "~ bb3 g3 ~ bb3@2 g3 ~ bb3 ~ c4 bb3 ~@3 bb3",
  L: "~ bb3 g3 ~ bb3@2 g3 ~ f3 ~ g3 f3 ~ g3 ~ bb3", M: "~ bb3 g3 ~ bb3@2 g3 ~ bb3 ~ c4 bb3 ~@2 g3 bb3",
  N: "~ bb3 g3 ~ bb3@2 g3 ~ f3 ~ g3 f3 ~ g3 ~@2", O: "~ bb3 g3 ~ bb3@2 g3 ~@5 c4 bb3 g3 ~", P: "~ f3 c3 ~ f3@2 d3 ~@9",
})).s("gm_electric_guitar_muted").gain(0.27).pan(0.3)

// other · electric guitar muted · "MUTED GTR" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@18 A@5 B A@3 B A C A B A@2 D A ~@12 A@2 E A@2 B A@3 B E C A B F A@2 B A@2 D A@3 D A ~@4
>`.pickRestart({
  A: "~@3 f3 ~@12", B: "~@3 d3 ~@12", C: "~@3 f3 ~@10 f3 ~", D: "~@3 f3 ~@3 f3 ~@8", E: "~@3 f3 ~@7 g3 ~@4",
  F: "~@3 f3 ~@7 g3 ~@3 f3",
})).s("gm_electric_guitar_muted").gain(0.13).pan(0.3)

// drums · kick
const kick = s("bd").struct("<[x ~@5 x ~ x ~@6 x]!77 x>").gain(0.6)

// drums · rim
const rim = s("rim").struct("<~@18 [~@3 x]!14 ~@16 [~@3 x]!29 ~>").gain(0.53)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!77 ~>").gain(0.53)

// drums · hihat
const hihat = s("hh").struct(`<
  A@3 B A@5 B A B A@3 B A@5 B A B A@4 B A B A@2 B A@5 B A B A@3 B A@5 B A B A@4 B A B A B A B A@2 B A@3 B A@3 B A C
>`.pickRestart({
  A: "x!16", B: "x!14 ~@2", C: "x",
})).gain(0.23)

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

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

// drums · ride
const ride = s("rd").struct(`<
  A ~ B A@2 ~ A@5 ~ A ~@2 A@2 ~ A ~@2 A@2 ~@2 A@2 ~@2 A@2 ~ B A@2 ~ A@5 ~ A ~@2 A@2 ~ A ~@2 C A ~@2 C A ~@2 C A ~@2 C D
  E A ~@2 C A ~@2 C A ~ A ~
>`.pickRestart({
  A: "~@3 x", B: "~ x ~@2", C: "~@6 x!2", D: "~@12 x ~ x!2", E: "x",
})).gain(0.3)

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  A ~ B A@2 ~ A@5 ~ A ~@2 A@2 ~ A ~@2 A@2 ~@2 A@2 ~@2 A@2 ~ B A@2 ~ A@5 ~ A ~@2 A@2 ~ A ~@3 A ~@3 A ~@3 A ~@5 A ~@3 A
  ~@3 A ~ A ~
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4",
})).gain(0.23)

// drums · tambourine
const tambourine = s("tb").struct("<~@18 [~ x ~@2]!14 ~@16 [~ x ~@2]!29 ~>").gain(0.68)

// drums · congas
const congas = s("conga:13").struct("<[~@2 x!2 ~@12]!77 ~>").gain(1.2)

// drums · congas
const congas_2 = s("conga:18").struct("<[~@6 x ~@6 x!2 ~]!77 ~>").gain(1.2)

// drums · congas
const congas_3 = s("conga:33").struct("<[~@11 x ~@4]!77 ~>").gain(1.2)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!8]!32 [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!45 x>").gain(1.14)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<[~@3 x ~@3 x ~@3 x ~@3 x]!32 ~@46>").gain(0.76)

// drums · shaker
const shaker = s("sh").struct("<[~ x ~@3 x ~@3 x ~@3 x ~@2]!77 ~>").gain(0.23)

stack(
  bass, synth_strings_1, pad_new_age, electric_guitar_muted, electric_guitar_muted_2, kick, rim, snare, hihat, open_hat,
  crash, ride, ride_soft, tambourine, congas, congas_2, congas_3, cabasa, cabasa_soft, shaker
)

More by Chris de Burgh