Strudelify
Private Investigations cover art

Money For Nothing

Private Investigations

Dire Straits

KeyE minorTempo110 bpm
0:00/0:00
// Private Investigations — Dire Straits
// 110 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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 · piano · "MIDI"
const piano = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X M N O P Q R S T U V W Y Z@2 AA AB AC AD AE AF@3 AG AH AI ~ AJ ~ AK AL
  AM AN AO AP AQ AR AS ~@25 AT@4 AU AV AW@4 ~@7 AX@8 AY@7 AZ@3 BA ~@2
>`.pickRestart({
  A: "b4@2 ~ g4 ~@3 g4, ~ e4 b4 e4, ~@5 b3@3", B: "b4@2 d4@2 b4@2 ~ f#4, d2, ~@3 d4",
  C: "~@3 f#4 b4 ~@2 f#4, d2, b4 d4 ~ d4, ~ b3@2 ~@5", D: "a4@2 ~ e4 ~ a3 c#4 e4, ~ c#4 a4 ~",
  E: "~@3 d4 g4@2 b3 d4, b2, g4 b3 ~@2, ~ g3@2 ~@5", F: "~ a3 ~ f#4 ~@2 c4 e4, a2, a4 c4 a4 ~, ~@5 a3@2 ~",
  G: "~@3 b3 d#4@2 b3 d4, a2, ~ d#3@2 ~@5, ~ f#3 ~@2", H: "~@3 b3 e4 ~ b3 e4, g2, g4@2 g3@2 ~ g3@3, ~ e3@2 ~@5",
  I: "~@3 c#4 ~@2 a#3 c#4, g2 e2, e4@3 ~ e4@2 ~@2, ~ g3@3 ~ g3@2 ~, ~ a#3 ~@2",
  J: "~@2 c4 e4 a4 e4 c4 a3, f#2, e4 ~@3, ~ a3@2 ~@5", K: "~@3 d#4 f#4 d#4 f#4 g4, b2, ~ a3@2 ~@5, ~ b3 ~@2",
  L: "[g3,b3] g3 b3 ~ g4 ~@2 g4, e2, e4@2 ~@3 b3@2 ~, ~@3 e4", M: "~@3 g4 ~@3 g4, b4 e4 b4 e4, ~ b3@3 ~ b3@2 ~",
  N: "~@3 f#4 b4@2 ~ f#4, b4 d4 ~ d4, ~ b3@2 ~@5", O: "~ b3 ~ f#4 ~@2 f#4 g4, b4 d4 b4 ~, ~@5 b3@2 ~",
  P: "a4@2 ~ e4 ~ e4 ~ a3, ~ c#4 a4 c#4", Q: "g4@2 ~ d4 g4 g3 ~ f#4, ~ b3 ~ b3",
  R: "~@3 c4 f4 ~ f4 e4, f4 a3 ~@2, ~ f3@2 ~@5", S: "d#4 f#3 a3 b3 d#4 b3 a3 f#3", T: "~ g3 b3 ~ b3@4, e4, ~@3 g3@5",
  U: "e4@5 g4 f#4 e4", V: "e4", W: "f#4@14 g4 f#4", X: "b3 g3 b3 ~ g4 ~@2 g4, e4@2 ~@3 b3@2 ~, ~@3 e4",
  Y: "~@6 e4@2 g4@2 f#4 e4 a4@2 g4 f#4, ~@2 b3 d4",
  Z: "[d4@2 b3@2 d4@4 d4@10 f#4@2 d4@3 ~ d4@4 f#4 e4 d4 f#4, [g4,b4] ~@7]/2", // G
  AA: "~ a4 e4@2 [e4,c5]@2 [a4,e5]@2, c5 ~, e4 ~@3", AB: "[g4,b4]@6 [g4,b4]@2 [g4,b4]@4 g4 f#4 e4 f#4",
  AC: "b3@2 d4@8 f#4 g4 a4 g4@2 c5, [g4,b4]@5 ~ e4@2", AD: "~ a3 d4@4 [d4,f#4,a4]@2, [f#4,a4]@11 ~@5, d4 ~@3",
  AE: "c4 g3 c4 g3 ~@3 e4, [e4,g4]@7 ~, ~ c4", AF: "[f#4 e4 d#4@46, b3@5 ~]/3", AG: "~@4 e3@11 ~",
  AH: "~ d3@3, ~ b4@14 ~", AI: "~@4 d3@11 ~", AJ: "b1", AK: "~ d#3 ~@6, a1@15 ~, ~ b4@15", AL: "~ b2 ~@6, g1",
  AM: "~@3 f#2@3 ~@2, e3@15 ~, e2@3 ~@5, ~ c#4@14 ~", AN: "a2@2 b2 ~@5, f#3", AO: "~@4 f#4@3 g4, b1", AP: "e4@5 ~@3",
  AQ: "~ a#4!2 [c#5,e5] e5@3 ~, [g2,a#3]", // C#m Gm
  AR: "~ [e5,a5]@3 c#4@2 ~@5 e4@2 a3@2 ~, f#2, c5@2 ~ e5!2 a4 ~@2, ~@7 a5@2 c5@2 ~@5", AS: "[f#5,a5]@5 ~@3",
  AT: "[~@14 b3@29 [g3,b3,c#4]@2 [g3,b3,d4]@19, ~@14 [e4,g4]@31 ~@19]/4", AU: "e4 [e4,g4]", AV: "b4@4 [g4,b4,d5]@3 e4",
  AW: "[[f#4,g4,b4,d5]@3 [d4,g4,b4,d5]@3 [b3,d4,g4,b4] [c4,e4,g4,c5]@4 [e4,g4,b4]@17 [e4,g4,b4] ~@3]/4", // Gmaj7 G C Em
  AX: "[~@3 [e4,g4]@13 ~@3 [d5,f#5,g5]@9 ~@13 [b4,d5,g5,b5]@3 [f#4,g4,b4,d5,f#5]@3 [d4,f#4,b4,d5]@3 [d4,g4,b4] [c4,e4,g4,c5]@4 [b4,g5,b5]@9, ~@3 e5@48 ~@13, ~@3 b4@16 b4@22 ~@23]/8", // Em Gmaj7 G Gmaj7 Bm G C Em
  AY: "[~@6 [g5,c6]@21 g5 e5 c5 [e5,g5,b5]@34 [g4,g5]@15 [c#5,a5]@12 [c#5,f#5]@21, ~@6 [c5,e5]@23 ~ b4@66 ~@16]/7", // C5 Em G F#m F#5 C
  AZ: "[[g4,g5]@5 [c#5,a5]@4 [c#5,f#5]@7]/3", BA: "[g4,g5]@15 ~",
})).s("gm_piano").gain(0.28).pan(0.7)

// chords · piano · "MIDI" · soft notes
const piano_soft = note(`<
  A B C D E ~ F ~@4 G ~ H ~ I J K ~@4 L M ~ H ~ I J K ~@4 L ~@2 N ~@8 O@5 P Q R S T ~ U V W X@3 ~@49 Y ~@11
>`.pickRestart({
  A: "~ b3@2 ~@5, e2", B: "~ b3@2 f#4 ~ b3@3", C: "~@5 b3 ~@2", D: "~ a3@2 ~@5, c#2", E: "~@5 g3@2 ~",
  F: "d#4 ~@4 a3@2 ~", G: "~@3 e4 ~@4", H: "~@5 b3@2 ~", I: "~ a3@2 ~@5", J: "~ g3@2 ~@5", K: "~@5 a3 ~@2",
  L: "[d#4,a4]@7 ~", M: "g3 ~@2 e4 ~@4", N: "~@3 a3 ~@4",
  O: "[~@2 b2@2 ~@14 b2@2 ~@14 b2@2 ~@14 c#3@2 e3@11 ~@3 d3@3 ~@9 g4@2, [b1,e4,g4]@15 d4@15 ~ d4@16 [c#2,c#4]@16 b3@13 ~@4, ~ b4@15 [d2,f#4]@16 [d2,f#4,b4]@16 [e4,a4]@16 d4@12 ~@4, ~@65 g4@11 ~@4]/5", // Em C# D Bm A5
  P: "~ c3 a3@4 a2@2, [c4,e4]@15 ~, a1@3 ~, ~ a4@15", Q: "~@4 [f#3,b3]@11 ~, d#4, ~ f#4@15",
  R: "~@4 [e3,g3]@9 ~@3, [b3,e4,g4]@7 ~@9", S: "~@3 g2, g3@15 ~", T: "~@3 c3@5, c4@13 ~@3, ~ [e4,a4]@12 ~@3",
  U: "[e2,b2]", V: "~ [c#4,e4,g4] [e4,g4,c#5] [g4,a#4] [a#4,c#5,g5]@3 e5",
  W: "~ f#3 ~ f#3 c#4@2 c4 e3, a4@2 a4 ~@5, ~@5 c5@2 ~@9", X: "[[a4,b4,d5]@5 ~@19, [d#2,d#3]@3 ~]/3", Y: "~@10 c6 ~@5",
})).s("gm_piano").gain(0.14).pan(0.7)

// bass · fretless bass · "Synth Bass 2"
const bass = note("<~@64 A@23 B@6 C B D A@7 E B@5 F B F G ~@11>".pickRestart({
  A: "e2 ~@7 e2 ~@7", B: "e2 ~@3 e2 ~@3 e2 ~@3 e2 ~@3", C: "c3 ~@3 c3 ~@3 e2 ~@3 e2 ~@3", D: "e2 ~@3 e2 ~@3 e2 ~@7",
  E: "e2 ~@7 e2 ~@3 e2 ~@3", F: "e2 ~@3 e2 ~@3 c2 ~@3 c2 ~@3", G: "c2 ~@3 c2 ~@3 c2 ~@3 c2 ~ e2 ~",
})).s("gm_fretless_bass").gain(0.48)

// other · acoustic guitar nylon · "Wood Block"
const acoustic_guitar_nylon = note("<~@24 A B@2 C D E F G ~@44 H I J K@7 L ~@18 M@16 N ~@2>".pickRestart({
  A: "~@5 [g3,b3]!6 ~@5", B: "~@5 [f#3,b3]!6 ~@5", C: "~@5 [e3,a3]!6 ~@5", D: "~@5 [d3,g3]!6 ~@5",
  E: "~@5 [c3,f3]!6 ~@5", F: "~@5 [b2,d#3]!6 ~@5", G: "~@5 [c3,e3]!6 ~@5", H: "~@8 [b3,d4]!4 ~@2 e4@2",
  I: "a#3 [g3,a3] e3@2 ~@2 e4@4 e4 [b3,d4] e4@4", J: "~@4 a3@2 [a4,a#4] [g4,a4] a4@2 ~@6",
  K: "b3 e4@2 d4 e4@2 e4!2 d4 e4@2 d4 e4@2 ~ e4", L: "b3 e4@2 d4 e4@2 e4!2 d4 e4@2 d4 e4@2 ~@2",
  M: "b2 e3@2 d3 e3@2 e3!2 d3 e3@2 d3 e3@2 ~ e3", N: "b2 e3@2 d3 e3@2 e3!2 d3 ~@7",
})).s("gm_acoustic_guitar_nylon").gain(0.11)

// other · acoustic guitar nylon · "Wood Block" · soft notes
const acoustic_guitar_nylon_2 = note("<~@24 A B@2 C D E F G ~@47 H@7 I ~@18 J@16 ~@3>".pickRestart({
  A: "~@2 [g3,b3]!3 ~@6 [g3,b3]!2 b3 ~@2", B: "~@2 [f#3,b3]!3 ~@6 [f#3,b3]!2 b3 ~@2",
  C: "~@2 [e3,a3]!3 ~@6 [e3,a3]!2 a3 ~@2", D: "~@2 [d3,g3]!3 ~@6 [d3,g3]!2 g3 ~@2",
  E: "~@2 [c3,f3]!3 ~@6 [c3,f3]!2 f3 ~@2", F: "~@2 [b2,d#3]!3 ~@6 [b2,d#3]!2 d#3 ~@2",
  G: "~@2 [c3,e3]!3 ~@6 [c3,e3]!2 e3 ~@2", H: "~@14 e4 ~", I: "~@7 e4", J: "~@14 e3 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.04)

// chords · piano · "MIDI"
const piano_2 = note("<~@83 A ~ B@2 ~@37>".pickRestart({
  A: "~@4 [d3,a3]!4 d3@2 [d3,g3]@4 ~@2, ~@2 a3 ~", // D5 G5
  B: "[~@4 [d3,a3]!4 [d3,a3]@2 [d3,g3]@2 [g3,b3]@2 [g3,b3,d4]@8 ~@10]/2", // D5 G5 G
})).s("gm_piano").gain(0.51).pan(0.6)

// bass · synth bass 2 · "MIDI"
const bass_2 = note(`<
  ~@12 A B@2 C D E@2 F G H D A@2 B@2 C D E@2 F G H D I J B K A L M N O P@2 A B@2 C D E@2 F A Q D A G R S@2 ~@62
>`.pickRestart({
  A: "e2", B: "d2", C: "c#2", D: "b1", E: "a1", F: "g1", G: "g2", H: "f#2@3 c2", I: "e2@2 e2 f#2",
  J: "g2@3 g2 b1@2 d2@2", K: "a2@7 e2 a2@4 g2@4", L: "g2@3 g2 b2@2 c3@2", M: "d3@3 a2 d2@4", N: "c2@3 g2",
  O: "b2@5 f#2@2 f#2", P: "b2/2", Q: "a2", R: "f#2", S: "b1/2",
})).s("gm_synth_bass_2").gain(0.26)

// bass · synth bass 2 · "MIDI"
const bass_3 = note(`<
  ~@12 A B@2 C D E@2 F G H D A@2 B@2 C D E@2 F G H D I J B K A L M N O P@2 A B@2 C D E@2 F A Q D A G R S@2 T@8 ~@16 U@7
  V@3 ~ W X ~@2 W X ~@21
>`.pickRestart({
  A: "e2", B: "d2", C: "c#2", D: "b1", E: "a1", F: "g1", G: "g2", H: "f#2@3 c2", I: "e2@2 e2 f#2",
  J: "g2@3 g2 b1@2 d2@2", K: "a2@7 e2 a2@4 g2@4", L: "g2@3 g2 b2@2 c3@2", M: "d3@3 a2 d2@4", N: "c2@3 g2",
  O: "b2@5 f#2@2 f#2", P: "b2/2", Q: "a2", R: "f#2", S: "b1/2", T: "e1/8", U: "[~@7 e1@48 c1]/7",
  V: "[~@3 e1@17 ~@4]/3", W: "~@12 d2 e2 g2 b2", X: "d3 c#3 ~@6",
})).s("gm_synth_bass_2").gain(0.26)

// drums · kick
const kick = s("bd").struct("<~@74 A@12 B C@5 D E C@2 A@7 F C@5 G C E D ~@11>".pickRestart({
  A: "x!2", B: "x ~@3 x ~@2 x", C: "x!4", D: "x ~ x ~ x ~ x!2", E: "x ~ x!3 ~ x ~", F: "x ~@2 x!2 ~ x ~",
  G: "x ~ x!3 ~ x!2",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@90 A ~ B C ~ D ~@7 C ~@3 E ~ F ~ G B ~@11>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x", C: "~@3 x ~@4", D: "~ x", E: "~@3 x!2 ~@3 x ~@7", F: "~@3 x ~@3 x", G: "x ~ x!2 ~@4",
})).gain(0.61)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@23 [~ x ~ x]!20 ~@3 [~ x ~ x]!14 ~@2 [~ x ~ x]!17 ~@45>").gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@73 A ~@12 A ~@3 B ~@16 C ~@3 D ~@12>".pickRestart({
  A: "~@7 x", B: "~@8 x!2 ~@6", C: "~@6 x!2 ~@8", D: "~@3 x ~@12",
})).gain(0.61)

// drums · crash
const crash = s("cr").struct("<~@86 A ~@5 A B ~ C ~@7 B ~@5 D ~ B A ~@11>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~ x", D: "~@3 x ~@3 x",
})).gain(0.61)

// drums · high tom
const high_tom = s("ht").struct("<~@111 [~ x ~@6] ~@12>").gain(0.61)

// drums · tambourine
const tambourine = s("tb").struct("<~@78 A B@7 C D B@4 E F B G ~@7 H B@5 I B F E ~@11>".pickRestart({
  A: "~@13 x!3", B: "x!16", C: "x!15 ~", D: "~ x!15", E: "x!14 ~@2", F: "x!6 ~@2 x!8", G: "x!8 ~@2 x!6", H: "~@8 x!8",
  I: "x!6 ~@2 x!6 ~@2",
})).gain(0.14)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@13 A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~@33 A ~@10 A ~@5 A ~@17 A ~@2 B ~@20
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@2",
})).gain(2.41)

// drums · shaker
const shaker = s("sh").struct("<~@21 [~ x!8 ~@7] ~@51 [~@13 x ~@2] ~@29 [~@3 x ~@12] ~@20>").gain(0.07)

// drums · claves
const claves = s("clave:2").struct("<~@103 [~ x ~@2] ~@20>").gain(2.99)

// drums · bell tree
const bell_tree = s("marktrees:0").struct("<~@73 [~@7 x] ~@50>").gain(3.64)

stack(
  piano, piano_soft, bass, acoustic_guitar_nylon, acoustic_guitar_nylon_2, piano_2, bass_2, bass_3, kick, low_tom,
  pedal_hat, mid_tom, crash, high_tom, tambourine, cabasa, shaker, claves, bell_tree
)

More by Dire Straits