Strudelify

If Looks Could Kill

Heart

KeyB♭ majorTempo156 bpm
0:00/0:00
// If Looks Could Kill — Heart
// 156 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 131 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(156/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 pick · "Bass"
const bass = note(`<
  A@3 B A@3 B C D E F G H C I C D E F G H C I J@2 K@2 L@2 M@2 J@2 K@2 N@2 A@3 B C D E F G H C I C D E F G H C I J@2 K@2
  L@2 M@2 J@2 K@2 N@2 A@3 B A@3 B C D E F G H C I J@2 K@2 L@2 M@2 J@2 K@2 N@2 J@2 K@2 L@2 M@2 J@2 K@2 J@2 E M A@3 B A@3
  B A@3 B ~
>`.pickRestart({
  A: "g1!2 g2 g1!3 g2 g1", B: "eb2@2 eb2 f2@4 f2", C: "g1!8", D: "g1!7 d2", E: "eb2!8", F: "eb2!7 f2", G: "f2!7 d2",
  H: "d2!8", I: "g1!3 eb2@2 f2@3", J: "[g1!4 eb2!3 f2@2 f2!7]/2", K: "[c2!4 eb2!3 f2@2 f2!7]/2",
  L: "[g1!4 eb2!3 bb1@2 bb1!7]/2", M: "f2!8", N: "[g1!4 eb2!3 bb1@2 bb1!5 a1!2]/2",
})).s("gm_electric_bass_pick").gain(0.38)

// chords · distortion guitar · "Rhythm Guitar"
const distortion_guitar = note(`<
  A B@3 A B@3 A C D E F G H I A C D E F G J I K@2 L@2 M N O@2 K@2 L@2 M P A B@3 A C D E F G H I A C D E F G J I K@2 L@2
  M N O@2 K@2 L@2 M P A B@3 A B@3 A C D E F G J I K@2 L@2 M N O@2 K@2 L@2 M P K@2 L@2 M N O@2 K@2 L@2 M Q D F A B@3 A
  B@3 A B@3 ~
>`.pickRestart({
  A: "g2 ~ g2 ~ [g2,d3,g3]@2 g2 ~ g2 ~ g2 ~ [g2,d3,g3]@2 g2 ~", // G5
  B: "[g2 ~ g2 ~ [g2,d3,g3]@2 g2 ~ c3@2 d3@2 f3@2 ~@2 g2 ~ g2 ~ [g2,d3,g3]@2 g2 ~ g2 ~ g2 ~ [g2,d3,g3]@2 [eb3,bb3,eb4]@8 [f2,c3,f3]@8 ~@2, ~@14 g3@5 ~@29]/3", // G5 Eb5 F5
  C: "g2 ~ g2 ~ [g2,d3,g3]@2 g2 ~ g2 ~ g2 ~ [g2,d3,g3]@2 eb2 ~", // G5
  D: "eb2 ~ eb2 ~ [eb2,bb2,eb3]@2 eb2 ~ eb2 ~ eb2 ~ [eb2,bb2,eb3]@2 eb2 ~", E: "eb2 ~ eb2 ~ d3@2 eb3@2 f3@2 bb3@6",
  F: "f2 ~ f2 ~ [f2,c3,f3]@2 f2 ~ f2 ~ f2 ~ [f2,c3,f3]@2 f2 ~", // F5
  G: "d2 ~ d2 ~ [d2,a2,d3]@2 d2 ~ d2 ~ d2 ~ [d2,a2,d3]@2 d2 ~", // D5
  H: "g2 ~ g2 ~ [g2,d3,g3]@2 g2 ~ g2 ~ g2 ~ [g2,d3,g3]@2 ~@2", I: "g2 ~ g2 ~ [g2,d3,g3]@2 [eb2,bb2,eb3]@4 [f2,c3,f3]@6",
  J: "g2 ~ g2 ~ [g2,d3,g3]@2 g2 ~ [g2,d3,g3]@2 [a2,e3,a3]@2 [g2,d3,g3]@2 [g2,d3,g3]@2", // G5 A5 G5
  K: "[g2 ~ g2 ~ [g2,d3,g3]@4 [eb2,bb2,eb3]@6 [f2,c3,f3]@10 f2 ~ f2 ~ [f2,c3,f3]@4]/2", // G5 Eb5 F5
  L: "[c3 ~ c3 ~ [c3,g3,c4]@4 [eb2,bb2,eb3]@6 [f2,c3,f3]@10 f2 ~ f2 ~ [f2,c3,f3]@4]/2", M: "[g2,d3,g3] [eb2,bb2,eb3]",
  N: "[bb2,f3,bb3]", O: "[[f2,c3,f3]@3 c4 bb4 a4 f4 c4@9]/2", P: "[bb2,f3,bb3]@7 [g2,d3,g3]", Q: "[f2,c3,f3]",
})).s("gm_distortion_guitar").gain(0.23)

// other · overdriven guitar · "Lead Guitar"
const overdriven_guitar = note("<~@4 A B C@2 ~@64 D E@2 F G@4 ~@38 A B H@3 I J K@5 L>".pickRestart({
  A: "~@2 [g4,bb4] ~@2 [g4,bb4] ~@2", B: "[g4,bb4]@2 ~@4 [g4,bb4]@2 ~@4 f4 ~ f4@2", C: "[~@2 f4@3 ~ g4@16 ~@10]/2",
  D: "d5@12 c5 bb4 c5 ~", E: "[c5@8 bb4@2 g4@2 bb4@2 g4@8 d4 ~ f4 ~ g4 ~ f4 ~ g4 ~]/2", F: "g4@2 bb5@10 f4 d4 f4@2",
  G: "[g4@4 g4 f4 bb4@6 g4 f4 g4@4 bb4@2 a4@2 g4@4 bb4@2 a4@2 g5@8 g5 ~ g5@2 f5@2 d5@2 g5@4 bb5@14]/4",
  H: "[~@2 f4@3 ~ g4@3 ~ g4 ~ g4 f4 c4@4 bb3@2 g4@6 bb4@2 g4@6 d5@10 ~@2 d5 ~]/3", I: "~@2 d5 ~@3 d5 ~@3 d5 ~@3 d5 ~",
  J: "~@2 d5 ~ d5 ~ d5 ~ d5 ~ d5 ~ d5!3 c5",
  K: "[c5@4 bb4@2 a4@6 bb4@2 g4@6 g4@6 g4 f4 d4@2 bb4@6 bb4@10 g4@5 ~ g4 f4 bb4@6 g4 f4 g4@6 g4 f4 d4@8 bb3@2]/5",
  L: "g3 ~@15",
})).s("gm_overdriven_guitar").gain(0.38)

// chords · string ensemble 1 · "Synth"
const string_ensemble_1 = note(`<
  ~@16 A B C B A B D@2 E@2 F@2 G@2 H@2 E@2 F@2 I@2 ~@12 A B C B A B D@2 E@2 F@2 G@2 H@2 E@2 F@2 I@2 ~@8 A B C B A B D@2
  E@2 F@2 G@2 H@2 E@2 F@2 I@2 E@2 F@2 G@2 H@2 E@2 F@2 J@2 K@3 ~@12
>`.pickRestart({
  A: "bb3", B: "a3", C: "[g3,bb3]", D: "g3/2", E: "[~@4 [g4,d5,g5]@2 ~@2 [eb4,bb4,eb5]@5 ~ [f4,c5,f5]@18]/2",
  F: "[~@4 [c4,g4,c5]@2 ~@2 [eb4,bb4,eb5]@5 ~ [f4,c5,f5]@18]/2", G: "[[g4,d5,g5]@4 [eb4,bb4,eb5]@3 [bb3,f4,bb4]@9]/2",
  H: "[f4,c5,f5]/2", I: "[[g4,d5,g5]@4 [eb4,bb4,eb5]@3 [bb3,f4,bb4]@8 ~]/2",
  J: "[[g4,d5,g5]@4 [eb4,bb4,eb5]@3 [f4,c5,f5]@9]/2", // G5 Eb5 F5
  K: "[~@23 f5@3 ~@4 f5@4 ~@14, eb5 bb5 eb5 bb5 f5 c6 ~ c6 ~@4, ~ f5@2 f5@2 f5@2 eb5@2 g5@2 g5@2 g5@2 ~@9]/3",
})).s("gm_string_ensemble_1").gain(0.21)

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

// drums · snare
const snare = s("sd").struct(`<
  A@3 B A@3 B A@7 C A@7 C A@7 D A@9 B A@7 C A@7 C A@7 E A@9 B A@3 B A@7 C A@7 E A@7 F A@5 F A@7 G A@3 B A@3 B A@3 B ~
>`.pickRestart({
  A: "~ x ~ x", B: "x ~@2 x ~@4", C: "~@2 x!2 ~ x ~ x", D: "~@4 x ~@5 x ~ x!4", E: "x!4 ~@2 x!4 ~@2 x!2 ~@2",
  F: "~@4 x ~@5 x!6", G: "~@4 x ~@5 x!4 ~@2",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@65 [~@10 x!2 ~@2 x!2] ~@29 [~@10 x!2 ~@2 x!2] ~@21 [~@14 x!2] ~@13>").gain(0.48)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A@3 B A@3 B A@4 C A@2 D A@4 C A@2 D ~@14 A@3 B A@4 C A@2 D A@4 C A@2 D ~@14 A@3 B A@3 B A@4 C A@2 D ~@30 C A@2 B A@3 B
  A@3 B ~
>`.pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "~ x!2 ~ x ~@3", C: "~ x ~ x!3 ~ x", D: "x!2 ~@6",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@65 [~@4 x!2 ~@10] ~@29 [~@4 x!2 ~@10] ~@35>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@3 B A@3 B A@7 C A@7 C@2 ~ C ~@5 C ~ C ~@3 A@3 B A@7 C A@7 C@2 ~ C ~@5 C ~ C ~@3 A@3 B A@3 B A@7 C@2 ~ C ~@5 C ~ C
  ~@3 C ~ C ~@5 C ~ C ~@5 A@3 B A@3 B A@3 B ~
>`.pickRestart({
  A: "~ x ~ x", B: "x", C: "~ x ~@2",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@3 A ~@4 B ~@2 C ~@4 B ~@2 C D ~ D ~ E B@2 ~ D ~ D ~ E F ~@3 A ~@4 B ~@2 C ~@4 B ~@2 C D ~ D ~ E B F ~ D ~ D ~
  E F ~@3 A ~@3 A ~@4 B ~@2 C D ~ D ~ E B F ~ D ~ D ~ E B D ~ D ~ E B F ~ D ~ D ~ E F ~@2 B ~@2 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~@3 x ~@3 x", B: "x", C: "~@3 x ~ x ~@2", D: "x ~@3 x ~@2 x", E: "x!2", F: "x ~@6 x",
})).gain(0.48)

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

stack(
  bass, distortion_guitar, overdriven_guitar, string_ensemble_1, kick, snare, low_tom, pedal_hat, mid_tom, open_hat,
  crash, ride
)

More by Heart