Strudelify

Immer wieder, immer mehr

Brunner & Brunner

KeyD majorTempo128 bpm
0:00/0:00
// Immer wieder, immer mehr — Brunner & Brunner
// 128 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 120 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(128/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A@3 B@3 C A@4 D A D E B F A@2 D G H A B I J A@3 B@4 C A@3 D@2 A B A D A B C A@4 D A D E B F A@2 D G H A B I J A@3 B@4
  C A@3 D@2 A B A D A B C A@2 K L K A D M B@2 A@3 B@4 C A@3 D@2 A B A D A B C A@3 N@2
>`.pickRestart({
  A: "d2@2 ~@2 d2@3 ~ a1@4 d2@7 ~ d2@4 b1@4 a1@4", B: "a1@2 ~@2 a1@3 ~ e1@4 a1@7 ~ a1@4 f#1@4 e1@4",
  C: "a1@2 ~@2 a1@3 ~ e1@4 a1@7 ~ a1@4 b1@4 a1@4", D: "g1@2 ~@2 g1@3 ~ d1@4 g1@7 ~ g1@4 e1@4 d1@4",
  E: "b1@2 ~@2 b1@3 ~ f#1@4 b1@7 ~ b1@4 a1@4 f#1@4", F: "a1@2 ~@2 a1@3 ~ e1@4 a1@7 ~ a1@4 e1@4 a1@4",
  G: "e2@2 ~@2 e2@3 ~ b1@4 e2@7 ~ e2@4 b1@4 d2@4", H: "e2@2 ~@2 e2@3 ~ b1@4 e2@7 ~ e2@4 d2@4 b1@4",
  I: "g1@2 ~@2 g1@7 ~ g1@4 a1@2 ~@2 a1@7 ~ a1@4", J: "d2@2 ~@2 d2@3 ~ b1@4 a1@4 a1@2 ~@2 a1@3 ~ b1@4 a1@4",
  K: "g1@2 ~@2 g1@3 ~ g1@4 g1@4 g1@2 ~@2 g1@4 e1@4 d1@4", L: "f#1@2 ~@2 f#1@3 ~ f#1@4 f#1@4 f#1@2 ~@2 f#1@4 e1@4 f#1@4",
  M: "d2@2 ~@2 d2@3 ~ a1@4 d2@7 ~ d2@4 c2@4 a1@4", N: "[d2@3 ~]/2",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A@3 B@4 C@2 D E F D F G H@2 D E F I@2 D J K L M@3 N@4 O M@3 P Q R S T U V W@2 C@2 D E F D F G H@2 D E F I@2 D J K L
  M@3 N@4 O M@3 P Q R S T X R N@2 C@2 Q Y F D F T Z@2 M@3 N@4 O M@3 P Q R S T X R N@2 AA@3 AB@2
>`.pickRestart({
  A: "[[a3,d4,f#4]@95 ~]/3", B: "[[a3,c#4,e4]@127 ~]/4", C: "[[a3,d4,f#4]@63 ~]/2", D: "[d3,a3,f#4]",
  E: "g4@3 f#4@5, [d3,a3]", F: "[g3,b3,g4]", G: "[f#3,d4,f#4]", H: "[e3,c#4,e4]/2", I: "[e3,g#3,e4]/2",
  J: "[a3,c#4,g4]", K: "[b3,d4,g4] [a3,c#4,e4]", L: "[d3,d4,f#4] [a3,c#4,e4]", M: "[[f#3,d4,a4]@95 ~]/3",
  N: "[[a3,c#4,a4]@63 ~]/2", O: "[a3,c#4,a4]", P: "[g3,e4,b4]", Q: "[g3,d4,b4]", R: "[f#3,d4,a4]@31 ~",
  S: "[a3,c#4,a4]@31 ~", T: "[f#3,d4,a4]", U: "[g3,b3,g4]@31 ~", V: "[a3,d4,f#4]@31 ~", W: "[[a3,c#4,e4]@63 ~]/2",
  X: "[g3,d4,b4]@31 ~", Y: "[f#3,c#4,a4]", Z: "[e3,c#4,a4]/2", AA: "[[d3,a3,f#4,d5]@95 ~]/3",
  AB: "[[d3,a3,f#4,d5]@47 ~@17]/2", // D
})).s("gm_synth_strings_1").gain(0.23).pan(0.4)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A B C D E F G H ~@29 I J K L M N O P ~@31 I J K L M N O P ~@3 Q R Q S Q S T U ~@11 I J K L M N O P ~ V W X Y@2
>`.pickRestart({
  A: "a4@3 f#4@3 d4@2", B: "a4@12 f#4@12 ~ d4@7", C: "a4@12 f#4@11 ~ d4@8", D: "c#4@12 ~ e4@14 ~@5",
  E: "g4@3 e4@3 c#4@2", F: "g4@12 ~ e4@11 c#4@8", G: "g4@12 f#4@12 e4 ~ e4@6, ~@25 f#4@4 ~@3", H: "d4@9 ~@23",
  I: "e3@3 f#3@3 g3@2", J: "b2@23 ~@9", K: "d3@3 ~", L: "c#3@27 ~@5", M: "d3@11 ~ e3@12 f#3@8", N: "b2@27 ~@5",
  O: "d3@9 ~@7", P: "c#3@13 ~@3", Q: "~ d3 g3 ~@2 d4@2 b3, ~@3 g4@3 ~@2", R: "~ f#3 a3 ~@2 c#4@3, ~@3 f#4@3 ~@2",
  S: "~ a3 d4 ~@2 d4@3, ~@3 f#4@3 ~@2", T: "~@3 b3@2 c#4@3, a2@29 ~@3, ~ e3@7, ~ a3@3",
  U: "~@12 b3@8 c#4@9 ~@3, a2@15 ~, ~@4 e3@25 ~@3, ~@4 a3@11 ~", V: "d3@5 ~ d3@6 b2@4", W: "d3@11 ~ d3@11 ~ b2@8",
  X: "d3@11 ~ d3@12 b2@6 ~@2", Y: "[d3@3 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.38).pan(0.4)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean_2 = note(`<
  A ~ B@3 ~ C@2 ~@4 D E F G ~@7 H@4 I@4 ~@2 C@2 ~ J@6 K@3 C@2 ~@4 D E F G ~@7 H@4 I@4 ~@2 C@2 ~ J@6 K@3 C@2 ~@4 L@4 ~ A
  ~ B@3 ~@2 C@2 ~ J@6 K@3 C@2 ~ M@2 ~
>`.pickRestart({
  A: "~ f#4@19 ~@12, d4@19 ~@13",
  B: "[~@33 e4@19 ~@13 g4@19 ~@12, ~@30 e3@21 ~@13 e4@19 ~@13, ~@31 a3@20 ~@11 a3@21 ~@13, ~@32 c#4@19 ~@12 c#4@20 ~@13]/3",
  C: "[~@34 f#4@19 ~@11, ~@31 d3@22 ~@11, ~@32 a3@21 ~@11, ~@33 d4@19 ~@12]/2", D: "~ a3 f#3 d3", E: "b2@5 ~@3",
  F: "d3@17 ~@15", G: "e3@17 ~@15",
  H: "[~@33 d4@13 ~@3 e4@13 ~@3 f#4@19 ~@13 f#4@19 ~@12, ~@30 d3@16 e3@16 d3@21 ~@11 d3@21 ~@13, ~@31 g3@16 a3@16 a3@21 ~@11 a3@20 ~@13, ~@32 b3@15 ~ c#4@15 ~ d4@19 ~@13 d4@19 ~@13]/4",
  I: "[~@34 f#4@19 ~@12 e4@19 ~@13 g4@19 ~@12, ~@31 d3@22 ~@9 e3@21 ~@13 e4@19 ~@13, ~@32 a3@21 ~@10 a3@20 ~@11 a3@21 ~@13, ~@33 d4@19 ~@12 c#4@19 ~@12 c#4@20 ~@13]/4",
  J: "[~@33 e4@19 ~@13 g4@19 ~@13 f#4@19 ~@13 e4@19 ~@14 f#4@19 ~@10 g3, ~@30 e3@21 ~@13 d4@19 ~@13 d4@19 ~@13 c#4@19 ~@14 d4@19 ~@12, ~@31 g3@20 ~@11 g3@21 ~@11 d3@21 ~@11 e3@21 ~@12 d3@22 ~@11, ~@32 b3@19 ~@12 b3@20 ~@12 a3@20 ~@12 a3@20 ~@13 a3@21 ~@11]/6",
  K: "[~@2 g4@19 ~@12 f#4@19 ~@13 e4@19 ~@12, b3@21 ~@9 d3@21 ~@11 e3@21 ~@13, ~ d4@19 ~@11 a3@20 ~@12 a3@20 ~@13, ~@32 d4@19 ~@13 c#4@19 ~@13]/3",
  L: "[~@33 g4@19 ~@13 f#4@19 ~@13 e4@19 ~@12, ~@30 g3@21 ~@11 d3@21 ~@11 e3@21 ~@13, ~@31 b3@20 ~@12 a3@20 ~@12 a3@20 ~@13, ~@32 d4@19 ~@13 d4@19 ~@13 c#4@19 ~@13]/4",
  M: "[~@33 f#4@19 ~@12, ~@30 d3@21 ~@13, ~@31 a3@20 ~@13, ~@32 d4@19 ~@13]/2",
})).s("gm_electric_guitar_clean").gain(0.27).pan(0.2)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A@3 B C@3 A@2 D E F D F G H@2 D E F I@2 D J K L A@3 B@5 A@3 M N A B A N A B@2 A@2 D E F D F G H@2 D E F I@2 D J K L
  A@3 B@5 A@3 M N A B A N A B@2 A@2 F O F D F D H@2 A@3 B@5 A@3 M N A B A N A B@2 A@3 P@2
>`.pickRestart({
  A: "~ f#4@3 ~ a3@7 ~ a3@3 ~ f#4@3 ~ a3@3 ~ f#4@7, [a3,d4] [d4,f#4]@2 [d4,f#4] [a3,d4] [d4,f#4] [a3,d4]@2", // D5 D D5 D D5
  B: "~ e4@3 ~ a3@7 ~ a3@3 ~ e4@3 ~ a3@3 ~ e4@7, [a3,c#4] [c#4,e4]@2 [c#4,e4] [a3,c#4] [c#4,e4] [a3,c#4]@2", // A C#m A C#m A
  C: "~ g4@3 ~ a3@7 ~ a3@3 ~ g4@3 ~ a3@3 ~ g4@7, [a3,c#4] [c#4,g4]@2 [c#4,g4] [a3,c#4] [c#4,g4] [a3,c#4]@2", // A C#dim A C#dim A
  D: "~ f#4@3 ~ a3@7 ~ a3@7 ~ a3@3 ~ f#4@3 ~ a3@3, [a3,d4] [d4,f#4]@2 [d4,f#4]@2 [d4,f#4] [a3,d4] [d4,f#4]", // D5 D D5 D
  E: "~ g4@3 ~ a3@7 ~ a3@7 ~ a3@3 ~ f#4@3 ~ a3@3, [a3,d4] [d4,g4]@2 [d4,f#4]@2 [d4,f#4] [a3,d4] [d4,f#4]", // D5 G5 D D5 D
  F: "~ g4@3 ~ b3@7 ~ b3@7 ~ b3@3 ~ g4@3 ~ b3@3, [b3,d4] [d4,g4]@2 [d4,g4]@2 [d4,g4] [b3,d4] [d4,g4]", // Bm G5 Bm G5
  G: "~ f#4@3 ~ b3@7 ~ b3@7 ~ b3@3 ~ f#4@3 ~ b3@3, [b3,d4] [d4,f#4]@2 [d4,f#4]@2 [d4,f#4] [b3,d4] [d4,f#4]", // Bm D Bm D
  H: "~ e4@3 ~ a3@7 ~ a3@7 ~ a3@3 ~ e4@3 ~ a3@3, [a3,c#4] [c#4,e4]@2 [c#4,e4]@2 [c#4,e4] [a3,c#4] [c#4,e4]", // A C#m A C#m
  I: "~ e4@3 ~ g#3@7 ~ g#3@7 ~ g#3@3 ~ e4@3 ~ g#3@3, [g#3,b3] [b3,e4]@2 [b3,e4]@2 [b3,e4] [g#3,b3] [b3,e4]", // G#m E5 G#m E5
  J: "~ g4@3 ~ a3@7 ~ a3@7 ~ a3@3 ~ g4@3 ~ a3@3, [a3,c#4] [c#4,g4]@2 [c#4,g4]@2 [c#4,g4] [a3,c#4] [c#4,g4]", // A C#dim A C#dim
  K: "~ d4@3 ~ g3@7 ~ g3@3 ~ e4@3 ~ a3@7 ~ a3@3, [g3,b3] [b3,d4]@2 [b3,d4] [a3,c#4] [c#4,e4]@2 [c#4,e4]", // G Bm A C#m
  L: "~ f#4@3 ~ a3@7 ~ a3@3 ~ e4@3 ~ a3@3 ~ e4@3 ~ a3@3, [a3,d4] [d4,f#4]@2 [d4,f#4] [a3,c#4] [c#4,e4] [a3,c#4] [c#4,e4]", // D5 D A C#m A C#m
  M: "~ g4@3 ~ b3@7 ~ b3@3 ~ g4@3 ~ b3@3 ~ g4@7, [b3,e4] [e4,g4]@2 [e4,g4] [b3,e4] [e4,g4] [b3,e4]@2", // E5 Em E5 Em E5
  N: "~ g4@3 ~ b3@7 ~ b3@3 ~ g4@3 ~ b3@3 ~ g4@7, [b3,d4] [d4,g4]@2 [d4,g4] [b3,d4] [d4,g4] [b3,d4]@2", // Bm G5 Bm G5 Bm
  O: "~ f#4@3 ~ a3@7 ~ a3@7 ~ a3@3 ~ f#4@3 ~ a3@3, [a3,c#4] [c#4,f#4]@2 [c#4,f#4]@2 [c#4,f#4] [a3,c#4] [c#4,f#4]", // A F#5 A F#5
  P: "[~@2 f#4@45 ~@17, d3@47 ~@17, ~ [a3,d4]@46 ~@17]/2", // D5
})).s("gm_acoustic_guitar_steel").gain(0.31).pan(0.7)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note("<~@15 A@3 B C D ~@3 E@2 ~@19 F@3 ~@6 A@3 B C D ~@3 E@2 ~@19 G@2 H ~@27 I@5 ~>".pickRestart({
  A: "[~@16 e4@13 ~@3 f#4@13 ~@3, ~@15 a3@14 ~@2 a3@14 ~@3, ~@31 c#4@27 ~@5 d4@27 ~@6]/3",
  B: "[a3,d4,g4]@5 ~ [a3,d4,f#4]@8 ~@2", C: "[b3,d4,g4]@11 ~@5", D: "[g#3,b3,e4]@11 ~@5",
  E: "[[b3,d4]@14 ~@2 [a3,e4]@9 ~@7 f#4@16 ~@16, g3@11 ~@4 c#4@9 ~@6 [a3,d4]@18 ~@16]/2", // Bm A5 D5
  F: "[~@4 a4@8 e4@12 ~@9 d5@24 ~@7 a4@11 ~ f#4@18 ~@2, ~@31 f#4@26 ~@6 [d4,f#4]@12 [a3,d4]@20 ~, ~@32 a4@25 ~@39]/3", // D D5
  G: "[~@4 a4@8 e4@12 ~@9 d5@24 ~@7, ~@31 f#4@26 ~@7, ~@32 a4@25 ~@7]/2", H: "~ f#4 e4 d4@3 ~@2",
  I: "[~@4 a4@8 e4@18 ~@3 d5@24 ~@8 d5@24 ~@8 d5@24 ~@8 d5@24 ~@7, ~@31 f#4@26 ~@6 f#4@26 ~@6 f#4@26 ~@6 f#4@26 ~@7, ~@32 a4@25 ~@7 a4@25 ~@7 a4@25 ~@7 a4@25 ~@7]/5",
})).s("gm_epiano2").gain(0.4).pan(0.2)

// drums · kick
const kick = s("bd").struct("<[x!4]!118 x ~>").gain(0.6)

// drums · snare
const snare = s("sd").struct("<A@8 B A@12 C A@25 B A@12 C A@25 D A@7 E A@22 C ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~", C: "~@2 x ~@2 x!3", D: "~@4 x ~@7 x ~ x!2", E: "~ x!3 ~@2 x ~",
})).gain(0.53)

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@16 A ~@21 A ~@16 A ~@55>".pickRestart({
  A: "~@7 x",
})).gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@8 A ~@16 A ~@7 B ~@7 C ~@5 A ~@16 A ~@7 B ~@7 C ~@13 D ~@7 B ~@7 C ~@9
>`.pickRestart({
  A: "~@5 x!2 ~", B: "~@5 x!3", C: "~@10 x ~ x ~ x!2", D: "~@5 x ~ x",
})).gain(0.47)

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

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

// drums · crash
const crash = s("cr").struct(`<
  A ~@8 A ~@7 A ~@4 A ~@3 A ~@7 A ~@13 A ~@7 A ~@4 A ~@3 A ~@7 A ~@13 A ~@7 A ~@7 A ~@7 A ~@6 A ~
>`.pickRestart({
  A: "x",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 [~@3 x]!17 ~@22 [~@3 x]!17 ~@22 [~@3 x]!8 ~@25>").gain(0.4)

// drums · shaker
const shaker = s("sh").struct("<A@9 B C@16 A@22 C@17 A@22 C@8 A@23 D ~>".pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", B: "x!2 ~@6", C: "~ x ~@6", D: "x",
})).gain(0.2)

stack(
  bass, synth_strings_1, electric_guitar_clean, electric_guitar_clean_2, acoustic_guitar_steel, epiano2, kick, snare,
  low_tom, hihat, mid_tom, open_hat, high_tom, crash, tambourine, shaker
)

More by Brunner & Brunner