Strudelify
Calling Elvis cover art

1991 · On Every Street

Calling Elvis

Dire Straits

KeyB majorTempo118 bpm
0:00/0:00
// Calling Elvis — Dire Straits
// 118 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 "OVERDRIVE" overdriven guitar (copy of ch 5 "OVERDRIVE" overdriven guitar, 0.104 beats late)
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(118/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B C D C E C D C B C B C B C F G@6 H I J B C B C B C B A B C K C E A K C K C B C B C L M G@5 H I N O C E C B C B P ~
  D@2 C K C B C B Q B C B R C D B S B S B C B C E C B C B T E C B C U Q K A D C B C B C B C B C B S B D V ~@11
>`.pickRestart({
  A: "b1@3 ~ f#1@3 ~ b1@3 ~ f#1@3 ~", B: "b1@3 ~ f#1@3 ~ b1@3 ~ f#1 ~ a1@2", C: "b1@3 ~ f#1@2 ~@2 b1@3 ~ f#1@2 b1 ~",
  D: "b1@3 ~ f#1@3 ~ b1@3 ~ f#1@2 a1@2", E: "b1@2 ~@2 f#1@2 ~@2 b1@3 ~ f#1 ~ a1@2",
  F: "b1@3 ~ f#1@2 ~@2 b1@2 ~@2 f#1 ~ b1@2", G: "e2@3 ~ b1@3 ~ d2@3 ~ b1@3 ~", H: "e2@3 ~ b1@3 ~ d2@3 ~ b1@2 e2 ~",
  I: "f#2@3 ~ c#2@3 ~ f#2 ~ f#2@2 e2@2 d2@2", J: "b1@2 ~@2 f#1@2 ~@2 b1@3 ~ f#1@2 b1 ~",
  K: "b1@3 ~ f#1@2 ~@2 b1@2 ~@2 f#1 ~ a1@2", L: "b1@3 ~ f#1@3 ~ b1@3 ~ f#1@2 b1@2",
  M: "e2@2 ~@2 b1@2 ~@2 d2@3 ~ b1@3 ~, ~@4 c#2 ~@11", N: "b1 ~ f#1 ~ b1 ~ f#1 a1",
  O: "b1@3 ~ f#1@2 ~@2 b1@2 ~@2 f#1@2 a1@2", P: "b1 ~@7", Q: "b1@3 ~ f#1@3 ~ b1@3 ~ f#1@2 b1 ~",
  R: "b1@3 ~ f#1@3 ~ b1@2 ~@2 f#1@2 ~@2", S: "b1@3 ~ f#1@3 ~ b1@3 ~ f#1 ~ b1 ~",
  T: "b1@3 ~ f#1@2 ~@2 b1@2 ~@2 f#1@2 b1 ~", U: "b1@3 ~ f#1 ~@3 b1@3 ~ f#1 ~ a1@2", V: "b1",
})).s("gm_electric_bass_finger").gain(0.5)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
  A@6 B@2 C@4 D@4 E@6 F G H@4 D@4 I@8 J@8 K@7 L I@8 ~@2 I@8 ~@4 M@6 N@2 O@8 P@7 Q@5 R@8 ~@15
>`.pickRestart({
  A: "[b4@47 ~ a4@47 ~, [b3,f#4]@95 ~]/6", B: "[b3,f#4,b4]/2", C: "[[f#3,d#4]@63 ~, b3 ~@63]/4",
  D: "[d#4@11 ~ e4@20 d#4@16 [a3,c#4]@15 ~, f#3@31 ~, b3@47 ~@17]/4", E: "[e3,b3,d4]/6", F: "[e3,b3,d4] ~@15",
  G: "[f#3,a#3,c#4,f#4]@7 ~", H: "[[f#3,b3,d#4]@63 ~]/4", I: "[b3,f#4,b4]/8",
  J: "[d#4@72 e4@23 ~ [b3,d#4]@7 ~ [a3,c#4]@23 ~, f#3@103 f#3@23 ~@2, b3 ~@127]/8", // B A
  K: "[~@16 b3@39 ~, [e3,g#3,d4]@55 ~]/7", L: "[f#3,c#4,f#4]@15 ~", M: "[d#4@72 e4@23 ~, [f#3,b3]@95 ~]/6",
  N: "[[b3,d#4] [a3,c#4]@3, f#3]/2", O: "[[b3,f#4,b4]@127 ~]/8",
  P: "[~@48 f#5@34 ~@2 a5@12 f#5@3 ~ b5@12, [b3,f#4,b4]]/7", Q: "[c#6@12 f#6@67 ~]/5", R: "[b3,f#4,b4,f#6]/8",
})).s("gm_synth_strings_2").gain(0.35).pan(0.6)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  A@5 B C D@2 ~@7 E ~@4 F G H ~@8 I J K L M N O P ~@8 Q ~@3 F R S T U V W X Y Z AA@2 AB AC@5 AD AE AF AG AH@2 AI AJ@2
  ~@7 AK AL AM AN AO@2 AP AQ AR@4 AS@4 AT@2 ~@2 AU@4 ~@3 AV@2 AW AX AB AY AZ BA BB ~@7
>`.pickRestart({
  A: "[a3 b3@64 ~@3 f#4@12]/5", B: "d5 f#4@14 [d4,e4]", C: "b3@4 a3@4 e3@3 d3 b2@3 ~",
  D: "[b2@2 b3 ~ b3 a3 f#3@2 a3 b3@11 ~@12]/2", E: "~@2 e3 g3 g#3 e4@3 d4@5 ~@3", F: "~@4 g3 g#3 e4 d4@9", G: "d4 ~@15",
  H: "~@2 e3 f3 f#3 a3 a#3 [c#4,f#4]@7 ~@2", I: "~@3 [f#3,b3] ~@9 b2 ~@2", J: "~ [b2,f#3,b3] ~@3 [f#3,b3] ~@10",
  K: "~@3 b2 [f#3,b3]!2 ~@10", L: "~ b2 ~ b2 [f#3,b3]!2 ~ [f#3,b3] ~@2 f#3 b2 [f#3,b3] ~@3", M: "~@7 [f#3,b3] ~@8",
  N: "~@3 b2 ~ [f#3,b3] ~@2 [f#3,b3]!2 ~@6", O: "~@3 b2 [f#3,b3]!2 ~ [f#3,b3] ~@7 b2",
  P: "~ b2 [f#3,b3]!2 ~ b2 [a3,d4] b2 [f#3,b3] b2 ~@3 b2 [f#3,b3] ~", Q: "~ g3 g#3 b3 [e4,b4]@12",
  R: "~@4 e4@4 d4@7 ~, ~@4 d4 ~@11", S: "~@2 [b3,e4] ~@2 [b3,e4] ~@2 [b3,e4]@7 e4",
  T: "~@2 [f#3,c#4,f#4] ~@2 [f#3,c#4,f#4] ~@2 [f#3,c#4,f#4]@4 ~ d4 b3 a3, ~@6 e4 ~", // F#5
  U: "~@2 [f#3,b3] ~@2 [f#3,b3] ~@2 [b2,f#3,b3]@4 ~@4", V: "~@2 [b2,f#3,b3] ~@2 [f#3,b3] ~ b2 [f#3,b3]@6 ~@2",
  W: "~@2 [b2,f#3,b3] ~@2 [b2,f#3,b3] ~@2 [b2,f#3,b3]@6 ~@2", // B5
  X: "~@2 [b2,f#3,b3] ~@2 [b2,f#3,b3] ~ b2 [f#3,b3]!2 b2 [f#3,b3]@5", // B5
  Y: "~@2 [b2,f#3,b3] ~@2 [f#3,b3] ~ b2 [f#3,b3]@5 ~@3", Z: "~@2 [b2,f#3,b3] ~@2 [b2,f#3,b3] ~ b2 [f#3,b3]@6 ~@2",
  AA: "[~@2 [b2,f#3,b3] ~@2 [b2,f#3,b3] ~@2 [b2,f#3]@6 ~@4 f#3 ~@2 [f#3,b3] ~ b2 [f#3,b3]@5 ~@3, ~@4 b3@5 ~@7]/2", // B5
  AB: "d5 b4 a4 f#4 b4 a4 f#4 e4 f4 f#4 e4 d4 e4 d4 b3 a3",
  AC: "[b3 d4 b3 a3 b3 a3 f#3 [f3,f#3] f#3 a3 a#3 [a#3,b3] a3@4 ~@34 f#4 e4 e4@20 ~ e4 ~@6, ~@12 d4@41 ~@27, ~@4 b3@15 ~]/5", // F#maj7 Bmaj7
  AD: "~@6 e4@4 d4@2 e4 ~ d4 [d4,e4]", AE: "b3@15 ~", AF: "~@4 b4@6 a4 f#4@5", AG: "~@4 b4@10 d5 b4",
  AH: "[f#5@11 ~ [d5,e5] b4@7 e5@2 d5 b4@8 ~, d5 ~@31]/2", AI: "[b3,f#4]@7 ~ [b3,f#4]@7 ~",
  AJ: "[[b3,f#4]@4 [b3,f#4]@3 ~ [b3,f#4]@4 e4@4 f#4@15 ~, ~@6 b3@9 ~]/2", AK: "~@9 b2 ~ b2 [f#3,b3]@4",
  AL: "~@7 b2 ~ b2 f#3 b2 [f#3,b3]@4", AM: "~@7 b2 ~ b2 [f#3,b3]!2 [a3,d4] ~ f#3 [f#3,b3]",
  AN: "~@6 f#3 b2 ~ b2 [f#3,a#3,b3] ~ [f#3,b3]@4", // Bmaj7 B5
  AO: "[~@7 b2 [f#3,b3]!2 b2 f#3@5 ~@5 b2 ~ b2 f#3 ~ [f#3,b3] ~ [a3,d4] ~ [f#3,b3] ~, ~@11 b3@14 ~@7]/2", // B5 D5 B5
  AP: "~@2 [f#3,b3] ~@2 [f#3,b3] ~ b2 [f#3,b3]!2 b2 [f#3,b3]@5", // B5
  AQ: "~@3 b2 [f#3,b3]!2 b2 [a3,d4]@2 b2 [f#3,b3] b2 [a3,d4] b2 [f#3,b3] b2", AR: "[b3@60 f#2 b2 f#3 b3, a#3 ~@63]/4",
  AS: "[b2, f#3@27 ~@5]/4", AT: "[[b3,f#4]@13 ~@3]/2",
  AU: "[e4@28 ~@2 f#3 ~ b2@25 ~@7, b3@31 b3@2 ~@31, ~@28 b2@3 ~@33, ~@29 e3@2 ~ f#3@19 ~@13]/4",
  AV: "[~@10 a3 a#3 b3 d4 d#4 ~ b4@16, ~@15 f#4@17]/2",
  AW: "~@2 [b2,f#3,b3] ~@2 [b2,f#3,b3] ~ b2 [f#3,b3]@2 b2 [f#3,b3]@2 b2 [f#3,b3]@2", // B5
  AX: "b2 ~ [f#3,b3] ~@2 [f#3,b3] ~ b2 [f#3,b3]@4 [a3,d4]@2 ~@2", // B5 D5
  AY: "b3 d4 b3 a3 b3 a3 f#3 f3 f#3 a3 a#3 [a#3,b3] [a3,d4]@3 ~", // Bmaj7 D5
  AZ: "d4 b3 a3 f#3 b3 a3 f#3 e3 f3 f#3 [e3,f#3] d3 e3 d3 b2 a2", // Esus2
  BA: "b2 d3 b2 a2 b2 a2 f#2 [f2,f#2] f#2 a2 a#2 [a#2,b2] [a2,d3]@3 ~", BB: "[b2,f#3,b3] ~@7",
})).s("gm_distortion_guitar").gain(0.42)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  A B C B D B E B ~@11 F G H@2 I J K L M J@4 N@4 O@4 ~@2 P Q R@2 S@2 ~ T U F V ~@3 J@3 W@5 ~@2 N@6 X@2 Y Z AA AB ~@2 AC
  AD@3 AE@2 N@2 X N@2 X AF N AA@2 AB AG AH AI AA AB@3 AG AA AB@3 AJ AG AK AB AG AB AG O AL ~@11
>`.pickRestart({
  A: "b3@3 ~ f#3@2 ~@2 b3@3 ~ f#3@2 b3 ~", B: "b3@3 ~ f#3@2 ~@2 b3@4 f#3@2 a3@2", C: "b3@3 ~ f#3@2 ~@2 b3@4 f#3@2 b3 ~",
  D: "b3@3 ~ f#3 ~@3 b3@3 ~ f#3 ~ b3 ~", E: "b3@2 f#3 ~ b3@2 f#3 ~", F: "~ b4 e5 a5", G: "g#5",
  H: "[~@16 e5@15 ~, ~@15 [e4,g#4]@16 ~]/2", I: "[f#4,a#4,f#5]@13 ~@3", J: "~@2 a4 b4 ~ b4 ~@2 b4@7 ~",
  K: "~@2 a4 b4 ~ [f#4,b4] ~@2 [f#4,b4]@5 ~@3", L: "~@2 a4 b4 ~ d5 ~@2 b4@6 ~@2", M: "~@2 a4 b4 ~ b4 ~@2 [f#4,b4]@7 ~",
  N: "a4 b4 ~ b4 a4 f#4 g#4 f#4 a4 b4 ~ b4 a4 f#4 g#4 f#4",
  O: "[a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 [g#4,c#5] f#4 [a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 [g#4,c#5] f#4", // A B A C#5 A B A C#5
  P: "~@2 e4 d#4", Q: "f#4@6 g#4 a4", R: "[d#5@8 e5@23 ~, b4@15 ~]/2",
  S: "[d#5@8 [a4,c#5]@11 d#5@3 c#5@2 b4@8, b4@3 ~@13]/2", T: "~@4 b4@3 ~ d5@8", U: "b4@15 ~", V: "g#5@7 ~",
  W: "~@2 a4 b4 ~ b4 ~@2 [f#4,b4]@6 ~@2", X: "a4 b4 ~ b4 a4 ~ g#4 f#4 a4 b4 ~ b4 a4 f#4 g#4 f#4",
  Y: "[a4,c#5] [b4,c#5,d#5] ~ [b4,c5,d#5] [a4,c#5] f#4 [g#4,c#5] f#4 [a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 g#4 f#4", // A B A C#5 A B A
  Z: "[a4,c#5] [b4,c#5,d#5] ~ [b4,d#5] [a4,c#5] f#4 g#4 f#4 [a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 [g#4,c#5] f#4", // A B A B A C#5
  AA: "[a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 g#4 f#4 [a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 [g#4,c#5] f#4", // A B A B A C#5
  AB: "[a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 g#4 f#4 [a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 g#4 f#4", // A B A B A
  AC: "~ f#5 e5 d#5", AD: "[e5 d#5 b4@2 a4 c#5 ~@6 e5@12, ~@12 b4@35 ~]/3", AE: "[[b4,d#5]@8 [a4,c#5]@23 ~]/2",
  AF: "a4 b4 ~ b4 a4 f#4 g#4 f#4 a4 b4 ~ b4 a4 ~ g#4 f#4",
  AG: "[a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 [g#4,c#5] f#4 [a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 g#4 f#4", // A B A C#5 A B A
  AH: "[a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 [g#4,c#5] f#4 [a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 [g#4,a4] ~", // A B A C#5 A B A Amaj7
  AI: "[f#4,a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 g#4 f#4 [a4,c#5] [b4,c#5,d#5] ~ [b4,d#5] [a4,c#5] f#4 g#4 f#4", // F#m B A B A
  AJ: "[a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 g#4 f#4 [a4,c#5] [b4,c#5,d#5] ~ [b4,d#5] [a4,c#5] f#4 [g#4,c#5] f#4", // A B A B A C#5
  AK: "[a4,c#5] [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 g#4 f#4 a4 [b4,d#5] ~ [b4,d#5] [a4,c#5] f#4 g#4 f#4", // A B A B A
  AL: "[f#4,b4] ~@15", // B5
})).s("gm_overdriven_guitar").gain(0.28).pan(0.3)

// drums · kick
const kick = s("bd").struct("<[x!4]!64 x ~ [x!4]!51 x ~@11>").gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@23 A B@3 C B@7 C B@3 C ~@8 B@7 D E@3 F E@3 G H ~ B@5 C B I B J B K ~@7 K B@3 L B M B N L B@6 K B@5 M B@5 K B@3 ~@12
>`.pickRestart({
  A: "~@10 x ~@3 x!2", B: "~@3 x", C: "~@12 x ~ x!2", D: "~@6 x ~@7 x!2", E: "~ x ~ x", F: "~@4 x ~@4 x ~@2 x ~@2 x",
  G: "~ x ~@2", H: "x", I: "~@5 x ~@2", J: "~@3 x ~@12", K: "~ x ~@6", L: "~@7 x", M: "~@11 x ~@2 x ~", N: "~ x",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@32 A@8 ~@7 B ~@7 C ~@7 D ~@2 A@11 D ~@7 D ~ C ~ E ~@3 F A@7 G A@11 D A@3 ~@12
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@14 x!2", C: "~@3 x", D: "~@7 x", E: "~@11 x ~@4", F: "x ~@13 x!2", G: "~@6 x!2",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<[x!16]!117 [~ x ~ x ~ x ~ x] [~ x ~ x ~ x ~@2] [~ x ~ x ~ x ~ x] [~ x ~ x ~@4] ~@8>")
  .gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@23 A ~@8 B@8 ~@7 C ~@3 D ~@3 D ~@3 E ~@3 F ~@2 B@11 G ~@3 D ~@3 H ~@3 I ~@3 F B@7 J B@11 G B@3 ~@12
>`.pickRestart({
  A: "~@13 x ~@2", B: "~ x ~@2", C: "~@3 x", D: "~@5 x ~@2", E: "~@3 x ~@4", F: "~@12 x!2 ~@2", G: "~@11 x!2 ~@3",
  H: "~@4 x ~@2 x", I: "~@8 x ~@2 x ~@4", J: "~@11 x ~@4",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@23 A ~@8 B@8 ~@7 C ~@7 D ~@7 C ~@2 B@11 E ~@7 F ~@3 F ~@3 G B@7 E B@11 E B@3 ~@12
>`.pickRestart({
  A: "~@3 x", B: "~@3 x ~@12", C: "~@5 x ~@2", D: "~@8 x!2 ~@6", E: "~@5 x ~@2 x ~@7", F: "~ x", G: "~@11 x ~@4",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  A ~@23 A ~@15 A ~@15 A ~@3 A ~@5 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@7 A ~@5 A ~@5 A ~@2 A ~@11
>`.pickRestart({
  A: "x",
})).gain(0.72)

stack(
  bass, synth_strings_2, distortion_guitar, overdriven_guitar, kick, snare, low_tom, hihat, mid_tom, high_tom, crash
)

More by Dire Straits