Strudelify
No Crime cover art

1994 · In Control

No Crime

Beres Hammond

KeyD minorTempo118 bpm
0:00/0:00
// No Crime — Beres Hammond
// 118 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 · slap bass 1 · "SLAPBASS 1"
const bass = note(`<
  A@16 B C B D B E F G H I J K L M N O P@4 A@8 B C B D B E F G H I J K L M N O Q R S T U V W X A@8 B C B D B E F G Y ~@3
  Y ~@3 H I J K H I J K H I J K H I J K H I J K H I J ~ Y
>`.pickRestart({
  A: "~@7 d1 ~@2 d1@3 ~@3", B: "g1@4 ~@3 g2 ~ g2 g1@2 g2@2 g1 ~", C: "a1@4 ~@2 a2 ~@2 a2 a1@2 c2@2 d2@2",
  D: "a1@4 ~@2 a1 ~@2 a1 a2@2 c2@2 d2@2", E: "a1@4 ~@3 a2 ~ a2 a1@2 a2@2 a1 ~", F: "g1@3 ~ a1@3 ~", G: "bb1@7 ~ c2@7 ~",
  H: "d2 d1 d2@2 ~@6 d2 d1 ~ a1 ~ d2", I: "f1@4 ~@6 f2 f1 ~ f1 g1 ~", J: "bb1@4 ~@2 bb1 bb2 ~ bb2 ~ bb1 bb2@3 ~",
  K: "e1@6 e2 a1 ~ a1 ~ a1 a2@2 a1 ~", L: "d2 ~@5 d2 d1 ~ d1 ~ d1 d2@3 ~", M: "f1 f2 f1 ~@6 f1 f2 ~ f2@2 a1 ~",
  N: "bb1@4 ~@2 bb2 bb1 ~ bb1 bb2@2 bb1 ~ bb2 ~", O: "e1@2 e2 e1 a1 ~@3", P: "~@7 d2 ~@2 d2@3 ~@3",
  Q: "bb2@2 bb1 bb2 ~ bb2@2 bb1 ~ bb1 bb2@2 bb1@2 bb2@2", R: "c2 ~ c2 c3@2 c2 c3 [g2,a2] c2@2 c3@3 c2 c3@2",
  S: "a1@3 a2 ~ a2 a1 ~ a2@2 e2@2 a1@2 a2 ~", T: "d2@4 c2@3 ~ d2@3 ~ d2@2 a1@2",
  U: "g1@3 g2 ~ g1 g2 ~ g2@3 g2@2 g1 g2@2", V: "a1@3 a2 ~ a2 ~@2 a2 e2 a1@2 a2@2 a1 ~",
  W: "bb1@3 bb2 ~ bb2 ~ bb1 bb2@2 bb1 bb2@2 bb1 bb2@2", X: "c2@3 ~ c3@3 ~ c3@2 ~@6", Y: "d2 ~@7",
})).s("gm_slap_bass_1").gain(0.72)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A@8 B C D A E@2 A@2 F G F G F G H I J@2 K L J@2 M N O@4 B C D A E@2 A@2 F G F G F G H I J@2 K L J@2 M P Q R S T U V W
  X A@8 F G F G F G H I Y ~@3 Y ~@11 J@2 K L J@2 M N J@2 K L J@2 M ~ Z
>`.pickRestart({
  A: "~@7 d2 ~@2 d2@3 ~@3", B: "[a3,c4,f4] ~@6 d2 ~@2 d2@3 ~@3", C: "~@7 d2@2 ~ d2@3 ~ d4 ~",
  D: "d4!2 d3 ~@4 d2 ~@2 d2@3 ~@3",
  E: "[[a3,c4,f4] ~@6 d2 ~@2 d2@2 c4 ~@2 c4@2 ~ b3 ~@5 c4 ~ d2@2 a3 ~ b3 d4, ~@23 d2@2 ~ b3 ~@5]/2", // F
  F: "[f3,a3,bb3,d4]@15 ~", G: "[g3,c4,d4]@13 ~@3", H: "[f3,a3,bb3,d4]@7 ~ [g3,c4,d4]@6 ~@2",
  I: "[bb3,c4,d4,f4]@7 ~ [bb3,c4,d4,f4,a4]@6 ~@2", J: "~@4 [a3,d4]@3 [g3,c4]@2 ~ [a3,d4] ~@5",
  K: "bb2@4 [f3,a3,bb3,d4]@2 bb2 [f3,a3,bb3,d4]@2 ~@4 bb2 [f3,a3,bb3,d4] ~", // Bbmaj7
  L: "[e3,g3,d4]@4 [e3,g3,d4]@3 [e3,g3,db4]@5 ~ [e3,g3,db4] a2 ~, e2@7 a2 ~@4 a2@2 ~@2", // Em7 Dbdim
  M: "~@2 f3@2 [f3,a3,bb3,d4]@2 bb2 [f3,a3,bb3,d4]@2 bb2 [f3,a3,bb3,d4]@3 ~@3, bb2@3 ~@5", // Bbmaj7
  N: "[e3,g3,d4]@4 [e3,g3,d4]@4 [a2,e3,g3,db4] ~@7, e2 ~", O: "~@7 d3 ~@2 d3@3 ~@3",
  P: "[e3,g3,d4]@4 [e3,g3,d4]@4 [a2,e3,g3,db4] ~@3 [bb3,bb4]@3 ~, e2@2 [c4,c5] ~", Q: "[bb2,d4,f4,a4]@7 ~",
  R: "[e4,g4,a4,c5]@15 ~, c3@3 ~", S: "[a3,e4,a4,c5]@7 ~", T: "[g3,a3,d4,g4]@7 ~ [gb3,a3,d4,gb4]@7 ~",
  U: "[bb3,d4,f4,a4]@15 ~, bb2@7 ~@9", V: "[a3,c4,e4,g4]@15 ~", W: "[bb3,d4,f4,a4]@15 ~",
  X: "c4!2 ~ c4 ~ c4!2 ~ c5 ~@7, [d4,f4,c5]@7 ~@9", Y: "[d2,d3,d4] ~@7, f3 ~@15", Z: "[d3,f3,a3] ~@15, d4 ~@7",
})).s("gm_piano").gain(0.56)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@4 A@4 ~@8 B C B C B C D E F G ~@2 H G ~@14 B C B C B C D E F G ~@2 H G ~@2 I J K L M N M O A@8 B C B C B C D E ~@28
  P@3 ~@2
>`.pickRestart({
  A: "[[g5,a5,c6,d6]@31 ~]/4", B: "[f4,a4,bb4,d5]@15 ~", C: "[g4,c5,d5]@13 ~@3",
  D: "[f4,a4,bb4,d5]@7 ~ [g4,c5,d5]@6 ~@2", E: "[bb4,c5,d5,f5]@7 ~ [bb4,c5,d5,f5,a5]@6 ~@2",
  F: "a5 ~@3 d6 ~@2 g5 ~@2 a5 ~@5", G: "~@2 a5 ~ d6 ~@2 g5 ~@2 a5 ~@5", H: "a5 ~@3 d6@2 ~ g5@2 ~ a5 ~@5",
  I: "[d5,f5,a5]@7 ~", J: "[e5,g5,a5,c6]@15 ~", K: "[a4,e5,a5,c6]@7 ~", L: "[g4,a4,d5,g5]@7 ~ [gb4,a4,d5,gb5]@7 ~",
  M: "[bb4,d5,f5,a5]@15 ~", N: "[a4,c5,e5,g5]@15 ~", O: "[c5,d5,f5,c6]@7 ~@9", P: "[d6@19 ~@5]/3",
})).s("gm_rock_organ").gain(0.5)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  ~@16 A B A B A B C D ~@7 E ~@12 A B A B A B C D ~@7 F G@3 H I J I K ~@8 A B A B A B C D L ~@3 L ~@27 M
>`.pickRestart({
  A: "~@7 [d4,f4,a4] ~@2 [d4,f4,a4]@2 ~@4", B: "~@10 [d4,f4,a4] ~@5", C: "a4 ~@7 c5 ~@7", D: "d5 ~@15",
  E: "[e4,g4,d5]@3 ~ [e4,g4,d5]@3 ~ [a4,db5,f5] ~@7", // Em7 Aaug
  F: "[e4,g4,d5]@3 ~ [e4,g4,d5]@3 ~ [a4,db5,f5] ~@3 [bb3,bb4]@4, ~@2 [c4,c5] ~", G: "~@7 [c5,c6] ~@2 [c5,c6]@3 ~@3",
  H: "~@4 [c4,c5] ~@2 [d4,d5]@4 ~ [c4,c5] ~ [d4,d5] ~", I: "~@7 [f4,f5] ~@2 [f4,f5]@2 ~@4",
  J: "~@7 [f4,f5] ~@2 [f4,f5]@3 ~@3", K: "c4!2 ~ c4 ~ c4!2 ~ c5 ~@7", L: "[d4,a4,d5] ~@7", M: "a4 ~@15",
})).s("gm_brass_section").gain(0.64)

// other · marimba
const marimba = note(`<
  ~@24 A B ~@2 C B ~@22 A B ~@2 C B ~@18 D E D E D E F G H I H ~ H I H ~@17 A B ~@2 C B ~@2 J
>`.pickRestart({
  A: "a4 ~@3 d5 ~@2 g4 ~@2 a4 ~@5", B: "~@2 a4 ~ d5 ~@2 g4 ~@2 a4 ~@5", C: "a4 ~@3 d5@2 ~ g4@2 ~ a4 ~@5",
  D: "~@7 [d4,f4,a4] ~@2 [d4,f4,a4]@2 ~@4", E: "~@10 [d4,f4,a4] ~@5", F: "a4 ~@7 c5 ~@7", G: "d5 ~@15",
  H: "~@4 [a4,a5] ~@3 [g4,g5] ~@7", I: "[a4,a5] ~@5 [g4,g5] ~@5 [c5,c6] ~@3", J: "[d4,f4,a4] ~@15",
})).s("gm_marimba").gain(0.66)

// drums · kick
const kick = s("bd").struct("<A@16 B@20 A@8 B@16 C@7 D B@16 E ~ E ~ E ~ E ~ B@15 F B@7 E@2>".pickRestart({
  A: "x ~@6 x ~@2 x ~@5", B: "x!2", C: "x ~@3 x!2 ~ x", D: "x ~@6 x!2 ~ x ~@3 x ~", E: "x", F: "x ~@7 x!4 ~ x!3",
})).gain(0.78)

// drums · rim
const rim = s("rim").struct(`<
  A@7 B A@7 C A@6 D B E@7 F A@3 C A@7 C A@6 D B E@7 F E@3 ~ E@3 G A C A C A C A H A@6 D B E@8 A@6 D B A@7 B E@6 I ~@2
>`.pickRestart({
  A: "~@4 x ~@2 x ~@4 x ~@3", B: "~@4 x ~@2 x ~@8", C: "~@4 x ~@2 x ~@4 x!4", D: "~@4 x ~ x!2 ~@4 x ~ x!2", E: "~@15 x",
  F: "~@10 x ~@2 x ~ x", G: "~@10 x!2 ~@3 x", H: "~@4 x ~@2 x ~@4 x!2 ~@2", I: "~@11 x!5",
})).gain(0.54)

// drums · snare
const snare = s("sd").struct("<~@7 A ~@15 B C@8 ~@19 B C@11 D C@3 E ~@7 B ~@7 B ~@15 B ~@7 F C@6 E ~ G>".pickRestart({
  A: "~@15 x", B: "~@14 x!2", C: "~ x ~ x", D: "~@4 x ~@7 x!4", E: "~ x ~@2", F: "~@2 x!2", G: "x",
})).gain(0.78)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@7 A ~@15 B ~@27 B ~@8 C@3 D C@3 ~@16 B ~@15 B ~@17>".pickRestart({
  A: "~@12 x!3 ~", B: "~@12 x!2 ~@2", C: "~@7 x ~@8", D: "~@7 x!5 ~@4",
})).gain(0.23)

// drums · clap
const clap = s("cp").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B A B A B ~@16 A B A B A B A B A B A
  B A B A B ~@8 A B A B A B A B A B A B A B A B ~@9
>`.pickRestart({
  A: "~ x ~@6", B: "~@3 x",
})).gain(0.78)

// drums · low tom
const low_tom = s("lt").struct("<[~@7 x ~@2 x ~@5]!8 ~@24 [~@7 x ~@2 x ~@5]!4 ~@32 [~@7 x ~@2 x ~@5]!8 ~@41>")
  .gain(0.78)

// drums · hihat
const hihat = s("hh").struct(`<
  A@24 B C B C B C B C A@20 B C B C B C B C B C B C B C B C A@16 B C B C B C B C A@16 B C B C B C B D ~
>`.pickRestart({
  A: "x ~ x ~ x ~ x!10", B: "x ~ x ~ x ~ x ~ x ~ x ~ x!4", C: "x ~ x ~ x ~ x ~ x!2 ~ x!5", D: "~ x ~ x",
})).gain(0.23)

// drums · mid tom
const mid_tom = s("mt").struct("<~@84 [~@7 x ~@2 x ~@5]!8 ~@24 x>").gain(0.78)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@3 A ~@3 A ~@3 A ~ B A@2 ~@3 A ~@2 A@2 ~@3 A ~@3 A ~@3 A ~@3 A ~ B A@2 ~@3 A ~@2 A@2 ~@3 A ~@11 A ~@3 A ~ B A@2
  ~ A ~ A ~ A ~ A ~@3 A ~ B A@2 ~@3 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "x", B: "x!2",
})).gain(0.78)

// drums · ride
const ride = s("rd").struct(`<
  A B A B A B ~ B ~ B ~ B ~ B ~ B C B C B C B C B ~@9 B ~ B ~ B ~ B ~ B ~ B C B C B C B C B ~@17 B ~ B ~ B ~ B C B C B C
  B C B ~@8 C B C B C B C B C B C B C B C B ~@9
>`.pickRestart({
  A: "~ x ~@2", B: "~@3 x", C: "~@5 x!2 ~",
})).gain(0.78)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@8 A B C D A B E B ~@16 A B A B A B C D A B E B ~@24 A B A B A B A B ~@8 F G F G F G F G ~@25
>`.pickRestart({
  A: "~@10 x ~@2 x ~@2", B: "~ x ~ x", C: "~@6 x ~@2 x ~@2 x ~@3", D: "~ x ~@2", E: "~@6 x ~@2 x ~@6",
  F: "~@2 x ~@2 x!2 ~ x ~@2 x ~@2 x!2", G: "~@2 x ~@5 x ~ x ~ x!2 ~ x",
})).gain(0.62)

// drums · shaker
const shaker = s("sh").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B C@8 A B A B A B A B A B A B A B A B A B A B C@16 A B A B A B A B A B A
  B A B A B C@8 A B A B A B A B A B A B A B A B C@7 ~@2
>`.pickRestart({
  A: "~@12 x!4", B: "x!5 ~@11", C: "x!16",
})).gain(0.23)

stack(
  bass, piano, rock_organ, brass_section, marimba, kick, rim, snare, snare_soft, clap, low_tom, hihat, mid_tom, crash,
  ride, cowbell, shaker
)