Strudelify
Zwickt's Mi cover art

Es lebe der Zentralfriedhof

Zwickt's Mi

Wolfgang Ambros

KeyG majorTempo112 bpm
0:00/0:00
// Zwickt's Mi — Wolfgang Ambros
// 112 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B@2 C D C E F G H I B@2 C D J E F G H I K L M N O L P Q O R S I K T U V O W P X C D C Y F G H I K L M N O L P Q O W
  Z I O AA U AB O L M AC O L P Q O W Z AD O AA U AE
>`.pickRestart({
  A: "~@5 e2 f2 f#2, ~@10 f2 ~@5", B: "g2@3 ~ d2@3 ~ g2@3 ~ d2@3 ~", C: "g2@4 d2@3 ~ f2@3 ~ c2@3 ~",
  D: "d2@2 e2 f#2 g2 b1 c2 d2", E: "d2@4 e2@2 f#2@2 g2@2 f2@2 e2@2 d2 ~", F: "c2@3 ~ g1@3 ~ c2@4 g1@2 c2@2",
  G: "d#2@3 ~ a#1@3 ~ d#2@4 a#1@2 d#2@2", H: "a1@2 e2@2 a1@2 b1 c#2", I: "d2 ~@7", J: "g2@3 ~ d2@3 ~ f2@3 ~ c2@3 ~",
  K: "g2@3 ~ d2@3 ~ g2@4 d2@2 g2@2", L: "a2@4 e2@4 a2@3 ~ a2@2 g2@2", M: "f2@2 c2@2 f2 e2 f2 f#2", N: "g2 b1 c2 d2",
  O: "g2@2 d2@2 g2@2 d2 g2", P: "f2@2 c2@2 f2@2 c2 f2", Q: "d2@2 f#2@2 a2 d2 e2 f#2", R: "a2@3 ~ e2@3 ~ a2@4 e2@2 a2@2",
  S: "a1 ~ a1@2 c#2 ~ c#2@2 e2@2 e2@2 f#2@2 e2 ~", T: "a2@4 e2@2 a2@2 d#2@3 ~ d#2@3 ~",
  U: "d2@3 ~ d2@4 ~@2 d2@2 e2@2 f#2@2", V: "g2@3 ~ d2@4 g2@2 f#2@2 e2@2 d2@2", W: "a2@2 e2@2 a2@2 e2 a2",
  X: "g2@2 d2@2 g2 d2 e2 f#2", Y: "d2@2 e2 f#2 g2 f2 e2 d2", Z: "a1 ~ a1@2 c#2 ~ c#2@2 e2 ~ e2@2 c#2@2 e2@2",
  AA: "a2@2 e2 a2 d#2@2 a#1 d#2", AB: "g2@4 d2@3 ~ g2@2 f#2@2 e2@2 d2@2, ~@7 d2@3 ~@6",
  AC: "g2@4 b1@2 b1@2 c2@2 c2@2 d2 ~ d2@2", AD: "d2 ~@4 d2 e2 f#2", AE: "g2 ~@3 d2@2 e2 f#2 g2 ~@3 g2 ~@3",
})).s("gm_electric_bass_finger").gain(0.5)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A@2 B C B C D E F G A@2 B C B C D E F H A I J A@2 I J K A I L M A N K O A I J A B P B Q D E F G R I J A@2 I J K R I
  L M A N K A@2 I J A@2 I S K A I L M A N T@2
>`.pickRestart({
  A: "~@2 [b3,d4,g4]!3 ~ [b3,d4,g4]!2 ~@2 [b3,d4,g4]!3 ~ [b3,d4,g4]!2", // G
  B: "~@2 [b3,d4,g4]!3 ~ [b3,d4,g4]!2 ~@2 [a3,c4,f4]!3 ~ [a3,c4,f4]!2", // G F
  C: "~@2 [a3,c4,f#4]!3 ~ [a3,c4,f#4]!2 ~@2 [b3,d4,g4]!3 ~ [b3,d4,g4]!2", // F#dim G
  D: "~@2 [c4,e4,a#4]!3 ~ [c4,e4,a#4]!2 ~@2 [c4,e4,a#4]!3 ~ [c4,e4,a#4]!2", // C7
  E: "~@2 [a#3,c#4,g4]!3 ~ [a#3,c#4,g4]!2 ~@2 [a#3,c#4,g4]!3 ~ [a#3,c#4,g4]!2", // Gdim
  F: "~@2 [a3,c#4,e4]!3 ~ [a3,c#4,e4]!2 ~@2 [a3,c#4,e4]!3 ~ [a3,c#4,e4]!2", G: "[a3,d4,f#4] ~@15",
  H: "[a3,c#4,d4,f#4] ~@15", I: "~@2 [c4,e4,a4]!3 ~ [c4,e4,a4]!2 ~@2 [c4,e4,a4]!3 ~ [c4,e4,a4]!2",
  J: "~@2 [c4,f4,a4]!3 ~ [c4,f4,a4]!2 ~@2 [c4,f4,a4]!3 ~ [c4,f4,a4]!2", // F
  K: "~@2 [a3,c4,f#4]!3 ~ [a3,c4,f#4]!2 ~@2 [a3,c4,f#4]!3 ~ [a3,c4,f#4]!2", // F#dim
  L: "~@2 [c#4,e4,a4]!3 ~ [c#4,e4,a4]!2 ~@2 [c#4,e4,a4]!3 ~ [c#4,e4,a4]!2", M: "[d4,f#4,a4] ~@15",
  N: "~@2 [c4,e4,a4]!3 ~ [c4,e4,a4]!2 ~@2 [a#3,d#4,g4]!3 ~ [a#3,d#4,g4]!2", // Am D#
  O: "~@2 [b3,d4,g4]!3 ~ [b3,d4,g4]!2 ~@2 [b3,d4,g4]!3 ~ [b3,d4,f#4,g4] [b3,d4,g4]", // G Gmaj7 G
  P: "~@2 [c4,f#4]!2 [a3,c4,f#4] ~ [a3,c4,f#4]!2 ~@2 [b3,d4,g4]!3 ~ [b3,d4,g4]!2", // Cdim F#dim G
  Q: "~@2 [a3,c4,f#4]!3 ~ [a3,c4,f#4]!2 ~@2 [b3,d4,f#4,g4] [b3,d4,g4]!2 ~ [b3,d4,f#4,g4] [b3,d4,g4]", // F#dim Gmaj7 G Gmaj7 G
  R: "~@2 [b3,d4,f#4,g4] [b3,d4,g4]!2 ~ [b3,d4,g4]!2 ~@2 [b3,d4,g4]!3 ~ [b3,d4,g4]!2", // Gmaj7 G
  S: "~@2 [c4,f4,a4] [c4,f4] [c4,f4,a4] ~ [c4,f4,a4]!2 ~@2 [c4,f4,a4]!3 ~ [c4,f4,a4]!2", // F F5 F
  T: "[~@2 [a3,c4,f#4]!3 ~ [a3,c4,f#4]!2 ~@2 [a3,c4,f#4]!3 ~ [a3,c4,f#4] [a3,c4,f#4]@5 ~@12]/2", // F#dim
})).s("gm_acoustic_guitar_steel").gain(0.24)

// chords · piano · "A.PIANO"
const piano = note(`<
  ~ A@2 B C B C D E F G H A B C B C D E F G A I J A@2 K J L A I F G A M N A@2 I J A O C B C D E F G A I J A P I J Q A I
  F G A M Q A@2 I J A@2 I J L A I F G A M Q R
>`.pickRestart({
  A: "~@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~@2 [b3,d4,g4] ~, ~@2 g4 ~@3 g4 ~@3 g4 ~@5", // Bm G
  B: "~@2 [b3,d4]@2 ~@2 [b3,d4]@2 ~@2 [a3,c4,f4]@2 ~@2 [c4,f4] ~, ~@2 g4 ~@3 g4 ~@7 a3@2", // Bm F F5
  C: "~@2 [a3,d4,f#4]@2 ~@2 [a3,d4,f#4]@2 ~@2 [b3,d4]@2 ~@2 [b3,g4] ~, ~@10 g4 ~@3 d4@2", // D Bm Em
  D: "~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4]", // C
  E: "~ [a#3,d#4,g4] ~ [a#3,d#4,g4] ~ [a#3,d#4] ~ [a#3,g4], ~@10 g4 ~@3 d#4 ~", // D# D#5 D#
  F: "~@2 [c#4,e4,a4]@2 ~@2 [c#4,e4]@2 ~@2 [c#4,e4]@2 ~@2 [c#4,e4,a4] ~, ~@6 a4 ~@3 a4 ~@5", G: "[d4,f#4,a4] ~@15",
  H: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4]@2 ~@2 [b3,d4]@2, ~@10 g4 ~@3 g4 ~", // G Bm
  I: "~@2 [c4,e4,a4]@2 ~@2 [c4,e4]@2 ~@2 [c4,e4]@2 ~@2 [c4,e4,a4] ~, ~@6 a4 ~@3 a4 ~@5", // Am C Am
  J: "~ [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4], ~@14 a4 ~", // F F5
  K: "~@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~", // Am
  L: "~@2 [d4,f#4,a4]@2 ~@2 [d4,f#4,a4]@2 ~@2 [d4,f#4]@2 ~@2 [d4,f#4,a4] ~, ~@10 a4 ~@5", // D
  M: "~@2 [c4,e4,a4]@2 ~@2 [c4,e4] ~@3 [a#3,d#4,g4]@2 ~@2 [d#4,g4] ~, ~@3 a4 ~@3 a#3", // Am C D#
  N: "~@2 [a3,d4,f#4] ~@3 [a3,d4,f#4]@2 ~@2 [a3,d4,f#4]@2 ~@2 [a3,d4] ~, ~@7 f#4", // D D5
  O: "~@2 [b3,d4]@2 ~@2 [b3,d4,g4] ~@3 [a3,c4,f4]@2 ~@2 [a3,c4,f4] ~, ~@2 g4 ~@13", // Bm G F
  P: "~@2 [b3,d4,g4] ~@3 [b3,d4]@2 ~@2 [b3,d4]@2 ~@2 [b3,d4,g4] ~, ~@6 g4 ~@3 g4 ~@5", // G Bm G
  Q: "~@2 [a3,d4,f#4]@2 ~@2 [a3,d4,f#4]@2 ~@2 [a3,d4,f#4]@2 ~@2 [a3,d4,f#4] ~", // D
  R: "~@4 [a3,d4,f#4]@3 ~ [b3,d4,g4] ~@3 [b3,d4,g4] ~@3", // D G
})).s("gm_piano").gain(0.3)

// other · banjo
const banjo = note(`<
  ~ A@2 B C B C D E F ~ A@2 B C B C D E G H A I J A@2 I J K A I L H A M K A@2 I J A B C B C D E G H A I J A@2 I J K A I
  L H A M K A@2 I J A@2 I N K A I L H A M K O
>`.pickRestart({
  A: "g4 d4 b3 d4 g4 d4 b3 d4 g4 d4 b3 d4 g4 d4 b3 d4", B: "g4 d4 b3 d4 g4 d4 b3 d4 f4 c4 a3 c4 f4 c4 a3 c4",
  C: "f#4 c4 a3 c4 f#4 c4 a3 c4 g4 d4 b3 d4 g4 d4 b3 d4", D: "a#4 e4 c4 e4 a#4 e4 c4 e4 a#4 e4 c4 e4 a#4 e4 c4 e4",
  E: "g4 c#4 a#3 c#4 g4 c#4 a#3 c#4 g4 c#4 a#3 c#4 g4 c#4 a#3 c#4",
  F: "e4 c#4 a3 c#4 e4 c#4 a3 c#4 e4 c#4 a3 c#4 g4 c#4 a3 c#4",
  G: "e4 c#4 a3 c#4 e4 c#4 a3 c#4 g4 c#4 a3 c#4 g4 c#4 a3 c#4", H: "f#4 ~@15",
  I: "a4 e4 c4 e4 a4 e4 c4 e4 a4 e4 c4 e4 a4 e4 c4 e4", J: "f4 c4 a3 c4 f4 c4 a3 c4 f4 c4 a3 c4 f4 c4 a3 c4",
  K: "f#4 d4 a3 d4 f#4 d4 a3 d4 f#4 d4 a3 d4 f#4 d4 a3 d4", L: "a4 e4 c#4 e4 a4 e4 c#4 e4 a4 e4 c#4 e4 a4 e4 c#4 e4",
  M: "a4 e4 c4 e4 a4 e4 c4 e4 g4 d#4 a#3 d#4 g4 d#4 a#3 d#4", N: "f4 c4 a3 c4 f4 c4 a3 c4 f4 c4 ~ c4 f4 c4 a3 c4",
  O: "g4 d4 b3 d4 f#4 d4 a3 d4 g4 ~@3 g4 ~@3",
})).s("gm_banjo").gain(0.26)

// other · trombone
const trombone = note(`<
  ~@17 A B C D ~ E F@2 ~ E F@2 ~@2 G H ~@12 A B C D ~ E F@2 ~ E F@2 ~@2 G H ~@5 E F@2 ~ E F@2 ~@2 G H ~@4
>`.pickRestart({
  A: "e4@3 c4", B: "g4@15 ~", C: "g4, f#4 ~@15", D: "f#4 ~@7", E: "~@12 a3 ~ g3 ~", F: "[f3@25 ~@7]/2", G: "a3",
  H: "a#3 ~@7",
})).s("gm_trombone").gain(0.48).pan(0.1)

// other · trombone
const trombone_2 = note(`<
  ~@17 A B C D ~@2 E@2 ~@2 E@2 ~@2 F G ~@12 A B C D ~@2 E@2 ~@2 E@2 ~@2 F G ~@6 E@2 ~@2 E@2 ~@2 F G ~@4
>`.pickRestart({
  A: "c4@3 g3", B: "d#4", C: "e4", D: "a4 ~@7", E: "[a3@25 ~@7]/2", F: "c#4", G: "d#4 ~@15",
})).s("gm_trombone").gain(0.48).pan(0.9)

// drums · kick
const kick = s("bd").struct("<~ A@9 B A@9 B A@11 B A@15 B A@11 B A@15 B A@4>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.51)

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

// drums · clap
const clap = s("cp").struct("<~@32 [~@3 x] ~@27 [~@3 x] ~@20>").gain(0.26)

// drums · hihat
const hihat = s("hh").struct("<~ A@9 B A@9 B A@11 B A@15 B A@11 B A@15 B A@3 C>".pickRestart({
  A: "x!8", B: "x", C: "x!4",
})).gain(0.51)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@32 [~@3 x] ~@27 [~@3 x] ~@20>").gain(3.01)

stack(bass, acoustic_guitar_steel, piano, banjo, trombone, trombone_2, kick, snare, clap, hihat, vibraslap)