Strudelify

Music Non Stop

Kraftwerk

KeyE♭ minorTempo110 bpm
0:00/0:00
// Music Non Stop — Kraftwerk
// 110 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 150 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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.

// chords · kalimba
const kalimba = note(`<
  ~@84 A B C D A B C E F G H I J K L M N B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A
  B C D A B ~@4
>`.pickRestart({
  A: "~@4 [gb5,bb5,gb6] ~@2 [gb5,bb5,gb6] ~@8", // Gb
  B: "~@2 [bb4,eb5] ~ [gb5,bb5,gb6] ~ [bb4,eb5] [gb5,bb5,gb6] ~ [bb4,eb5] ~@6", // Eb5 Gb Eb5 Gb Eb5
  C: "~@2 [bb4,eb5] ~ [gb5,bb5,gb6] ~ [bb4,eb5] [gb5,bb5,gb6] ~ [bb4,eb5] [gb5,bb5,gb6] ~@5", // Eb5 Gb Eb5 Gb Eb5 Gb
  D: "~@2 [gb5,bb5,gb6] ~ [gb5,bb5,gb6] ~ [bb4,eb5] [gb5,bb5,gb6] ~ [bb4,eb5] ~@6", // Gb Eb5 Gb Eb5
  E: "~@2 [gb5,bb5,gb6] ~ [gb5,bb5,gb6] ~ [bb4,eb5] [gb5,bb5,gb6] ~ [bb3,bb4,eb5] ~ db4 [bb3,gb4] [db4,eb4] [db4,ab4,bb4] [gb4,db5]", // Gb Eb5 Gb Eb5 Ebm Dbsus2 Bbm7 Gb5
  F: "[db4,eb4] [ab4,bb4] db5 ~ [gb5,bb5,gb6] ~@2 [gb5,bb5,gb6] ~ gb5 ~ ab5 [gb5,bb5] ~ [bb4,eb5,ab5,db6] [gb5,bb5]", // Dbsus2 Absus2 Gb Bbm7 Gb
  G: "~ [bb4,eb5,db6] [bb4,eb5] ~ [gb5,bb5,db6,gb6] ~ [bb4,eb5] [gb5,bb5,gb6] ~ [bb4,eb5,ab5] [bb4,db6] gb4 [f5,gb5,ab5,gb6,ab6] [bb4,c5,db6] gb4 [f5,gb5,gb6,ab6]", // Eb7 Eb5 Gb Eb5 Gb Ebsus4 Bbm Fm …
  H: "[c5,db6] ~ [bb4,eb5,gb6] ~ [gb5,bb5,gb6] ~ [bb4,eb5] [gb4,gb5,bb5,gb6] ~ [bb4,eb5] [gb4,db5,eb5,gb5,bb5,gb6] bb4 gb5 [db5,eb5] [bb4,ab5] [eb4,gb5]", // Dbmaj7 Ebm Gb Eb5 Gb Eb5 Ebm7 Dbsus2 …
  I: "db5 ab5 [eb4,gb5,bb5,gb6] ~ [gb5,ab5,bb5,gb6] ~ [ab4,bb4,eb5] [eb4,gb5,bb5,gb6] [bb4,db5] [e4,ab4,bb4,eb5] [eb4,g4,bb4] [gb4,ab4,bb4,db5] [e4,bb4,e5] [g4,ab4,bb4] [gb4,ab4,eb5] [gb4,a4,bb4,e5]", // Ebm Gb Absus2 Ebm Bbm Emaj7 Eb Gb …
  J: "[ab4,bb4] eb5 [gb4,a4] bb4 [gb5,bb5,gb6] ~@2 [gb5,bb5,gb6] [b4,eb5] a4 ab5 [gb4,ab4,b4,eb5] a4 [ab4,b4,ab5] [gb4,ab4,f5,gb5,a5] [gb4,ab4]", // Absus2 Gbm Gb B Abm7 Abm Gbsus2
  K: "[ab4,b4,db5] [f5,gb5,a5] [gb4,ab4,bb4,eb5] db5 [gb5,bb5,gb6] ~ [bb4,eb5] [gb5,bb5,gb6] [ab4,ab5] [eb4,a4,bb4,eb5] d5 [ab4,ab5,a5] [eb4,e4,a4] [c5,d5,b5] [e5,a5] [eb5,eb6]", // Db7 F Ebm Gb Eb5 Gb Ab Eb …
  L: "[c5,d5,b5] e5 [bb4,b4,eb5,gb5,eb6] d5 [gb5,bb5,gb6] gb5 [bb4,eb5] [gb5,bb5,gb6] [d5,gb5] [bb4,eb5,ab5] [d5,gb5,ab5,bb5,gb6] [db5,d5,gb5] [bb4,d5,ab5,bb5,db6,gb6] [db5,d5,ab5] [db5,gb5] [gb4,d5,bb5,db6,gb6]", // G Bmaj7 Gb Eb5 Gb D Ebsus4 Daug …
  M: "[db5,gb5] gb4 [gb4,a4,gb5,bb5,gb6] gb5 [gb4,gb5,bb5,gb6] a4 [ab4,bb4,eb5] [db4,ab4,gb5,bb5,gb6] [f4,gb5] [ab4,bb4,db5,eb5] [db4,ab4,bb5] [f4,bb4,e5,gb5] [e4,db5,eb5] [db4,ab4,bb5] [eb4,bb4,e5,ab5] [e4,c5,db5,ab6,bb6]", // Gb5 Gb Absus2 Gb Gbmaj7 Absus4 Bbm7 Gb7 …
  N: "ab4 [eb4,ab5] [c5,ab6,bb6] ~ [gb5,bb5,gb6] ~@2 [gb5,bb5,gb6] ~@8", // Ab5 Fm Gb
})).s("gm_kalimba").gain(0.26).pan(0.2)

// chords · kalimba · soft notes
const kalimba_soft = note("<~@91 A B C D E F G H I J ~@49>".pickRestart({
  A: "~@15 bb3", B: "~ db4 gb4 [db4,eb4] [ab4,bb4] db5 ~@10", C: "~ ab5 [gb5,bb5] ~ [bb4,eb5] ~@10 ab5",
  D: "bb4 gb4 [f5,gb5] [c5,db6] ~@9 gb4 ~@2", E: "eb5 bb4 ~ db5 ~ eb4 ~@6 ab4 eb4 [bb4,db5] e4",
  F: "g4 [gb4,ab4] [bb4,e5] ab4 eb5 [gb4,a4] bb4 ~@7 [b4,eb5] a4", // Gbsus2 Bbdim Gbm B
  G: "ab5 [gb4,ab4] ~ [ab4,b4] [f5,a5] [gb4,ab4] db5 ~@3 gb5 ~@3 [ab4,ab5] ~", // Gbsus2 Abm F Gbsus2 Ab
  H: "~ a5 e4 [c5,b5] e5 [b4,eb5,eb6] d5 ~@7 d5 [bb4,ab5]", // Cmaj7 B Bb7
  I: "[d5,ab5] [db5,gb5] [d5,db6] db5 ~ gb4 gb5 gb4 a4 ~@3 ab4 ~ [f4,gb5] eb5", // Ddim Gb5 Dmaj7 Gbmaj7
  J: "[db4,bb5] [bb4,e5] [e4,db5] ab4 [eb4,ab5] [c5,ab6,bb6] ~@10", // Gb Bbdim Dbm Ab5 Fm
})).s("gm_kalimba").gain(0.15).pan(0.2)

// bass · synth bass 1
const bass = note(`<
  ~@32 A B A B A B A B ~@28 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C ~@3
>`.pickRestart({
  A: "eb2 ~@2 eb2 ~ eb2 db2 eb2@2 db2 eb2!2 ~@2 eb2 ~", B: "db2 eb2 ~ eb2 ~ eb2 db2 eb2@2 db2 eb2!2 ~@2 eb2 ~",
  C: "eb2 ~@15",
})).s("gm_synth_bass_1").gain(0.71).pan(0.4)

// chords · orchestra hit
const orchestra_hit = note("<~@55 A B A C A D@2 E@2 ~@86>".pickRestart({
  A: "~@6 gb5!2", B: "gb5@2 gb5@2 gb5@2 ~@6 gb5 ~ gb5 ~, eb3@3 ~, eb4@9 ~@7",
  C: "gb5@2 gb5@2 gb5@2 gb5@2 ~@4 gb5 ~ gb5 ~, eb3, eb4@3 ~", D: "[gb5!3 ~@11 gb5!2, [eb3,eb4]@5 ~@3]/2",
  E: "[gb5!4 ~@10 gb5 ~, [eb3,eb4]@13 ~@3]/2", // Eb
})).s("gm_orchestra_hit").gain(0.33)

// chords · orchestra hit · soft notes
const orchestra_hit_soft = note("<~@56 A B C ~ A ~ C ~@87>".pickRestart({
  A: "~@3 gb5!3 ~@2", B: "gb5 ~@15", C: "~@4 gb5!2 ~@2",
})).s("gm_orchestra_hit").gain(0.13)

// other · tenor sax
const tenor_sax = note(`<
  ~@36 A@4 ~@44 B C@3 D E@2 D@2 C@3 D E@2 D@3 E F@2 G F G F@8 E F@9 E F G F@13 H G F@4 ~@2
>`.pickRestart({
  A: "[eb1,eb2]/4", B: "eb1 ~@3", C: "eb1@5 ~@11", D: "eb1@3 ~@5", E: "eb1@7 ~@9", F: "eb1 ~", G: "eb1@9 ~@7",
  H: "eb1@5 ~@3",
})).s("gm_tenor_sax").gain(0.64).pan(0.9)

// chords · pad choir
const pad_choir = note(`<
  ~@16 A B C D A B C D A B C D A B C D A B C D A B C E ~@60 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B
  C D A B C D A B F ~@11
>`.pickRestart({
  A: "[bb3,eb4] ~@2 [bb3,eb4] ~ [bb3,eb4] ~@6 ab3 ~ c4 ab3", B: "~ c4 ~ [gb3,bb3]@3 ~@8 db4 ~, [gb3,bb3]@3 c4 ~@12",
  C: "[bb3,eb4] db4 ~ [bb3,db4,eb4] ~ eb4 ~@6 ab3 ~ c4 ab3", D: "~ c4 ~ [gb3,bb3]@2 ~@9 db4 ~, [gb3,bb3]@3 c4 ~@12",
  E: "~ c4 ~ [gb3,bb3]@2 ~@11, [gb3,bb3]@3 c4 ~@12", F: "[bb3,eb4] ~@15",
})).s("gm_pad_choir").gain(0.48).pan(0.7)

// chords · pad choir · soft notes
const pad_choir_soft = note(`<
  ~@17 A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~@61 A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C ~ A B C
  ~ A B C ~ A ~@12
>`.pickRestart({
  A: "~@5 gb3@3 ~@8", B: "~@5 bb3 ~@10", C: "~@5 [gb3,bb3]@3 ~@8",
})).s("gm_pad_choir").gain(0.32).pan(0.7)

// chords · lead 2 sawtooth · Eb7
const lead_2_sawtooth = note(`<
  ~@24
  [~@2 [bb4,db5,eb5] ~@2 [bb4,db5,eb5] ~@2 [bb4,db5,eb5] ~@7]!16
  ~@68
  [~@2 [bb4,db5,eb5] ~@2 [bb4,db5,eb5] ~@2 [bb4,db5,eb5] ~@7]!32
  ~@10
>`).s("gm_lead_2_sawtooth").gain(0.48)

// bass · lead 1 square
const bass_2 = note(`<
  ~@32 A B A B A B A B ~@28 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C ~@3
>`.pickRestart({
  A: "eb1 ~@2 eb1 ~ eb1 db1 eb1@2 db1 eb1!2 ~@2 eb1 ~", B: "db1 eb1 ~ eb1 ~ eb1 db1 eb1@2 db1 eb1!2 ~@2 eb1 ~",
  C: "eb1 ~@15",
})).s("gm_lead_1_square").gain(0.57)

// drums · rim
const rim = s("rim").struct("<A B@6 C@40 D C@3 E F C@95 ~@2>".pickRestart({
  A: "~@2 x ~ x!2 ~ x!2 ~ x!6", B: "x!3 ~ x!2 ~ x!2 ~ x!6", C: "~ x!2 ~ x!2 ~ x!2 ~ x!6", D: "x!3 ~@13",
  E: "~@2 x ~ x!12", F: "x!6 ~ x!2 ~ x!6",
})).gain(0.56)

// drums · rim · soft notes
const rim_soft = s("rim").struct(`<
  [~@6 x ~@2 x ~@6]
  [~@3 x ~@2 x ~@2 x ~@6]!46
  [~@3 x!5 ~@8]
  [~@3 x ~@2 x ~@2 x ~@6]!3
  ~
  [~@3 x!4 ~@2 x ~@6]
  [~@3 x ~@2 x ~@2 x ~@6]!95
  ~@2
>`).gain(0.24)

// drums · kick
const kick = s("bd").struct("<~@8 A@32 B ~@3 A@3 ~ A@2 C A@5 D ~ D ~ A@88 ~ D>".pickRestart({
  A: "x!2 ~@4 x!2 ~@2 x ~@5", B: "x!9 ~@7", C: "x!2 ~@4 x!2 ~@2 x!2 ~@4", D: "x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@4 A@36 ~@4 A@3 ~ A@2 B ~ A@3 C D E D E F A@87 ~@2>".pickRestart({
  A: "~@4 x!2 ~@6 x!2 ~@2", B: "x!2 ~@2 x!2 ~@6 x!2 ~@2", C: "~@4 x!2 ~@6 x!3 ~", D: "x!3 ~@3 x!2", E: "x!2 ~@4 x!2",
  F: "x ~ x ~ x!2 ~@6 x!2 ~@2",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  [~@2 x ~@2 x ~@2 x ~@2 x!5]!47
  [x!2 ~ x!3 ~ x!3 ~ x!3 ~ x]
  [~@2 x ~@2 x ~@2 x ~@2 x!5]!3
  ~
  [~@2 x ~@2 x ~@2 x ~@2 x!5]!96
  ~@2
>`).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@47 [~ x ~ x ~ x ~ x] ~@102>").gain(0.4)

// drums · congas
const congas = s("conga:13").struct("<~@57 [~@2 x!5 ~] ~ [~@2 x!4 ~@2] ~@90>").gain(2.05)

stack(
  kalimba, kalimba_soft, bass, orchestra_hit, orchestra_hit_soft, tenor_sax, pad_choir, pad_choir_soft, lead_2_sawtooth,
  bass_2, rim, rim_soft, kick, snare, hihat, open_hat, congas
)

More by Kraftwerk