Strudelify

Autobahn

Kraftwerk

KeyC majorTempo120 bpm
0:00/0:00
// Autobahn — Kraftwerk
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 synth bass 1 (copy of ch 1 synth bass 1)
// note: Full arrangement: all 239 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · synth bass 1
const bass = note(`<
  ~@2 A B C D@10 B E F@2 G H F I J K L M N O P Q R S T U N C D@10 B E F@2 G H F I J K L M N O P Q R S T U N ~@32 S T U N
  C D@10 B E F@2 G H F I J K L M N O P Q R S T U N V ~ W ~ X ~ Y ~ X ~ X ~ X ~ X ~ Y ~ Y ~ Y ~ Z ~ Y ~ Z ~ Y ~ Y ~ Y ~ Y
  ~ Y ~ AA ~ Y ~ AB ~ AB ~ Y ~ AC ~ Y ~ Y ~ Y ~ Y ~ Y ~ Y ~ Y ~ S T U N C D@10 B E F@2 G H F I J K L M N O P Q R S T U N
  ~@3
>`.pickRestart({
  A: "c3 c2 c3!2 c2 c3!2 c2 c3!2 c2 c3 c2 c3!3", B: "c2 c3!3 c2 c3!2 c2 c3 c2 c3!2 c2 c3!2 c2",
  C: "c3 c2 c3!2 c2 c3!2 c2 c3 c2 c3!2 c2 c3!3", D: "c2 c3!3 c2 c3!2 c2 c3 c2 c3!2 c2 c3!3",
  E: "f3!4 f2 f3!2 f2 f3 f2 f3!2 f2 f3!3", F: "f2 f3!3 f2 f3!2 f2 f3 f2 f3!2 f2 f3!3",
  G: "f2 f3!3 f2 f3!2 f2 f3 f2 f3!2 f2 f3!2 f2", H: "f3!4 f2 f3!2 f2 f3 f2 f3!2 f2 f3 f2 f3",
  I: "f2 f3!3 f2 f3!2 f2 f3 f2 f3!3 f2 f3 f2", J: "f3!3 [e2,f2] f3!2 f2 f3 f2 f3!2 f2 f3 f2 f3 f2",
  K: "c3!3 c2 c3 c2 c3 c2 c3!2 c2 c3 c2 c3 c2 c3", L: "g1 g2!3 g1 g2!2 g1 g2!2 g1 g2 g1 g2!2 g1",
  M: "f2 f1 f2!2 f1 f2!2 f1 f2 f1 f2!2 f1 f2 f1 f2", N: "c2 c3!2 c2 c3!2 c2 c3 c2 c3!2 c2 c3 c2 c3 c2",
  O: "c3!2 c2 c3!2 c2 c3 c2 c3!3 c2 c3 c2 c3 c2", P: "g2!2 g1 g2!2 g1 g2!2 g1 g2!2 g1 g2 g1 g2 g1",
  Q: "f2!2 f1 f2!2 f1 f2!2 f1 f2!2 f1 f2 f1 f2 f1", R: "c3!2 c2 c3!2 c2 c3 c2 c3!2 c2 c3!2 c2 c3 c2",
  S: "g#2!2 g#1 g#2!2 g#1 g#2 g#1 a#2 [g#1,g#2] ~ g#1 g#2 g#1 g#2!2", // G#
  T: "g#1 a#2!2 [a#1,b1] a#2!2 a#1 a#2 a#1 a#2!2 a#1 a#2!2 a#1 a#2", U: "a#1 c3!2 c2 c3!2 c2 c3 c2 c3!2 c2 c3!2 c2 c3",
  V: "~ a1@4 ~ a1@5 ~@5", W: "a1@5 ~ a1@5 ~@5", X: "a1@4 ~@2 a1@5 ~@5", Y: "a1@2 ~ a1@3 ~@2", Z: "a1@5 ~ a1@6 ~@4",
  AA: "a1@4 ~@3 a1@7 ~@2", AB: "a1@4 ~@2 a1@7 ~@3", AC: "~ a1@4 ~ a1@6 ~@4",
})).s("gm_synth_bass_1").gain(0.22).pan(1)

// other · orchestra hit
const orchestra_hit = note(`<
  ~ A B@2 ~@31 C@5 D@3 ~@5 E ~ F G ~@2 H ~ I J K I L M K L N O P Q ~@35 C@5 D@3 ~@5 E ~ F G ~@2 H ~ I J K I L M K L N O
  P Q ~@67 C@5 D@3 ~@5 E ~ F G ~@2 H ~ I J K I L M K L N O P Q ~@3
>`.pickRestart({
  A: "~@14 c5 ~", B: "[c5@11 ~@5]/2", C: "[~@10 c5 ~ c5@54 ~@8 c5 ~ c5@2 ~@2]/5", D: "[c5@11 ~@5]/3", E: "f5 ~ f5 ~@13",
  F: "f5 ~ f5@2 ~@12", G: "~@3 f4 ~ f4 ~ f4", H: "f4 ~ f4@2 ~@12", I: "c5 ~ c5 ~ c5 ~@2 c5 ~ c5!2 ~ c5 ~@3",
  J: "g4 ~ g4 ~ g4 ~@2 g4 ~ g4!2 ~ g4 ~@3", K: "f4 ~ f4 ~ f4 ~@2 f4 ~ f4!2 ~ f4 ~ f4 ~",
  L: "c5 ~ c5 ~ c5 ~@2 c5 ~ c5!2 ~ c5 ~ c5 ~", M: "g4 ~ g4 ~ g4 ~@2 g4 ~ g4!2 ~ g4 ~ g4 ~",
  N: "g#4!2 ~ g#4 ~@4 g#4@2 ~ g#4@2 ~ g#4 ~", O: "a#4!2 ~ a#4 ~@4 a#4@2 ~ a#4 ~@2 a#4 ~", P: "c5@13 ~@3",
  Q: "c5@3 ~@3 c5@2 ~@2 c5@2 ~@2 c5 ~",
})).s("gm_orchestra_hit").gain(0.34)

// bass · acoustic bass
const bass_2 = note(`<
  ~@68
  [g2@2 c3 f2@5]!8
  [g1@2 c2 f1@5]!8
  [g2@2 c3 f2@5]!8
  [g1@2 c2 f1@5]!4
  [~@2 c2 f1@5, g1@3 ~@5]!3
  [g1@4 c2@2 f1@9 ~]
  ~@139
>`).s("gm_acoustic_bass").gain(0.42)

// other · synth drum
const synth_drum = note(`<
  ~@167 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH ~@38
>`.pickRestart({
  A: "~@11 a3 g3 ~ a3 ~", B: "c3 ~@15", C: "~@11 [c3,d3] c3 ~ d3 a2", D: "a3 ~@2 a2 ~@2 a2 ~@9",
  E: "~@11 b4 [f4,g4] ~ a4 ~, ~@5 c5 ~@2", F: "g4 ~ d4 ~@13", G: "~@10 d4 c4 b3 [f3,g3] d4 c4", H: "b3 ~ d3 ~ a3 ~@11",
  I: "~@10 g2 ~ c4 ~ f2 ~", J: "f2 ~@2 [d2,e2] ~@12", K: "~@6 c3 d3 c3 d3 ~ c3!2 a2 b2 ~", L: "[f2,g2] a2 d2 ~ d2 ~@11",
  M: "~@11 d2!2 ~ e2 ~", N: "[e2,f2] ~ d2 ~ [c2,d2] ~ b1 ~@9", O: "a3!2 [g3,a3] ~@3 f3!2 e3 ~@7",
  P: "~@3 [c3,d3] c3 ~ c3 ~ a2 ~ a2 ~@5", Q: "~@2 [c4,e4] ~ d4 b3 ~ [b3,c4] ~ [a3,b3] f3 ~ g3 ~ d3 ~",
  R: "~@2 c4 ~ c4 ~ c4 f3 ~ a3 [d3,e3] ~ [f3,g3] ~ e3 ~", S: "b2 [b3,c4] ~ e4 ~ d4 [b2,c3] ~ [a3,b3] ~@7",
  T: "[b3,d4] d4 ~ d4 ~ c4 e3 ~ [g3,a3] ~ d3 ~ f3 ~ e3 ~", U: "[a2,b2] ~@9 d3!2 [c3,d3] ~ b2 ~",
  V: "[a2,b2] ~ e4 ~ e4 ~ e4!2 f3 e4 ~ c4 ~ a3 c3 ~", W: "~@10 c4 [a3,c4] a3!2 f3 ~",
  X: "g3 d3 f3 ~ b2 e3 [a2,b2] ~ c3 ~@5 b2 ~", Y: "[a2,b2] ~ a2 ~@7 g3 [f3,g3] f3 ~ f3 ~",
  Z: "a2 ~@2 d4 ~@2 b3 ~@2 a3 [f3,a3] ~ a3 ~ d3 ~", AA: "g3 ~@2 d4 ~@2 b3 ~@2 a3!2 g3!2 ~ e3 ~",
  AB: "c4 ~@2 f4 ~@2 a4 ~@7 d4!2", AC: "b3 d4 b3 ~ b3 a3 ~ [a3,b3] f3 ~ [g3,a3] e3 f3 d3 ~ e3", AD: "b2 ~ b2 ~ f2 ~@11",
  AE: "~@2 c3 [b2,c3] b2 ~@5 [a2,b2] ~ [g2,a2] ~ e3 ~", AF: "f2 ~ f2 ~ d2 ~ f2 ~@3 b1 ~@5",
  AG: "~@3 [d4,e4,f4] [d4,e4] e4 ~ c4!2 a3 b3 ~ f3 g3 d3 ~", AH: "d3 ~ g2 ~@13",
})).s("gm_synth_drum").gain(0.41)

// other · synth drum · soft notes
const synth_drum_soft = note("<~@167 A ~ B ~@5 C ~ D ~ E ~@7 F ~@5 G H ~@2 I ~ J ~@39>".pickRestart({
  A: "~@10 a3 g3 ~@4", B: "~@10 d3 ~@5", C: "~@12 d4 ~@3", D: "~@6 d3 ~@4 b2 ~@4", E: "~@10 d2 ~@5", F: "~@11 c3 ~@4",
  G: "~@10 g3 ~@5", H: "~@14 b3 ~", I: "~@11 a2 ~@4", J: "~@2 f4 ~@13",
})).s("gm_synth_drum").gain(0.26)

// chords · pad sweep
const pad_sweep = note(`<
  ~@32 A@2 B@2 ~@28 C D@3 ~@32 C D@3 ~@28 E@2 F@3 ~@2 G ~@9 H ~@6 I@2 ~@4 J@2 ~ K@3 ~ L ~ M@2 ~@4 N ~ O@2 ~@19 C D@3
  ~@28 P Q R@2 S@3
>`.pickRestart({
  A: "[[c4,d#4,g#4]@13 ~@2 [d4,f4,a#4]@14 ~@3]/2", B: "[e4,g4,c5]/2", C: "[c4,d#4,g#4]@13 ~@3",
  D: "[[d4,f4,a#4]@14 ~ [e4,g4,c5]@33]/3", E: "[[c4,d#4,g#4]@7 ~ [d4,a#4]@7 ~, ~@15 f4@14 ~@3]/2",
  F: "[[e4,g4,c5]@11 ~@5]/3", G: "[e4,a4,a#4]", H: "[e4,a4,a#4]@15 ~", I: "[~@16 [b3,f4]@13 ~@3, ~@15 e4@13 ~@4]/2",
  J: "[~@13 [b4,e5,f5]@14 ~@5]/2", K: "[~@15 [g4,b4,c5]@7 ~@2 [e4,a4,a#4]@10 ~@14]/3", L: "[e5,a5,a#5] ~",
  M: "[~@3 [e4,a4,a#4]@6 ~@7]/2", N: "~ [b4,e5,f5]@4 ~@3", O: "[~@16 e4@15 ~, ~@15 [a4,a#4]@15 ~@2]/2",
  P: "[c4,d#4,g#4]@7 ~", Q: "[d4,f4,a#4]@7 ~", R: "[[e4,g4,c5]@15 ~]/2", S: "[[e3,g3,c4]@41 ~@7]/3",
})).s("gm_pad_sweep").gain(0.31)

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

// drums · snare
const snare = s("sd").struct(`<
  A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2
  C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A
  B@2 C A B@2 C A B@2 C A B@2 C ~@4 A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A
  B@2 C A B@2 C A B@2 C A B@2 C A B@2 C ~@4 A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C ~@7
>`.pickRestart({
  A: "~@4 x ~@2 x ~@4 x ~@3", B: "~ x ~ x", C: "~@10 x!2 ~@2 x ~",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3
  B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B ~@4 A@3 B A@3 B A@3 B A@3 B A@3 B A@3
  B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B ~@4 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B ~@7
>`.pickRestart({
  A: "~ x!7", B: "x!2 ~ x!2 ~@3",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@8
>`.pickRestart({
  A: "x",
})).gain(0.64)

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

// drums · high tom
const high_tom = s("ht").struct("<~@211 [~@3 x] ~@27>").gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@211 [~@5 x!2 ~] ~@27>").gain(0.8)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@169 A ~ A ~ B ~ C ~@2 A D A ~@2 C ~@2 A ~@4 A ~@47>".pickRestart({
  A: "x", B: "~@3 x ~@4", C: "~@3 x", D: "~@7 x",
})).gain(8.46)

// drums · bongos
const bongos = s("bongo:18").struct(`<
  ~@177
  [~@3 x ~@2 x ~@2 x ~@2 x ~@3]
  ~
  [~@3 x ~@2 x ~@3 x ~@5]
  ~@3
  [~@3 x ~@12]
  ~@55
>`).gain(1.26)

// drums · congas
const congas = s("conga:18").struct("<~@177 [~ x!2 ~ x!2 ~ x] ~ [~@2 x ~ x!2 ~ x!2 ~@3 x ~@3] ~@3 [~ x!5 ~@2] ~@55>")
  .gain(1.54)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct("<~@181 [~@2 x!2 ~@6 x!2 ~@4] ~@14 [x!2 ~@6] [~@4 x!2 ~@2] ~@41>").gain(4.08)

// drums · shaker
const shaker = s("sh").struct("<~@181 [~@3 x ~@4] ~@57>").gain(0.56)

// drums · guiro
const guiro = s("guiro:0").struct("<~@193 [~@4 x ~@3 x ~@2 x ~@2 x ~] ~@45>").gain(13.52)

// drums · claves
const claves = s("clave:2").struct("<~@193 [~@2 x!2 ~@2 x ~@2 x!2 ~ x!2 ~@2] ~@45>").gain(2.35)

// drums · triangle
const triangle = s("triangles:30").struct("<~@195 [~@2 x ~@2 x ~@3 x ~@2 x ~@3] ~@43>").gain(4.88)

stack(
  bass, orchestra_hit, bass_2, synth_drum, synth_drum_soft, pad_sweep, kick, snare, hihat, open_hat, mid_tom, high_tom,
  crash, vibraslap, bongos, congas, agogo_bells, shaker, guiro, claves, triangle
)

More by Kraftwerk