Strudelify
Summer Night City cover art

Voulez-Vous

Summer Night City

ABBA

KeyD minorTempo132 bpm
0:00/0:00
// Summer Night City — ABBA
// 132 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 8 "Fretless Bass" fretless bass (copy of ch 1 "Synth Bass 1" synth bass 1)
// note: Full arrangement: all 122 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: The whole transcription plays 27 ms ahead of the beat; the grid follows it, so its parts stay together.
setcpm(132/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order, A@4 for four bars: edit a riff to change every repeat.

// bass · synth bass 1
const bass = note(`<
  ~@4 A B A C A B A C A B A C A D E A@2 D E A F G F H F G F H I J K I@2 J K I J E K I L A B A C A B A C A D E A@2 D E A
  F G F H F G F H I J K I@2 J K I@2 J K I@2 J K I J E K I L A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B
  A C
>`.pickRestart({
  A: "d2 d3 d2 d3 d2 d3 d2 d3", B: "d2 d3 d2 d3 g2 a2 c3 d3", C: "d2 d3 d2 d3 f2 g2 c2 d2",
  D: "bb1 bb2 bb1 bb2 bb1 bb2 bb1 bb2", E: "c2 c3 c2 c3 c2 c3 c2 c3", F: "d2 d3 d2 d3 c2 c3 c2 c3",
  G: "bb1 bb2 bb1 bb2 g1 g2 g1 g2", H: "bb1 bb2 bb1 bb2 a1 a2 a1 a2", I: "g2 g3 g2 g3 g2 g3 g2 g3",
  J: "eb2 eb3 eb2 eb3 eb2 eb3 eb2 eb3", K: "f2 f3 f2 f3 f2 f3 f2 f3", L: "g2 ~@7",
})).s("gm_synth_bass_1").gain(0.27)

// other · brass section · "Brass 1"
const brass_section = note("<~@24 A B C D E F G ~@30 A B C D E F G ~@54>".pickRestart({
  A: "gb4 ~@2 c4 ~@2 d4 ~@2 gb4 ~@5 c4 ~@2 d4 ~@2 gb4 ~@2", B: "g4 ~@2 c4 ~@2 d4@2 ~ g4 ~@5 c4@2 ~ d4 ~@2 g4@2 ~",
  C: "a4 ~@2 d4@2 ~ gb4 ~@2 a4 ~@5 d4 ~@2 gb4 ~@2 a4 ~@2",
  D: "bb4 ~@2 d4 ~@2 gb4 ~@2 bb4 ~@2 a4 ~@2 g4 ~@2 gb4 ~@2 eb4@2 ~",
  E: "d4@2 ~ gb4 ~@2 c4 ~@2 d4@2 ~@4 c4 ~@2 d4 ~@2 gb4 ~@2", F: "g4 ~@2 bb4 ~@2 d4 ~@2 g4 ~@5 c4 ~@2 d4@2 ~ bb4 ~@2",
  G: "a4 ~@2 c5 ~@2 gb4 ~@2 a4 ~@2 d4 ~@2 gb4@2 ~ c4@2 ~ gb4 ~@2",
})).s("gm_brass_section").gain(0.27).pan(0.2)

// other · synth strings 1 · "Synth Strings"
const synth_strings_1 = note(`<
  ~@9 A ~ B ~ A ~ C ~ D@2 E@2 D@2 F@2 G H I H G H I ~@3 J@2 ~@2 K@2 ~@2 J@2 ~ L@2 B ~ M@2 N@2 O@2 E@2 D@2 F@2 G H I H G
  H I ~@3 P@2 ~@2 P@2 ~@2 P@2 ~@2 J@2 ~@2 K@2 ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B
>`.pickRestart({
  A: "~@4 [g3,g4] [a3,a4] [c4,c5] [d4,d5]", B: "~@4 [g3,g4] [a3,a4] [c3,c4] [d3,d4]",
  C: "~@12 [g3,g4]@2 ~ [a3,a4]@3 [c3,c4]@3 [d3,d4]@3", D: "[~@4 [g3,g4] [a3,a4] [d4,d5] [c4,c5]@5 ~@4]/2",
  E: "[~@4 [g3,g4] [a3,a4] [c4,c5] [d4,d5]@4 ~@5]/2", F: "[~@4 [g3,g4] [a3,a4] [c4,c5] [d4,d5]@5 [c4,c5]@4]/2",
  G: "[bb3,bb4]@12 [g3,g4]@11 ~", H: "[d4,d5] [c4,c5]", I: "[bb3,bb4]@12 [a3,a4]@11 ~",
  J: "[[f3,f4]@3 [g3,g4]@3 ~@3 [f3,f4]@3 [g3,g4]@3 ~@3 [f3,f4]@3 [g3,g4]@11 ~@16]/2", // F G F G F G
  K: "[[f3,f4] [g3,g4] ~ [f3,f4] [g3,g4] ~ [f3,f4] [g3,g4]@3 ~@6]/2", // F G F G F G
  L: "[~@12 [g3,g4]@3 [a3,a4]@3 [c4,c5]@3 [d4,d5]@5 ~@22]/2", // G A C D
  M: "[~@12 [g3,g4]@3 [a3,a4]@3 [c4,c5]@3 [d4,d5]@7 ~@20]/2", // G A C D
  N: "[~@12 [g3,g4]@3 [a3,a4]@3 [c3,c4]@3 [d3,d4]@5 ~@22]/2", // G A C D
  O: "[~@12 [g3,g4]@3 [a3,a4]@3 [d4,d5]@3 [c4,c5]@13 ~@14]/2", // G A D C
  P: "[[f3,f4]@3 [g3,g4]@3 ~@3 [f3,f4]@3 [g3,g4]@3 ~@3 [f3,f4]@3 [g3,g4]@13 ~@14]/2", // F G F G F G
})).s("gm_synth_strings_1").gain(0.29)

// drums · kick
const kick = s("bd").struct(`<
  A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3
  B A@3 C A@3 C A@5 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C
>`.pickRestart({
  A: "x!4", B: "x ~@5 x ~@4 x!2 ~@2 x ~@2 x ~@5", C: "x ~@5 x ~@3 x ~ x ~@2 x ~@2 x ~@5",
})).gain(0.36)

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

// drums · clap
const clap = s("cp").struct("<~@16 [~ x ~ x]!28 ~@9 [~ x ~ x]!36 ~@33>").gain(0.42)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@4 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@2 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~
  A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@2 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~
  B ~
>`.pickRestart({
  A: "~ x ~@2 x ~@3", B: "~@4 x!2 ~@2",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@32
  [x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~]!12
  ~@25
  [x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~]!20
  ~@33
>`).gain(0.3)

stack(bass, brass_section, synth_strings_1, kick, snare, clap, hihat, hihat_soft, tambourine)

More by ABBA