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: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B C D E F G H I F J B K L E M N@6 O P I Q R Q S B G B T U V W E Q A W K W K X J L Y Z AA N@2 AB N AC O AD AE@2 R X G
  L I AF AG ~ D AH G X K X G F J F AI AJ AK AL AF B Y B V AM R L G L G H V B R AN J L K AO AP AQ A D E D G D V F V D E B
  AR B D AS ~@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@3 ~ b1@3 ~ f#1@2 b1@2",
  D: "b1@3 ~ f#1@3 ~ b1@3 ~ f#1@2 a1@2", E: "b1@3 ~ f#1@3 ~ b1@3 ~ f#1@2 b1 ~", F: "b1@3 ~ f#1@2 ~@2 b1@3 ~ f#1 ~ a1@2",
  G: "b1@3 ~ f#1@2 ~@2 b1@3 ~ f#1@2 b1 ~", H: "b1@3 ~ f#1@2 ~@2 b1@2 ~@2 f#1@2 a1@2",
  I: "b1@2 ~@2 f#1@2 ~@2 b1@3 ~ f#1@2 b1 ~", J: "b1@3 ~ f#1@3 ~ b1@2 ~@2 f#1@2 b1 ~",
  K: "b1@3 ~ f#1@2 ~@2 b1@2 ~@2 f#1@2 b1 ~", L: "b1@2 ~@2 f#1@2 ~@2 b1@3 ~ f#1 ~ a1@2",
  M: "b1@3 ~ f#1@2 ~@2 b1@2 ~@2 f#1 ~ b1@2", N: "e2@3 ~ b1@3 ~ d2@3 ~ b1@3 ~", O: "e2@3 ~ b1@3 ~ d2@3 ~ b1@2 e2 ~",
  P: "f#2@3 ~ c#2@3 ~ f#2 ~ f#2@2 e2@2 d2@2", Q: "b1@3 ~ f#1@2 ~@2 b1@3 ~ f#1@2 a1@2",
  R: "b1@2 ~@2 f#1@2 ~@2 b1@2 ~@2 f#1@2 b1 ~", S: "b1@2 ~@2 f#1@3 ~ b1@3 ~ f#1@2 b1 ~",
  T: "b1@3 ~ f#1@2 ~@2 b1@2 ~@2 f#1@3 ~", U: "b1@2 ~@2 f#1@3 ~ b1@2 ~@2 f#1 ~ a1@2",
  V: "b1@3 ~ f#1@3 ~ b1@3 ~ f#1 ~ b1 ~", W: "b1@2 ~@2 f#1@2 ~@2 b1@2 ~@2 f#1 ~ a1@2",
  X: "b1@3 ~ f#1@2 ~@2 b1@2 ~@2 f#1 ~ a1@2", Y: "b1@3 ~ f#1@2 ~@2 b1@3 ~ f#1 ~ b1 ~",
  Z: "b1@3 ~ f#1@2 ~@2 b1@3 ~ f#1@2 b1@2", AA: "e2@2 ~@2 b1@2 ~@2 d2@3 ~ b1@3 ~, ~@4 c#2 ~@11",
  AB: "e2@3 ~ b1@3 ~ d2@2 ~@2 b1@3 ~", AC: "e2@3 ~ b1@2 ~@2 d2@3 ~ b1@3 ~", AD: "f#2@2 ~@2 c#2@4 f#2 ~ f#2@2 e2@2 d2@2",
  AE: "b1 ~ f#1 ~ b1 ~ f#1 a1", AF: "b1@2 ~@2 f#1@2 ~@2 b1@3 ~ f#1@2 a1@2", AG: "b1 ~@7",
  AH: "b1@3 ~ f#1@3 ~ b1@2 ~@2 f#1@2 a1@2", AI: "b1@2 ~@2 f#1@3 ~ b1@2 ~@2 f#1@2 b1 ~",
  AJ: "b1@3 ~ f#1@2 ~@2 b1@4 f#1 ~ a1@2", AK: "b1@3 ~ f#1@3 ~ b1@2 ~@2 f#1@2 ~@2",
  AL: "b1@2 ~@2 f#1@2 ~@2 b1@2 ~@2 f#1 ~ b1 ~", AM: "b1@3 ~ f#1@3 ~ b1@2 ~@2 f#1 ~ a1@2",
  AN: "b1@2 ~@2 f#1@3 ~ b1@3 ~ f#1 ~ a1@2", AO: "b1@3 ~ f#1 ~@3 b1@3 ~ f#1 ~ a1@2",
  AP: "b1@2 ~@2 f#1@4 b1@3 ~ f#1 ~ b1 ~", AQ: "b1@2 ~@2 f#1@2 ~@2 b1 ~@3 f#1 ~ a1@2",
  AR: "b1@3 ~ f#1@2 ~@2 b1@2 ~@2 f#1 ~ b1 ~", AS: "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 I@4 J@8 K@8 L@7 M J@8 ~@2 J@8 ~@4 N@6 O@2 P@8 Q@7 R@5 S@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: "[d#4@6 e4@10 d#4@8 [a3,c#4]@7 ~, f#3@31 ~, b3@3 ~]/4",
  J: "[b3,f#4,b4]/8", K: "[d#4@72 e4@23 ~ [b3,d#4]@7 ~ [a3,c#4]@23 ~, f#3@103 f#3@23 ~@2, b3 ~@127]/8",
  L: "[~@16 b3@39 ~, [e3,g#3,d4]@55 ~]/7", M: "[f#3,c#4,f#4]@15 ~", N: "[d#4@72 e4@23 ~, [f#3,b3]@95 ~]/6",
  O: "[[b3,d#4] [a3,c#4]@3, f#3]/2", P: "[[b3,f#4,b4]@127 ~]/8",
  Q: "[~@48 f#5@34 ~@2 a5@12 f#5@3 ~ b5@12, b3, ~ [f#4,b4]@111]/7", R: "[c#6@12 f#6@67 ~]/5", S: "[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 D E F G B ~@11 H I J@2 K L M N O L@3 P Q@4 R@4 ~@2 S T U@2 V@2 ~ W X H Y ~@3 P@3 Z@3 AA O ~@2 Q@6 AB@2 AC AD AE
  AF ~@2 AG AH@3 AI@2 Q@2 AB Q@2 AB AJ Q AE@2 AF AK AL AM AE AF@3 AK AE AF@3 AN AK AO AF AK AF AK R AP ~@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@4 f#3@3 ~ b3@4 f#3@2 a3@2", E: "b3@3 ~ f#3 ~@3 b3@3 ~ f#3 ~ b3 ~", F: "b3@2 f#3 ~ b3@2 f#3 a3",
  G: "b3@2 f#3 ~ b3@2 f#3 ~", H: "~ b4 e5 a5", I: "g#5", J: "[~@16 e5@15 ~, ~@15 [e4,g#4]@16 ~]/2",
  K: "[f#4,a#4,f#5]@13 ~@3", L: "~@2 a4 b4 ~ b4 ~@2 b4@7 ~", M: "~@2 a4 b4 ~ [f#4,b4] ~@2 [f#4,b4]@5 ~@3",
  N: "~@2 a4 b4 ~ d5 ~@2 b4@6 ~@2", O: "~@2 a4 b4 ~ b4 ~@2 [f#4,b4]@7 ~", P: "~@2 a4 b4 ~ b4 ~@2 b4@6 ~@2",
  Q: "a4 b4 ~ b4 a4 f#4 g#4 f#4 a4 b4 ~ b4 a4 f#4 g#4 f#4",
  R: "[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
  S: "~@2 e4 d#4", T: "f#4@6 g#4 a4", U: "[d#5@8 e5@23 ~, b4@15 ~]/2",
  V: "[d#5@8 [a4,c#5]@11 d#5@3 c#5@2 b4@8, b4@3 ~@13]/2", W: "~@4 b4@3 ~ d5@8", X: "b4@15 ~", Y: "g#5@7 ~",
  Z: "~@2 a4 b4 ~ b4 ~@2 [f#4,b4]@6 ~@2", AA: "~@2 a4 b4 ~ b4 ~@2 [f#4,b4]@5 ~@3",
  AB: "a4 b4 ~ b4 a4 ~ g#4 f#4 a4 b4 ~ b4 a4 f#4 g#4 f#4",
  AC: "[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
  AD: "[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
  AE: "[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
  AF: "[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
  AG: "~ f#5 e5 d#5", AH: "[e5 d#5 b4@2 a4 c#5 ~@6 e5@12, ~@12 b4@35 ~]/3", AI: "[[b4,d#5]@8 [a4,c#5]@23 ~]/2",
  AJ: "a4 b4 ~ b4 a4 f#4 g#4 f#4 a4 b4 ~ b4 a4 ~ g#4 f#4",
  AK: "[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
  AL: "[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
  AM: "[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
  AN: "[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
  AO: "[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
  AP: "[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