Strudelify

Das Drews Sommerhit Medley '99

Jurgen Drews

KeyD majorTempo114 bpm
0:00/0:00
// Das Drews Sommerhit Medley '99 — Jurgen Drews
// 114 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(114/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~@4 A B C D E F G@4 H I H J K@2 H J H I H J K@2 L M N@2 M@2 O@2 M P N@2 M@2 O@2 Q R Q R Q R S T Q R Q R Q R S U ~@7 V
  ~@4 W X Y Z S T U@2 Y Z S T W X Y Z S T U@2 Y@2 AA@2 Z T AB@6 AC@2
>`.pickRestart({
  A: "g1 ~ g1@2 e2@2 d2@3 ~@3 b1@2 d2@2", B: "g1@2 g1@2 e2@2 d2@3 ~@3 b1@2 d2@2",
  C: "d1 ~ d1@2 b1@2 a1@3 ~@3 f#1@2 a1@2", D: "d1@2 d1@2 b1@2 a1@3 ~ a1@2 b1@2 d2@2",
  E: "a1 ~ a1@2 f#2@2 e2@3 ~@3 c#2@2 e2@2", F: "a1 ~ a1@2 f#2@2 e2@3 ~@3 f#2@4", G: "d2", H: "d1!2 b1 d1@2 ~@3",
  I: "d1!2 b1 g1@2 ~@3", J: "d1!2 b1 g1@2 g1 f#1 g1", K: "a1!2 f#2 e2@2 ~@3", L: "d1!2 b1 a1@2 ~@3",
  M: "d1!2 b1 d1 a1 d1 b1 d2", N: "g1!2 e2 g1 d2 g1 e2 g2", O: "a1!2 f#2 a1 e2 a1 f#2 a2",
  P: "d1 d2 e1 e2 f1 f2 f#1 f#2", Q: "d2 d3 d2 d3 a1 a2 a1 a2", R: "g1 g2 g1 g2 g1 g2 a1 a2",
  S: "d2 d3 d2 d3 d2 d3 d2 d3", T: "a1 a2 a1 a2 a1 a2 a1 a2", U: "f#1 f#2 f#1 f#2 f#1 f#2 f#1 f#2",
  V: "a1@2 a2!2 a1@2 a2@2 a1 ~ a2!2 a1!2 a2!2", W: "e1 e2 e1 e2 e1 e2 e1 e2", X: "e1 e2 e1 e2 f#1 f#2 e1 e2",
  Y: "d2@2 d3@2 d2@2 d3@2 d2@2 d3@2 d2@2 d3 ~", Z: "g1 g2 g1 g2 g1 g2 g1 g2", AA: "b1 b2 b1 b2 b1 b2 b1 b2", AB: "d1",
  AC: "[d1@31 ~]/2",
})).s("gm_fretless_bass").gain(0.44)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@14 A B A B C D A B A B A B C D A B E F A G C D A H E F A G C D I J I J I J K L I J I J I J K M ~@5 N O ~@39
>`.pickRestart({
  A: "[a3,d4,f#4]@2 ~ [a3,d4,f#4] ~@2 [a3,d4,f#4]@2 ~ [a3,d4,f#4] ~@2 [a3,d4,f#4] ~ [a3,d4,f#4] ~", // D
  B: "[a3,d4,f#4]@2 ~ [a3,d4,f#4] ~@2 [b3,d4,g4]@3 ~ [b3,d4,g4] ~@2 [b3,d4,g4] ~ [b3,d4,g4]", // D G
  C: "[a3,c#4,e4]@2 ~ [a3,c#4,e4] ~@2 [a3,c#4,e4]@2 ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~ [a3,c#4,e4] ~", // A
  D: "[a3,c#4,e4]@2 ~ [a3,c#4,e4] ~@2 [a3,c#4,e4]@3 ~ [a3,c#4,e4] ~@2 [a3,c#4,e4] ~ [a3,c#4,e4]", // A
  E: "[b3,d4,g4]@2 ~ [b3,d4,g4] ~@2 [b3,d4,g4]@2 ~ [b3,d4,g4] ~@2 [b3,d4,g4] ~ [b3,d4,g4] ~", // G
  F: "[b3,d4,g4]@2 ~ [b3,d4,g4] ~@2 [b3,d4,g4]@3 ~ [b3,d4,g4] ~@2 [b3,d4,g4] ~ [b3,d4,g4]", // G
  G: "[a3,d4,f#4]@2 ~ [a3,d4,f#4] ~@2 [a3,d4,f#4]@3 ~ [a3,d4,f#4] ~@2 [a3,d4,f#4] ~ [a3,d4,f#4]", // D
  H: "[a3,d4,f#4]@2 ~ [a3,d4,f#4] ~@2 [a3,e4,a4]@3 ~ [a3,f4,a4] ~@3 [a3,f#4,a4]!2", // D A5 Dm D
  I: "[d4,f#4]@2 ~ [d4,f#4] ~@2 [d4,f#4]@2 ~ [c#4,e4] ~@2 [c#4,e4] ~ [c#4,e4] ~", // D C#m
  J: "[d4,g4]@2 ~ [d4,g4] ~@2 [d4,g4]@3 ~ [d4,g4] ~@2 [e4,a4] ~ [e4,a4]", // G5 A5
  K: "[d4,f#4]@2 ~ [d4,f#4] ~@2 [d4,f#4]@2 ~ [d4,f#4] ~@2 [d4,f#4] ~ [d4,f#4] ~", // D
  L: "[c#4,e4]@2 ~ [c#4,e4] ~@2 [c#4,e4]@3 ~ [c#4,e4] ~@3 [c#4,e4]!2", // C#m
  M: "[d4,f#4]@2 ~ [d4,f#4] ~@2 [d4,f#4]@3 ~ [c#4,f#4] ~@3 [c#4,f#4]!2", N: "b3@3 g3@3 b3@3 c#4@7", O: "d4@13 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.33).pan(0.7)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@14 A B A C D E A B A B A C D E A B A@3 F D E A G A@3 F D E H I H I H I A J H I H I H I A K ~@12 L M N O N P Q@2 N O
  N P R S N O N P Q@2 N@2 T@2 O P ~@8
>`.pickRestart({
  A: "[f#4,a4,d5]!5 ~ [f#4,a4,d5] ~ [f#4,a4,d5]!5 ~@3", B: "[f#4,a4,d5]!5 ~ [f#4,a4,d5] ~ [g4,b4,d5]!5 ~@3",
  C: "[f#4,a4,d5]!5 ~@3 [g4,b4,d5]!5 ~@3", D: "[a4,c#5,e5] ~ [a4,c#5,e5]!3 ~ [a4,c#5,e5] ~ [a4,c#5,e5]!5 ~@3",
  E: "[a4,c#5,e5]!4 [a4,c#5,e5]@2 [a4,c#5,e5] ~ [a4,c#5,e5]!5 ~@3", F: "[f#4,a4,d5]!5 ~@3 [f#4,a4,d5]!5 ~@3",
  G: "[f#4,a4,d5] ~ [d3,a4,d5]!2 ~@2 [e3,a4,d5]!2 ~@2 [f3,a4,d5]!2 ~@2 [f#3,a4,d5]!2", // D D5 Dsus2 Dm D
  H: "[f#4,a4,d5]!5 ~ [f#4,a4,d5] ~ [e4,a4,c#5]!5 ~@3", I: "[g4,b4,d5]!5 ~ [g4,b4,d5] ~ [g4,b4,d5]!4 [a4,c#5,e5] ~@3",
  J: "[e4,a4,c#5]!5 ~ [e4,a4,c#5] ~ [e4,a4,c#5]!5 ~@3", K: "[d4,f#4,a#4]!5 ~ [d4,f#4,a#4] ~ [c#4,f#4,a#4]!5 ~@3",
  L: "~@2 e3@2 ~@2 e3@3 ~ e3@3 ~ e3@2", M: "~@2 e3@3 ~ e3@2 ~@2 f#3@3 ~ e3@2", N: "~@2 d3!2 ~@2 d3@2 ~@2 d3!2 ~@2 d3@2",
  O: "~@2 g2!2 ~@2 g2@2 ~@2 g2!2 ~@2 g2@2", P: "~@2 a2!2 ~@2 a2@2 ~@2 a2!2 ~@2 a2@2",
  Q: "~@2 f#2!2 ~@2 f#2@2 ~@2 f#2!2 ~@2 f#2@2", R: "~@2 e2!2 ~@2 e2@2 ~@2 e2!2 ~@2 e2@2",
  S: "~@2 e2!2 ~@2 e2@2 ~@2 f#2!2 ~@2 e2@2", T: "~@2 b2!2 ~@2 b2@2 ~@2 b2!2 ~@2 b2@2",
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.3)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  A B C B D@2 E@2 F@2 C B C B ~@6 G H ~@6 I@2 D@2 E@2 F@2 J@2 D@2 E@2 F@2 ~@21 K L@2 ~@3 M N@2 O P O Q R@2 O P O Q S@2 O
  P O Q R@2 T@5 U V@2 W@4 X@2
>`.pickRestart({
  A: "~@8 [a3,f#4]@6 a2 b2, ~@8 d3@5 ~@3", B: "[d3,a3,f#4]@5 ~ [g3,d4]@2 [g3,b3,d4]@8",
  C: "[d3,a3,f#4]@5 ~ [d3,a3,f#4]@2 [a3,f#4]@6 a2 b2, ~@8 d3@5 ~@3", D: "[[d3,g3]@31 ~]/2",
  E: "[~ [a3,f#4]@12 ~@3, ~@2 d3@27 ~@3]/2", F: "[~@3 [e3,a3,e4]@12 ~]/2", G: "[d3,a3,f#4]@5 ~ [d3,a3,f#4]@8 a2 b2",
  H: "[d3,a3,f#4]@5 ~ [g3,b3,d4]@10", I: "[~@6 [d3,a3,f#4]@25 ~]/2", J: "[~@3 [d3,a3,f#4]@12 ~]/2",
  K: "[g3,b4]@3 g4@3 [e3,b4]@3 [c#4,e4,c#5]@7", L: "[d5@6 f#5@9 ~, [b3,f#4] ~]/2", M: "~@11 [e4,b4] [e3,b3]@4",
  N: "[[e3,b3]@3 ~]/2", O: "[a3,d4]", P: "[d3,g3]", Q: "[e3,a3]", R: "[f#3,c#4]/2", S: "[[e3,b3]@7 ~]/2",
  T: "[~@4 d4@4 e4@4 f#4@8 d4@4 e4@4 f#4@8 d4@4 e4@4 f#4@8 d4@4 e4@4 f#4@7 ~ e4@4 f#4@4 g4@4]/5",
  U: "a4@4 ~@6 [a5,d6] [f#5,b5] [e5,a5] [c#5,f#5] [b4,e5] [a4,d5]", // D5 B5 A5 F#5 E5 D5
  V: "[[d3,a3,f#4]@6 [d3,a3,f#4]@2 [a3,f#4]@6 a2 b2 [d3,a3,f#4]@5 ~ [g3,d4]@2 ~@2 f#5@4 e5@2, d5@25 ~@7, ~@8 d3@5 ~@11 [g3,b3,d4]@8]/2", // D G5 G
  W: "[[d3,a3,f#4]@6 [d3,a3,f#4]@2 [a3,f#4]@6 a2 b2 [d3,a3,f#4]@5 ~ [g3,d4]@2 ~@2 f#5@4 e5@2, d5@13 ~@3, ~@8 d3@5 ~@11 [g3,b3,d4]@8]/2", // D G5 G
  X: "[[d3,a3,f#4,d5]@7 ~]/2", // D
})).s("gm_overdriven_guitar").gain(0.33).pan(0.4)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@4 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I J F@2 G@2 H@2 I J ~@14 K L M N O N P Q K L M N O N P R S T U@2 V W X Y Z@4 AA@2
  ~@18 AB@2 AC@2 AD AE D@2 E@4 ~@2
>`.pickRestart({
  A: "[~@3 [b4,d5,g5]@13]/2", B: "[a4,d5,f#5]/2", C: "[a4,c#5,e5]/2", D: "[a4 ~@23 g4@8, [d4,d5]@31 ~]/2",
  E: "[a4@24 g4@7 ~, [d4,d5]@31 ~]/2", F: "[f#5@8 f#5@3 g5@5, a4]/2", G: "[f#5@8 f#5@3 g5@5, d5]/2",
  H: "[a5@8 a5@3 a5@5, e5]/2", I: "f#5, a5 ~@15", J: "d5", K: "[d5,f#5]@7 ~ [a4,c#5,e5]@8", L: "[d5,g5]@3 [e5,a5]",
  M: "[d5,f#5] [c#5,e5]", N: "[d5,g5]@12 [e5,a5]@3 ~", O: "[d5,f#5]@8 [c#5,e5]@7 ~", P: "[d5,f#5]", Q: "[c#5,e5]",
  R: "b5 a#5, c#5@15 ~", S: "d6 [f#5,d6]!3 ~ [d5,b5]!3 [f#5,d6]!4 ~ [d5,b5]!3",
  T: "[f#5,d6]!4 ~ [d5,a5]!3 [f#5,d6]!4 ~ [d5,a5]!3", U: "[g#5,e6]!4 ~ [e5,b5]!3 [g#5,e6]!4 ~ [e5,b5]!3",
  V: "[g5,e6]!4 ~ [e5,b5]!3 [g5,e6]!4 ~ [e5,b5]!3", W: "[g5,d6]!4 ~ [d5,b5]!3 [a5,e6]!4 ~ [e5,c#6]!3",
  X: "[f#5,d6]!4 ~ [d5,b5]!3 [f#5,d6]!4 ~ [d5,b5]!3", Y: "[e5,c#6]!4 ~ [c#5,a5]!3 [e5,c#6]!4 ~ [c#5,a5]!3",
  Z: "[~@11 a4@12 b4@2 a4@2 a4@5, [d4,d5]]/4", AA: "[[e4,g4,b4]@24 [f#4,f#5]@4 [e4,e5]@3 ~]/2", AB: "[a4,d5,f#5]",
  AC: "[b4,d5,f#5]", AD: "[g4,b4,d5]", AE: "[a4,c#5,e5]",
})).s("gm_rock_organ").gain(0.38).pan(0.7)

// chords · pad sweep · "SWEEP PAD"
const pad_sweep = note("<~@11 A B@2 ~@46 C@2 D@4 E F ~@4 G@2 ~@4 H@2 ~@10 H@2 I@5 J ~@5 K L ~>".pickRestart({
  A: "~@2 a5@4 ~ a3@9, ~@6 e5@9 ~", B: "[d6@31 ~]/2", C: "[[b2,b3] [d3,d4], f#3@31 ~]/2",
  D: "[e4@2 g#4@2 [e4,g4]@3 [c#4,a4], e3@7 ~, g#3@31 ~@33]/4", E: "[d4,b4] d5", F: "[a4,c#5,e5]",
  G: "[~ b4 e5@4 ~@2]/2", H: "[~@11 f#5@15 ~@6, ~@4 c#4@7 ~@21, ~@6 f#4@5 ~@21, ~ c#5 ~@2]/2",
  I: "[~@4 d5@4 e5@4 f#5@8 d5@4 e5@3 f#5@8 ~ d5@4 e5@3 f#5@8 ~ d5@4 e5@3 f#5@8 ~ e5@4 f#5@4 g5@4]/5", J: "a5@7 ~",
  K: "~@15 [d6,a6]", L: "[d4,a4]",
})).s("gm_pad_sweep").gain(0.27)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ A ~ A ~@7 A ~ A ~@7 B ~@7 B ~@12 C ~@8 D ~@9 A ~@5 E ~ A ~@5 A ~@5 A ~@5 A ~@5 A ~@7 A ~ A ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@11 x ~@4", C: "~ x ~@2", D: "~@5 x!2 ~", E: "~@14 x!2",
})).gain(0.32)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~ A ~@7 A ~ A ~@7 B ~@7 C ~@7 D ~@5 E ~@3 F ~@3 D ~@3 F ~@3 E ~ A ~@4 G H I A ~ I ~@3 A ~@3 E ~ A ~@3 E ~ A ~@3 E
  ~ A ~@3 E I A I A I A ~@2
>`.pickRestart({
  A: "~@3 x", B: "~@5 x ~@2", C: "x ~@2 x!2 ~@5 x ~@5", D: "~ x!2 ~@5", E: "~@5 x!2 ~", F: "~@3 x!2 ~@11",
  G: "~@7 x!2 ~@7", H: "x ~@8 x ~@2 x ~@3", I: "~ x ~@2",
})).gain(0.43)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@59 [~@11 x ~@4] ~@46>").gain(0.21)

// drums · open hat
const open_hat = s("oh").struct("<~ A ~@9 A ~@49 A ~@7 A ~@5 A ~@5 A ~@5 A ~@5 A ~@5 A ~@6>".pickRestart({
  A: "~@3 x",
})).gain(0.27)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~ A ~ B ~@7 A ~ B ~@47 A ~@5 C ~ A ~@5 A ~@5 A ~@5 A ~@5 A ~@5 A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~ x ~ x ~@2", C: "~@8 x ~@2 x ~@4",
})).gain(0.32)

// drums · crash
const crash = s("cr").struct("<~@104 x ~>").gain(0.27)

// drums · congas
const congas = s("conga:18").struct("<~@4 [~@2 x!3 ~@11]!6 ~@4 [~@2 x!3 ~@11]!46 ~@46>").gain(0.86)

// drums · congas
const congas_2 = s("conga:33").struct("<~@4 [~@10 x!3 ~@3]!100 ~@2>").gain(0.86)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  ~@4 A@4 B A@9 B A B A@5 B A B A@5 B A B A@5 B A@5 B A B A@5 B A B A@45 ~@2
>`.pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~ x!3",
})).gain(1.87)

// drums · triangle
const triangle_2 = s("triangles:35").struct(`<
  ~@4 A@4 ~ A@9 ~ A ~ A@5 ~ A ~ A@5 ~ A ~ A@5 ~ A@5 ~ A ~ A@5 ~ A ~ A@45 ~@2
>`.pickRestart({
  A: "~@13 x ~@2",
})).gain(1.87)

stack(
  bass, acoustic_guitar_steel, electric_guitar_muted, overdriven_guitar, rock_organ, pad_sweep, kick, snare, low_tom,
  hihat, mid_tom, mid_tom_soft, open_hat, high_tom, crash, congas, congas_2, triangle, triangle_2
)

More by Jurgen Drews