Strudelify
Baker Street cover art

1989 · City to City

Baker Street

Gerry Rafferty

KeyA majorTempo125 bpm
0:00/0:00
// Baker Street — Gerry Rafferty
// 125 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 "Tenor Sax" tenor sax (copy of ch 8 "Alto Sax" alto sax)
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(125/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: edit a riff to change every repeat.

// other · epiano1 · "electric piano"
const epiano1 = note(`<
  A@4 B@2 C@2 A@4 B@2 C@2 D@4 E@2 D@6 E@2 ~@2 D@6 F@2 A@4 B@2 C@2 A@4 B@2 C@2 D@4 E@2 D@6 E@2 ~@2 D@6 F@2 D@6 F@2 D@6 F
  ~
>`.pickRestart({
  A: "a3 e4 a3 e4 a3 e4 a4 e4", B: "d4 a3 d4 a4 d4 a4 d5 a4", C: "d5 a4 d5 a5 d5 a5 d6 a5",
  D: "d4 a4 d4 a4 d4 a4 d5 a4", E: "d4 a4 d4 a4 d4 a4 d5 g4", F: "a4 d5 a4 a5 a4 a5 a4 d5",
})).s("gm_epiano1").gain(0.24)

// other · piano · "acoustic piano"
const piano = note("<A B@2 C D E F G A B@2 C D E F G ~@7 H ~@39 H ~@32>".pickRestart({
  A: "e4@2 a4@2 e5@2 a4 ~@9", B: "[~@2 a4@2 e5@2 a4@4 a5@4 e5@4 a4@2 e5@2 a4 ~@9]/2",
  C: "~@2 a4@2 e5@2 a4@2 [b4,b5]@3 [a4,a5]@3 [e4,e5]@2", D: "d4@2 a4@2 d5@2 f#5@2 g5@2 f#5 ~@5",
  E: "~ d5@2 d5 a5 d5 ~ a5", F: "~@10 f#5 d5@2 f#5@3", G: "a5@4 ~@6 f#5 g5@2 f#5@3",
  H: "~@6 a4 [a3,a4]@3 [g4,g5] [g4,g5]@2 [f#4,f#5]@3", // A G F#
})).s("gm_piano").gain(0.28).pan(0.6)

// chords · piano · "acoustic piano"
const piano_2 = note(`<
  A ~@3 B ~@3 A ~@3 B ~@3 C D C D E F G@2 C D C D E F H I J@4 K L M@2 ~@8 N@4 E F G@2 C D C D E F G@2 C D C D E F H I
  J@4 K L M@2 J@4 K L M@2 J@4 K L M ~
>`.pickRestart({
  A: "[a2,e3,f#3,a3,c#4] ~@3", B: "[g2,d3,g3,b3] ~@3",
  C: "[d4,f4,a4,c5]@3 ~ [d4,f4,a4,c5]@2 ~ [d4,f4,a4,c5]@2 ~ [d4,f4,a4,c5]@2 ~ [d4,f4,a4,c5]@2 ~", // Dm7
  D: "[e4,g4,c5]@3 ~ [e4,g4,c5]@2 ~ [e4,g4,c5]@2 ~ [e4,g4,c5]@2 ~ [e4,g4,c5]@2 ~", // C
  E: "[e4,g4,b4,d5]@3 ~ [e4,g4,b4,d5]@2 ~ [e4,g4,b4,d5]@2 ~ [e4,g4,b4,d5]@2 ~ [e4,g4,b4,d5]@2 ~", // Em7
  F: "[g4,b4,d5]@3 ~ [g4,b4,d5]@2 ~ [g4,b4,d5]@2 ~ [g4,b4,d5]@2 ~ [g4,b4,d5]@2 ~", // G
  G: "[a4,d5,f#5]@3 ~ [a4,d5,f#5]@2 ~ [a4,d5,f#5]@2 ~ [a4,d5,g5]@2 ~ [a4,d5,f#5]@2 ~", // D Dsus4 D
  H: "[a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 a4 [a4,c#5,e5]@2 a4 [a4,c#5,e5]@2 a4 [a4,c#5,e5]@2 ~", I: "[g3,g4,b4,d5]@3 ~@13",
  J: "[a4,d5,f#5]@3 ~ [a4,d5,f#5]@2 d4 [a4,d5,f#5]@2 d4 [a4,d5,f#5]@2 d4 [a4,d5,f#5]@2 ~", // D
  K: "[g4,c5,e5]@3 ~ [g4,c5,e5]@2 c4 [g4,c5,e5]@2 c4 [g4,c5,e5]@2 c4 [g4,c5,e5]@2 ~", // C
  L: "[g4,b4,d5]@3 ~ [g4,b4,d5]@2 e4 [g4,b4,d5]@2 e4 [g4,b4,d5]@2 e4 [g4,b4,d5]@2 ~", // G
  M: "[b4,d5,g5]@3 ~ [b4,d5,g5]@2 g4 [b4,d5,g5]@2 g4 [b4,d5,g5]@2 g4 [b4,d5,g5]@2 ~", // G
  N: "[a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 ~ [a4,c#5,e5]@2 ~ [a4,c#5,e5]@2 ~ [a4,c#5,e5]@2 ~", // A
})).s("gm_piano").gain(0.28).pan(0.4)

// chords · rock organ · "organ"
const rock_organ = note(`<
  ~@8 A@4 B@2 C@2 D E D E F G C@2 D E D E F G H I J@4 K L M@2 A@4 F G C@2 A@4 F G C@2 D E D E F G C@2 D E D E F G H I
  J@4 K L M@2 J@4 K L M@2 J@4 K L M ~
>`.pickRestart({
  A: "[a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 ~ [a4,c#5,e5]@2 ~ [a4,c#5,e5]@2 ~ [a4,c#5,e5]@2 ~", // A
  B: "[b4,d5,g5]@3 ~ [b4,d5,g5]@2 ~ [b4,d5,g5]@2 ~ [b4,d5,g5]@2 ~ [b4,d5,g5]@2 ~", // G
  C: "[a4,d5,f#5]@3 ~ [a4,d5,f#5]@2 ~ [a4,d5,f#5]@2 ~ [a4,d5,g5]@2 ~ [a4,d5,f#5]@2 ~", // D Dsus4 D
  D: "[d4,f4,a4,c5]@3 ~ [d4,f4,a4,c5]@2 ~ [d4,f4,a4,c5]@2 ~ [d4,f4,a4,c5]@2 ~ [d4,f4,a4,c5]@2 ~", // Dm7
  E: "[e4,g4,c5]@3 ~ [e4,g4,c5]@2 ~ [e4,g4,c5]@2 ~ [e4,g4,c5]@2 ~ [e4,g4,c5]@2 ~", // C
  F: "[e4,g4,b4,d5]@3 ~ [e4,g4,b4,d5]@2 ~ [e4,g4,b4,d5]@2 ~ [e4,g4,b4,d5]@2 ~ [e4,g4,b4,d5]@2 ~", // Em7
  G: "[g4,b4,d5]@3 ~ [g4,b4,d5]@2 ~ [g4,b4,d5]@2 ~ [g4,b4,d5]@2 ~ [g4,b4,d5]@2 ~", // G
  H: "[a4,c#5,e5]@3 ~ [a4,c#5,e5]@2 a4 [a4,c#5,e5]@2 a4 [a4,c#5,e5]@2 a4 [a4,c#5,e5]@2 ~", I: "[g3,g4,b4,d5]@3 ~@13",
  J: "[a4,d5,f#5]@3 ~ [a4,d5,f#5]@2 d4 [a4,d5,f#5]@2 d4 [a4,d5,f#5]@2 d4 [a4,d5,f#5]@2 ~", // D
  K: "[g4,c5,e5]@3 ~ [g4,c5,e5]@2 c4 [g4,c5,e5]@2 c4 [g4,c5,e5]@2 c4 [g4,c5,e5]@2 ~", // C
  L: "[g4,b4,d5]@3 ~ [g4,b4,d5]@2 e4 [g4,b4,d5]@2 e4 [g4,b4,d5]@2 e4 [g4,b4,d5]@2 ~", // G
  M: "[b4,d5,g5]@3 ~ [b4,d5,g5]@2 g4 [b4,d5,g5]@2 g4 [b4,d5,g5]@2 g4 [b4,d5,g5]@2 ~", // G
})).s("gm_rock_organ").gain(0.22)

// bass · electric bass finger · "fingered bass"
const bass = note(`<
  A@4 B@2 C@2 A@4 B@2 C@2 D E D E F G C@2 D E D E F G ~@2 H@4 I J K@2 L@4 J K H@2 L@4 J K H@3 L H L J K M@2 H L H L J K
  L N H@4 I J K@2 H@4 I J K@2 H@4 I J K ~
>`.pickRestart({
  A: "a1/4", B: "g1/2", C: "d1/2", D: "d1", E: "a1", F: "e1", G: "g1", H: "d2@3 ~ d2@2 ~ d2@2 ~ d2@2 ~ d2@2 ~",
  I: "c2@3 ~ c2@2 ~ c2@2 ~ c2@2 ~ c2@2 ~", J: "e1@3 ~ e1@2 ~ e1@2 ~ e1@2 ~ e1@2 ~",
  K: "g1@3 ~ g1@2 ~ g1@2 ~ g1@2 ~ g1@2 ~", L: "a1@3 ~ a1@2 ~ a1@2 ~ a1@2 ~ a1@2 ~",
  M: "d1@3 ~ d1@2 ~ d1@2 ~ d1@2 ~ d1@2 ~", N: "g1 ~@7",
})).s("gm_electric_bass_finger").gain(0.5)

// drums · kick
const kick = s("bd").struct("<~@16 A B A B A B A B A B A B A B A C A@39 C A@15 C A@7 ~>".pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x",
})).gain(0.35)

// drums · snare
const snare = s("sd").struct(`<
  ~@30 A B C D C D C D C A C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D A B C D C D C D C D C D C D C D C
  B C D C D C D C ~
>`.pickRestart({
  A: "x!5 ~ x!2 ~ x!7", B: "x ~@3 x ~@3 x ~@2 x ~@4", C: "~@4 x ~@7 x ~@2 x", D: "~@4 x ~@7 x ~ x!2",
})).gain(0.35)

// drums · clap
const clap = s("cp").struct("<~@31 A B@7 ~ B@30 ~ A B@15 A B@7 ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@32 A@7 ~ A@30 ~@2 A@15 ~ A@7 ~>".pickRestart({
  A: "x ~@3 x ~@3 x!2 ~@2 x!2 ~@2",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@31 A ~@39 A ~@7 B ~@7 A ~@8>".pickRestart({
  A: "~@6 x!2", B: "~@11 x!2 ~@3",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@31 A ~@39 A ~@7 B ~@7 A ~@8>".pickRestart({
  A: "x ~@8 x!2 ~@5", B: "~@6 x!2 ~@8",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@32 A@7 ~ A@30 ~@2 A@15 ~ A@7 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@79 [~ x ~@2] ~@16>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@32 A ~@39 A ~@7 A ~@7 A ~@7>".pickRestart({
  A: "x",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@30 A@2 B@7 A B@30 A@2 B@15 A B@7 ~>".pickRestart({
  A: "x ~ x ~ x ~ x!3 ~ x ~ x!3 ~", B: "x ~ x ~ x ~ x!5 ~ x!3 ~",
})).gain(0.3)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@32 A@7 ~ A@30 ~@2 A@15 ~ A@7 ~>".pickRestart({
  A: "x!8",
})).gain(1.51)

stack(
  epiano1, piano, piano_2, rock_organ, bass, kick, snare, clap, hihat, low_tom, mid_tom, open_hat, high_tom, crash,
  tambourine, cabasa
)

More by Gerry Rafferty