Strudelify

Das Modell

Rammstein

KeyG majorTempo127 bpm
0:00/0:00
// Das Modell — Rammstein
// 127 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 113 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(127/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 · acoustic bass · "Midi C2, T1"
const bass = note(`<
  A B C D C E F G C B C H F I C B C B C B C B C B J K L M N O P Q R B C S C B C B C B C B C B C B T U V W X Y Z Q R B C
  B C B C B C B C B C B C B T K AA AB X AC AD AE R B C B C B C B C B C B C B C B AF AG AH AI C AJ AH AG AH AG AK AG AH
  AL AM AN AO
>`.pickRestart({
  A: "~@6 a2 ~@8 a2@2 ~ c3 ~@2 a2@2 ~", B: "c3 ~@2 a2 ~@2 e2 ~@8 e2 ~@2 g2 ~@2 e2 ~@2",
  C: "g2 ~@5 a2 ~@8 a2 ~@2 c3 ~@2 a2 ~@2", D: "c3 ~ a2 ~@3 e2 ~@8 e2 ~@2 g2 ~@2 e2 ~@2",
  E: "c3 ~@2 a2 ~@2 e2 ~@8 e2 ~@2 g2 ~ e2 ~@2 g2", F: "~@6 a2 ~@8 a2 ~@2 c3 ~ a2 ~@2 c3",
  G: "~@2 a2 ~@3 e2 ~@8 e2 ~@2 g2 ~@2 e2 ~@2", H: "c3 ~@2 a2 ~@2 e2 ~@8 e2 ~ g2 ~@2 e2 ~@2 g2",
  I: "~@3 a2 ~@2 e2 ~@8 e2 ~@2 g2 ~@2 e2 ~@2", J: "g2 ~@5 c3 ~@4 c3@2 ~@2 g2 ~@4 g2@2 ~@2",
  K: "c3@3 ~@3 b2@2 ~@4 b2 ~@2 f#2 ~@5 f#2 ~@2", L: "b2@2 ~@4 a2 ~@4 a2 ~@2 e2@2 ~@4 e2@2 ~@2",
  M: "a2 ~@4 a2 ~@6 a2 ~ e2 ~@5 e2 ~@3", N: "a2 ~@5 c3 ~@4 c3 ~@2 g2 ~@5 g2@2 ~@2",
  O: "c3 ~@4 b2 ~@5 b2 ~@3 f#2 ~@4 f#2 ~@2 b2", P: "~@5 a2 ~@5 a2 ~@2 e2 ~@5 e2 ~@2 a2",
  Q: "~@5 a2 ~@5 a2 ~@2 e2 ~@6 e2@2 ~", R: "a2 ~@5 a2 ~@8 a2 ~@2 c3 ~@2 a2 ~@2",
  S: "c3 ~@2 a2 ~@2 e2 ~@8 e2 ~@2 g2 ~ e2 ~@3", T: "g2 ~@5 c3 ~@5 c3@2 ~ g2@2 ~@4 g2@2 ~",
  U: "c3@3 ~@3 b2 ~@5 b2 ~@2 f#2 ~@5 f#2 ~@2", V: "b2@2 ~@4 a2 ~@4 a2 ~@3 e2@2 ~@3 e2@2 ~@2",
  W: "a2 ~@4 a2 ~@6 a2 ~@2 e2 ~@5 e2 ~@2", X: "a2 ~@5 c3 ~@4 c3 ~@3 g2@2 ~@3 g2@2 ~@2",
  Y: "c3 ~@5 b2 ~@4 b2 ~@3 f#2 ~@4 f#2 ~@3", Z: "b2 ~@5 a2 ~@4 a2 ~@2 e2 ~@5 e2 ~@2 a2",
  AA: "b2@2 ~@4 a2 ~@5 a2 ~@2 e2@2 ~@3 e2@2 ~@2", AB: "a2 ~@5 a2 ~@5 a2 ~@2 e2 ~@5 e2 ~@2",
  AC: "c3 ~@5 b2 ~@4 b2 ~@3 f#2 ~@5 f#2 ~@2", AD: "b2 ~@5 a2 ~@4 a2 ~@2 e2 ~@5 e2@2 ~@2",
  AE: "a2 ~@5 a2 ~@4 a2 ~@3 e2 ~@5 e2@2 ~", AF: "g2 ~@6 a2 ~@8 a2 ~@2 c3 ~@2 a2 ~",
  AG: "~ c3 ~@2 a2 ~@2 e2 ~@8 e2 ~@2 g2 ~@2 e2 ~", AH: "~ g2 ~@5 a2 ~@8 a2 ~@2 c3 ~@2 a2 ~",
  AI: "~ c3 ~@2 a2 ~@2 e2 ~@7 e2 ~@2 g2 ~@2 e2 ~@2", AJ: "c3 ~@2 a2 ~@3 e2 ~@8 e2 ~@2 g2 ~@2 e2 ~",
  AK: "~ g2 ~@4 a2 ~@9 a2 ~@2 c3 ~@2 a2 ~", AL: "~ c3 ~ a2 ~@3 e2 ~@8 e2 ~@2 g2 ~ e2 ~@2",
  AM: "g2 ~@6 a2 ~@8 a2 ~ c3 ~@2 a2 ~@2", AN: "c3 ~@2 a2 ~@3 e2 ~@8 e2 ~@2 g2 ~ e2 ~@2", AO: "g2 ~@23",
})).s("gm_acoustic_bass").gain(0.51)

// other · string ensemble 1 · "Midi C7, T6"
const string_ensemble_1 = note(`<
  ~@8 A B ~@2 C@2 ~@2 D E@2 ~ D F ~@2 G@4 H@5 B ~@2 I J ~@2 D K@2 ~ D F ~@2 L@4 M@5 N O P@2 Q R S@2 T U V@2 Q W X@5 Y@5
  Z@2 ~ AA B ~@2 D E@2 ~ D F ~@2 AB AC AD AE@2 Q AF AC AG@4 AH@5
>`.pickRestart({
  A: "~@2 e4@2 ~ a4@15 ~ c5@2 ~", B: "b4@2 ~ a4@2 ~ b4@8 ~ g4@2 ~ e4@6",
  C: "[~@3 e4@2 ~ a4@13 ~ c5@2 ~ b4@2 ~ a4@2 ~ b4@8 ~ g4@2 ~@2 e4@6]/2", D: "~@3 e4@2 ~ a4@14 ~ c5@2 ~",
  E: "[b4 ~@2 a4@2 ~ b4@8 ~ g4@2 ~ e4@8 ~@22]/2", F: "b4@2 ~ a4@2 ~ b4@9 g4@2 ~ e4@6",
  G: "[~@6 c5@24 b4@21 a4@3 g4@20 a4@3 b4@9 a4@3 ~ b4@6]/4",
  H: "[a4@2 b4@2 ~ c5@24 b4@24 ~ d5@20 e5@3 f#5@9 e5@3 ~@9 e4@2 ~ a4@15 ~ c5@2 ~, ~@90 d5@11 ~@19]/5",
  I: "~@3 e4@2 ~ a4@13 ~ c5@2 ~@2", J: "b4 a4 ~ b4@4 g4 ~ e4@3", K: "[b4@2 ~ a4@2 ~ b4@8 ~ g4@2 ~ e4@8 ~@22]/2",
  L: "[~@2 c5@8 b4@7 a4 g4@7 a4 b4@3 a4 b4@2]/4",
  M: "[a4@3 b4@2 ~ c5@24 b4@24 d5@20 e5@3 f#5@9 ~ e5@3 d5@11 ~ d5@3 a#4@3 g4@3 a#4@3 d5@3 a#4@3]/5",
  N: "d5@2 ~ d#5@2 ~ d5@2 ~ a#4@2 ~ f4@3 a4@3 ~ d5@5", O: "c5@6 d5@3 a#4@3 ~ g4@2 a#4@3 d5@2 ~ a#4@3",
  P: "[d5@2 ~ d#5@2 ~ d5@3 a#4@2 ~ f4@3 a4@3 d5@10 ~@2 d5@3 a#4@2 ~ g4@2 ~ a#4@3 d5@3 a#4@3]/2",
  Q: "d5@2 ~ d#5@2 ~ d5@3 a#4@2 ~ f4@3 a4@3 d5@6", R: "c5@6 d5@3 a#4@2 ~ g4@3 a#4@3 d5@3 a#4@3",
  S: "[d5@2 ~ d#5@2 ~ d5@2 ~ a#4@2 ~ f4@3 a4@3 d5@8 ~ d#5@2 ~ d5@3 a#4@2 ~ g4@3 a#4@3 d5@3 a#4@2 ~]/2",
  T: "d5@2 ~ d#5@2 ~ d5@3 a#4@2 ~ f4@3 a4@3 d5@5 ~", U: "c5@5 ~ d5@3 a#4@2 ~ g4@3 a#4@3 d5@3 a#4@3",
  V: "[d5@2 ~ d#5@2 ~ d5@2 ~ a#4@2 ~ f4@2 ~ a4@3 d5@11 ~ d5@3 a#4@2 ~ g4@3 a#4@3 d5@3 a#4@3]/2",
  W: "c5@6 d5@3 a#4@2 ~ g4@3 a#4@3 d5@2 ~ a#4@3",
  X: "[d5@2 ~ d#5@2 ~ d5@3 a#4@2 ~ f4@2 ~ a4@3 d5@9 ~@3 c5@24 b4@21 a4@3 g4@21 a4@3 b4@9 a4@3 b4@6]/5",
  Y: "[a4@3 b4@2 ~ c5@24 b4@24 d5@20 e5@3 f#5@9 ~ e5@3 ~@8 e4@2 ~@2 a4@15 ~ c5@2, ~@90 d5@11 ~@19]/5",
  Z: "[b4@2 ~ a4@2 ~ b4@8 ~@2 g4@2 ~ e4@7 ~@22]/2", AA: "~@3 e4@2 ~ a4@13 ~@2 c5@2 ~",
  AB: "~@6 d5@3 a#4@3 g4@3 a#4@3 ~ d5@3 a#4@2", AC: "~ d5@2 ~ d#5@2 ~ d5@2 ~ a#4@2 ~ f4@3 a4@3 d5@5",
  AD: "~ c5@6 d5@3 a#4@3 g4@3 a#4@3 d5@2 ~ a#4@2",
  AE: "[~ d5@2 ~ d#5@2 ~ d5@3 a#4@2 ~ f4@3 a4@3 d5@10 ~ d5@3 ~ a#4@2 ~ g4@2 a#4@3 d5@3 a#4@3]/2",
  AF: "~ c5@5 d5@3 ~ a#4@2 ~ g4@3 a#4@3 d5@3 a#4@2",
  AG: "[~@4 [d5,d#5]@3 d5@3 a#4@2 ~ g4@3 a#4@3 d5@3 a#4@2 ~ d5@2 ~ d#5@2 ~ d5@3 a#4@2 ~ f4@2 a4@3 ~ d5@5 ~ c5@5 d5@3 a#4@2 ~@2 g4@3 a#4@3 d5@3 a#4@3 d5@2 d#5@2 ~ d5@2 ~ a#4@2 ~ f4@2 ~ a4@3 ~ d5@5, ~@7 g5@89]/4", // D#maj7
  AH: "[~@4 d5@3 d5@3 a#4@2 ~ g4@3 a#4@3 d5@3 a#4@2 d5@2 ~@2 d#5@2 d5@3 ~ a#4@2 f4@3 a4@3 ~ d5@6 c5@5 d5@3 a#4@2 ~@2 g4@2 a#4@3 d5@2 ~ a#4@3 d5@2 ~ d#5@2 ~ d5@3 a#4@2 ~ f4@2 ~ a4@3 ~ d5@9 ~@20, ~@7 g5@97 ~@16]/5",
})).s("gm_string_ensemble_1").gain(0.46)

// drums · kick
const kick = s("bd").struct(`<
  A B C D E F G H D I@3 J K I@13 L M D F M B I@4 K I@14 K N O P K I@20 E I E I@9 Q I@7 R@2 S I@2 T R U Q V R@2 W U I X
>`.pickRestart({
  A: "~@12 x ~@7 x ~@2 x", B: "~@2 x ~@9 x ~@8 x ~@2", C: "x ~@2 x ~@8 x ~@7 x ~@2 x", D: "~@2 x ~@8 x ~@9 x ~@2",
  E: "x ~@2 x ~@7 x ~@9 x ~@2", F: "x ~@2 x ~@8 x ~@8 x ~ x", G: "~@2 x ~@8 x ~@9 x ~ x", H: "~@2 x ~@8 x ~@8 x ~@2 x",
  I: "x!2 ~@2 x ~@2 x", J: "x!2 ~@2 x ~@3", K: "x ~ x ~@9 x ~@8 x ~@2", L: "x ~ x ~@9 x ~@8 x ~ x",
  M: "~@2 x ~@9 x ~@7 x ~@2 x", N: "x ~@2 x ~@7 x ~@9 x ~ x", O: "~@2 x ~@8 x ~@8 x ~@3", P: "x ~ x ~@8 x ~@9 x ~@2",
  Q: "x ~@2 x ~@9 x ~@7 x ~@2", R: "~ x ~@2 x ~@8 x ~@8 x ~", S: "~ x ~@2 x ~@8 x ~@7 x ~@2",
  T: "x ~@3 x ~@8 x ~@8 x ~", U: "~ x ~@2 x ~@7 x ~@8 x ~@2", V: "x ~@2 x ~@9 x ~@8 x ~", W: "~ x ~ x ~@9 x ~@8 x ~",
  X: "x",
})).gain(0.26)

stack(bass, string_ensemble_1, kick)

More by Rammstein