Strudelify

I Am the City

ABBA

KeyA majorTempo134 bpm
0:00/0:00
// I Am the City — ABBA
// 134 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(134/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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@8 B C D E F G D E F G H I J G K L@3 D E F G D E F G H I J G K M N@3 O N@3 O P@2 Q R S T@2 U@2 C D E F G D E F G H I
  J G K L@3 D E F G D E F G H I J G K M N@3 O N@3 O P@2 Q R S T@2 ~ V
>`.pickRestart({
  A: "[[e4,a4,c#5]@13 ~ [e4,g#4,b4]@15 ~ [d4,f#4,a4]@26 ~@8]/4", B: "~@4 d4@3 ~ c#4@3 ~ b3@3 ~",
  C: "~@4 b3@3 ~ d4@3 ~ c#4@3 ~", D: "a3 ~ c#4 ~ d4 ~ c#4 ~ e4 ~ c#4 ~ d4 ~ e4 ~",
  E: "f#4 ~ g4 ~ f#4 ~ e4 ~ d4 ~ f#4 ~ g4 ~ f#4 ~", F: "a4 ~ f#4 ~ g4 ~ f#4 ~ d4 ~ f#4 ~ g4 ~ f#4 ~",
  G: "[d4,f#4] ~ [c#4,e4] ~@3 [c#4,e4]@7 ~@3", H: "e4 ~ g#4 ~ a4 ~ g#4 ~ b4 ~ g#4 ~ a4 ~ g#4 ~",
  I: "e4 ~ g#4 ~ a4 ~ g#4 ~ d4 ~ f#4 ~ g4 ~ f#4@2", J: "~@2 f#4 ~ g4 ~ f#4 ~ [d4,a4] ~ f#4 ~ g4 ~ f#4 ~",
  K: "[b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~ [b3,e4,g#4]@3 ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~", // E
  L: "[[b3,e4,g#4] ~ f#4 ~ e4 ~ f#4 ~ e4 ~ c4 ~ b3 ~@7 d4@3 ~ c#4@3 ~ b3@3 ~@5 b3@3 ~ d4@3 ~ c#4@3 ~, ~@7 a3@13 ~@4]/3", // E
  M: "[b3,e4,g#4] ~ f#4 ~ e4 ~ f#4 ~ e4 ~ c4 ~ b3 ~ a3@2", // E
  N: "[~@2 e4 ~ [e4,a4]@3 ~ [e4,a4,c#5] ~ [e4,c#5]@3 ~ [e4,b4]@3 ~ e4 ~ [e4,g#4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4]@3 ~ [d4,f#4]@3 ~ d4 ~ d4 ~ f#4 ~ a4@2 a4@4 ~@2, ~@5 a4@10 a4@5 ~@4, ~@7 g#4@3 ~@14]/3", // A5 A C#m E5 E D
  O: "~@2 a5 ~ a4 ~ a5 ~ a4 ~ a5 ~ a4 ~ a5 ~",
  P: "[~@2 e4 ~ [e4,a4]@3 ~ [e4,a4,c#5] ~ [e4,c#5]@3 ~ [e4,b4]@3 ~ e4 ~ [e4,g#4]@3 ~ [e4,g#4,b4] ~ [e4,g#4,b4]@3 ~ [d4,g4,b4]@2, ~@10 a4@21 ~, ~@7 g#4@3 ~@6]/2", // A5 A C#m E5 E G
  Q: "~@2 d4 ~ g4@3 ~ [d4,g4,b4] ~ [d4,g4,b4]@3 ~ [c#4,f#4,a4]@2", // G F#m
  R: "~@2 c#4 ~ f#4 ~ a4@3 ~ [f#4,a4,c#5] ~ [f#4,a4,c#5] ~ [e4,a4,c#5]@2", // F#m A
  S: "~@2 a4 ~ a4 ~ [d4,f#4,a4]@3 ~ e4 ~ e4 ~ e4@2", T: "[~@2 c#4 ~ c#4 ~ c#4@3 ~ a3 ~ a3 ~ a3@5 ~@9 d4 ~ f#4 ~]/2",
  U: "[a4 ~ f#4 ~ b4 ~ f#4 ~@3 b4 ~ c#5 ~@7 d4@3 ~ c#4@3 ~ b3@3 ~, ~@8 a4@6 a4@13 ~@5]/2",
  V: "a4 ~ f#4 ~ b4 ~ f#4 ~ a4 ~ b4 ~ c#5 ~ a4 ~",
})).s("gm_acoustic_guitar_steel").gain(0.26)

// bass · electric bass finger
const bass = note(`<
  A B C B A B C B C@3 D@2 C@2 D@2 C E F D C G@2 C@3 D@2 C@2 D@2 C E F D C G H C@9 I J K L M N O C@3 D@2 C@2 D@2 C E F D
  C G@2 C@3 D@2 C@2 D@2 C E F D C G H C@9 I J K L M P ~ O
>`.pickRestart({
  A: "a2@3 ~ a2@3 ~ a2@3 ~ a2 ~ e3 ~", B: "a2@3 ~ a2@3 ~ a2@3 ~ a2 ~ d3 ~", C: "a2@3 ~ a2@3 ~ a2@3 ~ a2@3 ~",
  D: "d3@3 ~ d3@3 ~ d3@3 ~ d3@3 ~", E: "[e3,g#3]@3 ~ e3@3 ~ e3@3 ~ e3@3 ~",
  F: "[e3,g#3]@3 ~ e3@3 ~ [d3,f#3]@3 ~ d3@3 ~", G: "e3@3 ~ e3@3 ~ e3@3 ~ e3@3 ~", H: "e3@3 ~@13",
  I: "g#2@3 ~ g#2@3 ~ g#2@3 ~ g#2@3 ~", J: "g2@3 ~ g2@3 ~ g2@3 ~ g2@3 ~", K: "f#2@3 ~ f#2@3 ~ f#2@3 ~ f#2@3 ~",
  L: "a2@4 ~@2 d3@4 ~@2 f#2@3 ~", M: "e2@4 ~@2 c#3@4 ~@2 e3@3 ~", N: "d2@3 ~@3 f#2@4 ~@2 a2@3 ~",
  O: "d2@4 ~@2 f2@4 ~@2 a2@3 ~", P: "f#2@4 ~@2 f#2@4 ~@2 a2@3 ~",
})).s("gm_electric_bass_finger").gain(0.26)

stack(acoustic_guitar_steel, bass)

More by ABBA