Strudelify

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

// bass · slap bass 1 · "SLAPBASS 1"
const bass = note(`<
  A B A C A B A C A B A C A B A C D E F G D H I J K L M N O P Q R S@2 T S A B A C A B A C D E F G D H I J K L M N O P Q
  R U V W X Y Z AA AB A B A C A B A C D E F G D H I J AC ~@3 AC ~@3 K L M N K L M N K L M N K L M N K L M N K L M ~ AC
>`.pickRestart({
  A: "~@7 d1 ~@2 d1@3 ~@3", B: "~@7 d1@2 ~ d1@3 ~@3", C: "~@7 d1 ~@2 d1@4 ~@2", D: "g1@4 ~@3 g2 ~ g2 g1@2 g2@2 g1 ~",
  E: "a1@4 ~@2 a2 ~@2 a2 a1@2 c2@2 d2@2", F: "g1@4 ~@3 g2 ~ g2 g1 ~ g2@2 g1 ~", G: "a1@4 ~@2 a1 ~@2 a1 a2@2 c2@2 d2@2",
  H: "a1@4 ~@3 a2 ~ a2 a1@2 a2@2 a1 ~", I: "g1@3 ~ a1@3 ~", J: "bb1@7 ~ c2@7 ~", K: "d2 d1 d2@2 ~@6 d2 d1 ~ a1 ~ d2",
  L: "f1@4 ~@6 f2 f1 ~ f1 g1 ~", M: "bb1@4 ~@2 bb1 bb2 ~ bb2 ~ bb1 bb2@3 ~", N: "e1@6 e2 a1 ~ a1 ~ a1 a2@2 a1 ~",
  O: "d2 ~@5 d2 d1 ~ d1 ~ d1 d2@3 ~", P: "f1 f2 f1 ~@6 f1 f2 ~ f2@2 a1 ~",
  Q: "bb1@4 ~@2 bb2 bb1 ~ bb1 bb2@2 bb1 ~ bb2 ~", R: "e1@2 e2 e1 a1 ~@3", S: "~@7 d2 ~@2 d2@3 ~@3",
  T: "~@7 d2 ~@2 d2@4 ~@2", U: "bb2@2 bb1 bb2 ~ bb2@2 bb1 ~ bb1 bb2@2 bb1@2 bb2@2",
  V: "c2 ~ c2 c3@2 c2 c3 [g2,a2] c2@2 c3@3 c2 c3@2", W: "a1@3 a2 ~ a2 a1 ~ a2@2 e2@2 a1@2 a2 ~",
  X: "d2@4 c2@3 ~ d2@3 ~ d2@2 a1@2", Y: "g1@3 g2 ~ g1 g2 ~ g2@3 g2@2 g1 g2@2",
  Z: "a1@3 a2 ~ a2 ~@2 a2 e2 a1@2 a2@2 a1 ~", AA: "bb1@3 bb2 ~ bb2 ~ bb1 bb2@2 bb1 bb2@2 bb1 bb2@2",
  AB: "c2@3 ~ c3@3 ~ c3@2 ~@6", AC: "d2 ~@7",
})).s("gm_slap_bass_1").gain(0.72)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B A C A B A C D E F C G@2 A C H I H I H I J K L M N O L M P Q R@2 S R D E F C G@2 A C H I H I H I J K L M N O L M P
  T U V W X Y Z AA AB A B A C A B A C H I H I H I J K AC ~@3 AC ~@11 L M N O L M P Q L M N O L M P ~ AD
>`.pickRestart({
  A: "~@7 d2 ~@2 d2@3 ~@3", B: "~@7 d2@2 ~ d2@3 ~@3", C: "~@7 d2 ~@2 d2@4 ~@2", D: "[a3,c4,f4] ~@6 d2 ~@2 d2@3 ~@3",
  E: "~@7 d2@2 ~ d2@3 ~ d4 ~", F: "d4!2 d3 ~@4 d2 ~@2 d2@3 ~@3",
  G: "[[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
  H: "[f3,a3,bb3,d4]@15 ~", I: "[g3,c4,d4]@13 ~@3", J: "[f3,a3,bb3,d4]@7 ~ [g3,c4,d4]@6 ~@2",
  K: "[bb3,c4,d4,f4]@7 ~ [bb3,c4,d4,f4,a4]@6 ~@2", L: "~@4 [a3,d4]@3 [g3,c4]@2 ~ [a3,d4] ~@5",
  M: "~@4 [a3,d4]@2 ~ [g3,c4]@2 ~ [a3,d4] ~@5", // D5 C5 D5
  N: "bb2@4 [f3,a3,bb3,d4]@2 bb2 [f3,a3,bb3,d4]@2 ~@4 bb2 [f3,a3,bb3,d4] ~", // Bbmaj7
  O: "[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
  P: "~@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
  Q: "[e3,g3,d4]@4 [e3,g3,d4]@4 [a2,e3,g3,db4] ~@7, e2 ~", R: "~@7 d3 ~@2 d3@3 ~@3", S: "~@7 d3 ~@2 d3@4 ~@2",
  T: "[e3,g3,d4]@4 [e3,g3,d4]@4 [a2,e3,g3,db4] ~@3 [bb3,bb4]@3 ~, e2@2 [c4,c5] ~", U: "[bb2,d4,f4,a4]@7 ~",
  V: "[e4,g4,a4,c5]@15 ~, c3@3 ~", W: "[a3,e4,a4,c5]@7 ~", X: "[g3,a3,d4,g4]@7 ~ [gb3,a3,d4,gb4]@7 ~",
  Y: "[bb3,d4,f4,a4]@15 ~, bb2@7 ~@9", Z: "[a3,c4,e4,g4]@15 ~", AA: "[bb3,d4,f4,a4]@15 ~",
  AB: "c4!2 ~ c4 ~ c4!2 ~ c5 ~@7, [d4,f4,c5]@7 ~@9", AC: "[d2,d3,d4] ~@7, f3 ~@15", AD: "[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@2 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 J ~@17 A B ~@2 C B ~@2 K
>`.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: "~@4 [a4,a5]@2 ~@2 [g4,g5] ~@7",
  K: "[d4,f4,a4] ~@15", // Dm
})).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
)