Strudelify

Shot in the dark

Henry Mancini

KeyE minorTempo130 bpm
0:00/0:00
// Shot in the dark — Henry Mancini
// 130 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Transcription provider: pdmx. https://musescore.com/score/5427944; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · overdriven guitar · "Bajo"
const bass = note(`<
  ~@2 A B A B A B A B A B C ~ A B A B A B C D E D E D E D F@2 A B A B A B G H I ~ A B A B A B A B A B A B A B A J E D E
  D E D F@2 A B A B A B G H K@2 L@2
>`.pickRestart({
  A: "e1 f1 f#1 g1", B: "g#1 a1 a#1 b1", C: "e1 ~ f1 ~ g1 f1 ~ e1", D: "~@2 e1 g1 a1 g1 e1@2", E: "g1@2 g1 e1@5",
  F: "[b1@2 b1@4 b1 b1@2 b1!4 a1 g1 f#1]/2", G: "b1 ~ b1 ~ d2!2 ~@2", H: "c#2 ~ c#2 ~ c2!2 ~@2",
  I: "b1 ~ b1 ~ b1!2 ~ b1", J: "e1!3 g1 a1 g1 e1@2", K: "[~ e1@2 e1@2 e1@2 g1]/2", L: "a1/2",
})).s("gm_overdriven_guitar").gain(0.3)

// other · distortion guitar · "Guitarra Ritmica"
const distortion_guitar = note(`<
  ~@2 A B A B A B A B A B C@2 A B A B A B ~@9 D A B A B A B ~@4 A B A B A B A B A B A B A B A E ~@7 D A B A B A B F G
  H@2 I@2
>`.pickRestart({
  A: "e2!2 b2!2 e3!2 d#3!2", B: "d3!2 c#3!2 c3!2 b2!2", C: "[e3@2 f3@2 g3 f3@2 e3@2 b2!4 a2 g2 f#2]/2",
  D: "~ b2!4 a2 g2 f#2", E: "e3!2 ~@6", F: "[f#3,b3,e4] ~ [f#3,b3,e4] ~ [a3,d4,g4]!2 ~@2",
  G: "[b3,e4,a4] ~ [b3,e4,a4] ~ [a3,c4,g4]!2 ~@2", H: "[~ [e4,a4]@2 [e4,a4]@2 [e4,a4]@2 [d5,g5]]/2", I: "[e5,a5]/2",
})).s("gm_distortion_guitar").gain(0.29).pan(0.7)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@57 x ~ x ~ x ~@14>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<A B C@10 ~@2 C@6 ~@2 D C D C D C@2 ~ C@6 ~@4 C@15 ~ C@7 ~ C@6 ~@6>".pickRestart({
  A: "~@15 x", B: "~@3 x ~@3 x ~@4 x ~@3", C: "~ x ~ x", D: "~ x ~@2",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@13 A ~@8 B C B C B C ~ A C@6 ~@4 C@15 ~ C@7 A C@6 ~@6>".pickRestart({
  A: "~@9 x!3 ~ x!3", B: "~@3 x", C: "x",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@13 [~@2 x!2] ~@15 [~@2 x!2] ~@33 [~@2 x!2] ~@12>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@72 [~ x ~ x]!2 x ~>").gain(0.3)

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

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

More by Henry Mancini