Strudelify

Engel

Rammstein

KeyD minorTempo96 bpm
0:00/0:00
// Engel — Rammstein
// 96 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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.

// other · piano
const piano = note("<~@87 A@3 ~ A@3 ~ A@3 ~ A@3 ~@4>".pickRestart({
  A: "[~@2 a3@15 ~@7]/3",
})).s("gm_piano").gain(0.05)

// other · overdriven guitar
const overdriven_guitar = note("<~@23 A@2 B ~ C@2 B ~@18 A@2 B D C@2 B D ~@12 E ~@3 F ~@33>".pickRestart({
  A: "[~@15 f5@3 f5@3 ~@11]/2", B: "~@7 f5", C: "[~@11 f5@3 ~ f5@3 f5@3 ~@11]/2", D: "~ f5 ~@6", E: "~@6 g5!2",
  F: "~@6 ab5!2",
})).s("gm_overdriven_guitar").gain(0.33).pan(0.3)

// other · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@69 [g5!2 ~@6] ~@3 [ab5!2 ~@6] ~@32>")
  .s("gm_overdriven_guitar").gain(0.22).pan(0.3)

// bass · synth bass 2
const bass = note(`<
  ~@4 A@3 B A@3 B A@3 B A B A B A B A B A B A B A B A B A@3 B A@3 B@2 A B A B A B A B A B A B A B A B A@3 B A@3 B A@3 B
  A@3 B C ~ D ~@3 D ~@3 D ~ A@3 B A@3 B A@3 B A@3 B C ~@4
>`.pickRestart({
  A: "c2 d2!3 eb2 d2!3 c2 d2!2 c2 d2!2 eb2 d2", B: "c2 d2!3 eb2 d2!3 c2 d2!2 c2 d2 f2!3", C: "d2 ~@15", D: "d3 ~@15",
})).s("gm_synth_bass_2").gain(0.49)

// bass · synth bass 2 · soft notes
const bass_soft = note("<~@73 A B C B A B C B A B C B ~@21>".pickRestart({
  A: "d3 d4!2 d3 f3 d4!2 d3 c3 a3 d3 d4!2 a3 d3!2", B: "d3 d4!2 d3 f3 d4!2 d3 c3 a3 d3 d4!2 f3!3",
  C: "~ d4!2 d3 f3 d4!2 d3 c3 a3 d3 d4!2 ab3 d3!2",
})).s("gm_synth_bass_2").gain(0.16)

// bass · fretless bass
const bass_2 = note(`<
  ~@4 A@3 B A@3 B A@3 B C D C D C D C D C D C D C D C D A@3 B A@3 B@2 C D C D C D C D C D C D C D C D A@3 B A@3 B C@3 D
  C@3 D E ~@11 A@3 B A@3 B A@3 B A@3 B F ~@4
>`.pickRestart({
  A: "[c2,c3] [d2,d3] ~@2 [eb2,eb3] [d2,d3] ~@2 [c2,c3] [d2,d3] ~ [c2,c3] [d2,d3] ~ [eb2,eb3] [d2,d3]", // C D Eb D C D C D …
  B: "[c2,c3] [d2,d3] ~@2 [eb2,eb3] [d2,d3] ~@2 [c2,c3] [d2,d3] ~ [c2,c3] [d2,d3] f2!2 [f2,f3]", // C D Eb D C D C D …
  C: "c3 d3 ~@2 eb3 d3 ~@2 c3 d3 ~ c3 d3 ~ eb3 d3", D: "c3 d3 ~@2 eb3 d3 ~@2 c3 d3 ~ c3 d3 ~@2 f3", E: "d3 ~@15",
  F: "[d2,d3] ~@15", // D
})).s("gm_fretless_bass").gain(0.21).pan(0.1)

// bass · fretless bass · soft notes
const bass_soft_2 = note(`<
  ~@4 A@3 B A@3 B A@3 B A B A B A B A B A B A B A B A B A@3 B A@3 B@2 A B A B A B A B A B A B A B A B A@3 B A@3 B A@3 B
  A@3 B ~@12 A@3 B A@3 B A@3 B A@3 B ~@5
>`.pickRestart({
  A: "~@2 d3!2 ~@2 d3!2 ~@2 d3 ~@2 d3 ~@2", B: "~@2 d3!2 ~@2 d3!2 ~@2 d3 ~@2 f3!2 ~",
})).s("gm_fretless_bass").gain(0.16).pan(0.1)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@8 A@3 B A@3 B ~@16 A@3 B A@3 B ~@17 A@3 B A@3 B C@8 D ~@11 A@3 B A@3 B A@3 B A@3 B D ~@4
>`.pickRestart({
  A: "c3 d3!3 eb3 d3!3 c3 d3!2 c3 d3!2 eb3 d3", B: "c3 d3!3 eb3 d3!3 c3 d3!2 c3 d3!4", C: "d3!16", D: "d3 ~@15",
})).s("gm_distortion_guitar").gain(0.49).pan(0.7)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@42 A ~ A ~ A ~ A ~@16 B C B C B C B C ~@33>".pickRestart({
  A: "d3!4 eb3 d3!6 c3 d3!4",
  B: "[d3,d6] [e3,e6] [f3,f6] ~@2 [d3,d6] ~@3 [f3,f6] [e3,e6] [d3,d6] [db3,db6] [e3,e6] ~@2", // D E F D F E D Db …
  C: "[g3,g6] [e3,e6] [f3,f6] ~@2 [e3,e6] ~@3 [a3,a6] [g3,g6] [f3,f6] [e3,e6]!2 [db3,db6] ~", // G E F E A G F E …
})).s("gm_lead_2_sawtooth").gain(0.31).pan(0.9)

// other · whistle
const whistle = note(`<
  A B C D A B C E ~@24 A B C D A B C E ~@17 A B C D A B C E ~@20 A B C D A B C F G H I J K L M N A B C O@2
>`.pickRestart({
  A: "d7@3 a6", B: "c7@3 a6", C: "b6@3 g6", D: "a6@5 ~@3", E: "d6@7 ~", F: "a6@7 ~", G: "d7@3 ~", H: "e7@5 ~@3",
  I: "g7@3 f7@3 e7@2", J: "d7@3 c7@3 bb6@2", K: "a6@4 g6@2 a6@9 ~", L: "a6@2 g6 a6@4 ~", M: "d7@3 f7", N: "d7@7 ~",
  O: "[d6@5 ~@3]/2",
})).s("gm_whistle").gain(0.19).pan(0.7)

// other · whistle · soft notes
const whistle_soft = note("<~@16 A@2 ~@2 B@2 ~@19 A@2 ~@2 B@2 ~@59>".pickRestart({
  A: "[~ d6@7, ~@4 bb8 ~@27]/2", B: "[~ d6@7, ~@4 c8 ~@27]/2",
})).s("gm_whistle").gain(0.05).pan(0.7)

// other · ocarina
const ocarina = note("<~@17 A B@6 C ~@15 D ~ A B@6 C ~@19 E ~@3 F ~@32>".pickRestart({
  A: "c4 [c4,d4] [a3,c4] [c4,d4] [a3,c4] [c4,d4] [a3,c4] [c4,d4] [a3,c4] [c4,d4] [a3,c4] [c4,d4] [a3,c4] [c4,d4] [a3,c4] [c4,d4]", // Csus2 Am Csus2 Am Csus2 Am Csus2 Am …
  B: "[a3,c4] [c4,d4] [a3,c4] [c4,d4] [a3,c4] [c4,d4] [a3,c4] [c4,d4] [a3,c4] [c4,d4] [a3,c4] [c4,d4] [a3,c4] [c4,d4] [a3,c4] [c4,d4]", // Am Csus2 Am Csus2 Am Csus2 Am Csus2 …
  C: "a3 ~@15", D: "d3 ~@7, f6 ~@15", E: "d3@3 ~@13, f6 ~@15", F: "d3 ~@3, f6 ~@15",
})).s("gm_ocarina").gain(0.16).pan(0.4)

// chords · rock organ
const rock_organ = note(`<
  ~@24 A B C D A B C E D B C F@2 B C D ~@9 A B C D A B C E D B C F@2 B C D G H G H G H G H I J K L@2 J K L@2 J K M D B C
  F@2 B C D@2 B C F@2 B C D I J K N@2
>`.pickRestart({
  A: "[gb5,a5,d6,gb6]", B: "[e5,a5,c6,e6]", C: "[d5,g5,b5,d6]", D: "[d5,f5,a5,d6]", E: "[d5,f5,a5,d6] ~@15",
  F: "[d5,f5,a5,d6]/2", G: "[d6,d8] [e6,e8] [f6,f8] ~@2 [d6,d8] ~@3 [f6,f8] [e6,e8] [d6,d8] [db6,db8] [e6,e8] ~@2",
  H: "[g6,g8] [e6,e8] [f6,f8] ~@2 [e6,e8] ~@3 [a6,a8] [g6,g8] [f6,f8] [e6,e8]!2 [db6,db8] ~", // G E F E A G F E …
  I: "d4@3 a3, [d5,f5,a5,d6]", J: "c4@3 a3, [e5,a5,c6,e6]", K: "[b3,d5,g5,b5,d6]", L: "[a3@4 d4@3 a3, [d5,f5,a5,d6]]/2",
  M: "[a3,d5,f5,a5,d6]", N: "[[a3,d5,f5,a5,d6]@5 ~@3]/2",
})).s("gm_rock_organ").gain(0.33).pan(0.3)

// other · lead 2 sawtooth
const lead_2_sawtooth_2 = note("<~@73 A B C B A B C B A B C B ~@21>".pickRestart({
  A: "d3 d4!2 d3 f3 d4!2 d3 c3 a3 d3 d4!2 a3 d3!2", B: "d3 d4!2 d3 f3 d4!2 d3 c3 a3 d3 d4!2 f3!3",
  C: "d3 d4!2 d3 f3 d4!2 d3 c3 a3 d3 d4!2 ab3 d3!2",
})).s("gm_lead_2_sawtooth").gain(0.15).pan(0.9)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@77 x ~@6 x ~@16 x ~@4>").gain(0.49)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@7 A ~@8 B C B C B C B C B C B C B C B D ~@9 B C B C B C B C B C B C B C B D ~@8 B C B C B C B C ~@33
>`.pickRestart({
  A: "~@3 x", B: "x!8", C: "x!5 ~ x ~", D: "x",
})).gain(0.38)

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

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

stack(
  piano, overdriven_guitar, overdriven_guitar_soft, bass, bass_soft, bass_2, bass_soft_2, distortion_guitar,
  lead_2_sawtooth, whistle, whistle_soft, ocarina, rock_organ, lead_2_sawtooth_2, kick, snare, low_tom, hihat, open_hat,
  crash
)

More by Rammstein