Strudelify

Ich Hab' Geglaubt, du Liebst Mich (Without You)

Bernhard Brink

KeyC majorTempo68 bpm
0:00/0:00
// Ich Hab' Geglaubt, du Liebst Mich (Without You) — Bernhard Brink
// 68 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 4 "E.PIANO" epiano2 (copy of ch 3 "A.PIANO" piano)
// note: Full arrangement: all 52 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(68/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(`<
  ~@9 A B C D E F G H I J K L M N O P Q@5 R S T@3 U V W X U Y Z AA AB Y AC AD AE AF Z AG@2
>`.pickRestart({
  A: "~@3 g1", B: "c2", C: "e2", D: "d2", E: "e2 e1", F: "a1 g1", G: "f#1@3 d2", H: "c2@15 ~", I: "g1@7 ~",
  J: "c2@6 ~ g1 c2 ~ c2@5 ~", K: "a1@5 ~@2 e1 a1 ~ a1@6", L: "d2@7 a1 d2 ~ d2@4 d2@2", M: "g1@6 ~ d2 g2 ~ g2@3 d2 g1@2",
  N: "c2@6 ~ g1 c2 ~ c2@6", O: "a1@7 e1 a1 ~ a1@3 ~ a1@2", P: "d2@5 ~@2 a1 d2 ~ d2@3 ~ d2@2",
  Q: "[g1@7 d2 g2@12 ~@4 c2@16 e2@16 d2@16 e2@8]/5", R: "e1 a1", S: "g1 f#1", T: "[d2@8 c2@16 g1@14 ~@2 c2@5 ~@2 g1]/3",
  U: "c2 ~ c2@4 g1@2 a1@6 ~ e1", V: "a1 ~ a1@3 ~ a1@2 d2@4 d2@3 a1", W: "d2 ~ d2@4 d2@2 g1@6 ~ g1",
  X: "g2 ~ g2@3 d2 g1 a1 c2@5 ~@2 g1", Y: "a1 ~ a1@3 ~ a1@2 d2@6 ~ a1", Z: "d2 ~ d2@3 ~ d2@2 g1@7 d2",
  AA: "g2 d2 g1@3 g2@3 c2@5 ~@2 g1", AB: "c2 ~ c2@6 a1@5 ~@2 e1", AC: "d2 ~ d2@3 a1 d2@2 g1@6 ~ d2",
  AD: "g2 ~ g2@3 d2 g1 a1 c2@7 g1", AE: "c2 ~ c2@5 c2 a1@6 ~ [e1,a1]", AF: "a1 ~ a1@3 e2 a2@2 d2@6 ~ a1",
  AG: "[g2 g1 c2@4 ~@2]/2",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · piano · "A.PIANO"
const piano = note(`<
  A@3 B C D E F G H I B J K L M N O P Q R S T Q U V@3 W X@2 Y@4 Z AA@2 AB Z AC AD AE Z AF AG AH Z AI AJ@3
>`.pickRestart({
  A: "[[g4,d5]@2 ~@2 [g4,d5]@4 [e4,c5]@3 ~ [e4,c5]@4 [g4,d5]@3 ~ [g4,d5]@3 ~ [e4,c5]@3 ~ [e4,c5]@2 ~@2 [g4,d5]@3 ~ [g4,d5]@4 [e4,c5]@3 ~ [e4,c5]@3 ~, ~@2 c4@27 ~ c4@18]/3", // G5 C G5 C G5 C
  B: "[e4,a4,b4]@3 ~ [e4,a4,b4]@3 ~ [e4,g4,b4]@3 ~ [e4,g4,b4]@3 ~", // Esus4 Em
  C: "[d4,g4,a4]@3 ~ [d4,g4,a4]@3 ~ [d4,f4,a4]@3 ~ [d4,e4,a4]@2 ~@2", // Dsus4 Dm Dsus2
  D: "[e4,a4,b4]@3 ~ [e4,a4,b4]@3 ~ [e4,g#4,b4]@3 ~ [e4,g#4,b4,d5]@3 ~", // Esus4 E E7
  E: "[e4,a4,c5]@4 [e4,a4,c5]@3 ~ [e4,g4,c5]@3 ~ [e4,g4,c5]@2 ~@2", // Am C
  F: "[d4,f#4,a4,d5]@3 ~ [d4,f#4,a4,d5]@2 ~@2 [f#4,a4,d5,f#5]@4 [f#4,a4,d5]@4", // D
  G: "[e4,g4,c5]@4 [g4,c5]@2 ~@2 [e4,g4,c5]@2 ~@2 [e4,g4,c5]@3 ~, ~@2 c4@5 ~", // C C5 C
  H: "[f4,a4,c5]@3 ~ [f4,a4,c5]@3 ~ [g4,b4,d5]@3 ~ f5 ~ c5 g4, g3@13 e5@2 ~, ~@11 g4@3 ~@2", // F G
  I: "[g4,d5]@3 ~ [g4,d5]@3 ~ [e4,g4,c5]@3 ~ [e4,g4,c5]@3 ~, c4", // G5 C
  J: "[d4,g4,a4]@3 ~ [d4,f4,a4]@3 ~ [d4,e4,a4]@3 ~ [d4,f4,a4]@3 ~", // Dsus4 Dm Dsus2 Dm
  K: "[e4,a4,b4]@3 ~ [e4,a4,b4]@2 e4@2 [g#4,b4,e5]@2 e4@2 ~@2 e4 ~, ~@3 [g#4,b4,d5]", // Esus4 E G#dim
  L: "[e4,a4,c5]@3 ~ e4@2 e4 ~ [e4,g4,c5]@3 ~ [e4,g4,c5]@2 ~@2, ~ [a4,c5] ~@2", // Am C Am
  M: "[f#4,a4,d5]@3 ~ [f#4,d5]@2 ~@2 [f#4,a4]@2 ~@2 f#4@4, d4@15 ~, ~@4 a4 ~@3 f#5@6 ~@2, ~@5 d5@2 ~, ~@6 a4 ~", // D F#m
  N: "[g4,c5]@3 ~ c5@2 g4 ~ e5@2 g4 ~ [g4,c5]@2 g4 ~, e4@3 ~ e4@3 ~, ~@2 c4@5 ~, ~@4 g4 ~@3 g4 ~@7", // C5
  O: "[f4,a4,c5]@2 f4 ~ f4 ~ f4 ~ [g4,b4,d5]@3 ~ g4 ~ g4 ~, g3@7 ~, ~ [a4,c5] ~ [b4,d5]", // F G Am Bm
  P: "[g4,c5,e5]@3 ~@3 g4 ~ [c5,e5]@2 g4 ~ [c5,e5]@2 g4 ~, ~@4 [c5,e5]@4 g4 ~@3 g4 ~@3", // C
  Q: "[a4,d5]@2 e4 ~ [a4,c5]@2 e4 ~ [a4,d5] ~ a4 ~ [a4,c5]@2 e4 ~, e4 ~@3 e4 ~@3 e4@3 ~ e4 ~@3, ~@9 c5@2 ~@5", // D5 Am D5 Am
  R: "[f4,a4,d5]@3 ~ [f4,a4,d5]@3 ~ [a4,d5]@2 f4 ~ [f4,a4,d5]@2 ~@2, ~@8 f4 ~@7", // Dm D5 Dm
  S: "[b4,d5,f5]@2 g4 ~ [b4,d5,f5]@2 g4 ~ b4@2 ~@2 b4 ~ a4 b4, g4 ~@3 g4 ~@3 [d5,f5]@4 ~@2 d5@2, ~@8 g4 ~ g4@4 ~@2", // Bdim Dm
  T: "[c5,e5]@2 g4@2 [c5,e5]@2 g4 ~ [c5,e5]@2 g4 ~ [c5,e5]@2 g4 ~, c4@8 g4 ~@3 g4 ~@3", // C
  U: "[f4,a4,d5]@2 f4 ~ [d5,f5]@2 a4 ~ [d5,f5]@2 a4 ~ [d5,f5]@2 a4 ~, ~@2 f4@5 ~, ~@4 a4 ~@3 a4 ~@3 a4 ~@3", // Dm
  V: "[[b4,d5,f5]@2 g4 ~ [b4,d5,f5]@2 g4 ~ [g4,b4,d5,f5]@13 ~@3 [g4,d5]@3 ~ [g4,d5]@3 ~ [e4,g4,c5]@3 ~ [e4,g4,c5]@3 ~ [e4,a4,b4]@3 ~ [e4,a4,b4]@3 ~, g4 ~@3 g4 ~@19 c4@16 ~@8]/3", // Bdim G7 G5 C Esus4
  W: "[e4,g4,b4]@3 ~ [e4,g4,b4]@3 ~ [d4,g4,a4]@3 ~ [d4,f4,a4]@4", // Em Dsus4 Dm
  X: "[[d4,e4,a4]@3 ~ [d4,f4,a4]@2 ~@2 [e4,a4,b4]@4 ~@2 b4 ~ [g#4,b4]@2 e4@2 [g#4,b4,e5]@2 e4@2 [a4,c5]@2 e4@2 [a4,c5]@2 e4@2, ~@12 e4@5 ~@15, ~@13 a4@2 e5@4 ~@13]/2", // Dsus2 Dm Esus4 G#m E Am
  Y: "[[g4,c5]@2 e4 ~ [g4,c5]@2 e4 ~ [f#4,a4,d5]@2 ~@2 [f#4,a4,d5] ~ a5@2 [a4,f#5] ~ a4 ~ [f#4,d5]@2 a4 ~ [g4,c5]@2 g4 ~ [g4,c5]@2 ~@2 [g4,c5]@2 ~@2 c5@2 g4 ~ [f4,a4,c5]@3 ~ [a4,c5]@2 f4 ~ [g4,b4,d5]@6 ~@2 [g4,c5,e5]@2 g4 ~ [c5,e5]@2 g4 ~, ~@4 e4 ~@3 d4@14 ~@2 e4@9 ~ e4@4 ~@6 f4 ~@19, ~@16 d5@2 ~@2 a4 ~@9 c4@8 ~@2 g3@14 ~@10, ~@17 f#5@3 ~@16 g4 ~@23 g4 ~@3]/4", // C5 D C5 F Am G C
  Z: "[c5,e5]@2 g4 ~ [c5,e5]@2 g4 ~ [a4,d5]@2 e4 ~ [a4,c5]@2 e4 ~, g4 ~@3 g4 ~@3 e4 ~@3 e4 ~@3", // C D5 Am
  AA: "[[a4,d5] ~ a4 ~ [a4,c5]@2 e4 ~ [d5,f5]@2 a4 ~ [a4,d5,f5]@2 ~@2 [d5,f5]@2 a4 ~ [d5,f5]@2 a4 ~ [g4,b4,d5,f5]@2 e5 ~ g4 ~ g4 ~, e4@3 ~ e4 ~@9 f4@8 ~@10, ~ c5@2 ~@5 a4 ~@7 a4 ~@3 a4 ~@7 [b4,d5]@4]/2", // D5 Am Dm G7 Bm
  AB: "g4 ~ g4 ~ g4 a4 b4 ~ [c5,e5]@2 g4@2 [c5,e5]@2 g4 ~, [b4,d5,f5]@4 ~ d5@2 g4@2 ~@3 g4 ~@3", // C Bdim
  AC: "[a4,d5] ~ a4 ~ [a4,c5]@2 e4 ~ [a4,d5,f5]@2 f4@2 [a4,d5,f5]@2 f4 ~, e4@3 ~ e4 ~@11, ~ c5@2 ~@13", // D5 Am Dm
  AD: "[f4,a4,d5,f5]@2 f4@2 [a4,d5,f5]@2 f4 ~ [g4,b4,d5,f5]@2 e5 ~ g4 ~ g4 ~, ~@3 [b4,d5]", // Dm G7 Bm
  AE: "[b4,d5,f5]@2 g4 ~ [b4,d5,f5]@2 g4 ~ [c5,e5]@2 g4 ~ [c5,e5]@2 g4 ~, g4 ~@3 g4 ~@3 g4 ~@3 g4 ~@3", // Bdim C
  AF: "[a4,d5] ~ a4@2 [e4,c5]@2 a4 ~ [a4,e5]@2 f4 ~ [a4,e5]@2 f4 ~, e4@3 ~@5 f4 ~@3 f4 ~@3, ~ c5@2 ~ a4 ~@11", // D5 C A5
  AG: "[a4,d5]@2 f4 ~ [a4,d5]@2 f4 ~ [a4,b4,d5]@3 ~ g4 ~ g4 ~, f4 ~@3 f4 ~@7 [b4,d5]@4", // D5 Bm7 Bm
  AH: "a4 b4 a4@2 ~ a4 b4 ~ [c5,e5]@2 g4 ~ g4 ~ g4 ~, d5@7 ~@5 [c5,e5]@4, ~@4 g4@2 ~ g4@2 ~@7", // C
  AI: "[a4,c5]@2 ~@2 [a4,d5] ~ a4 ~ [a4,e5]@2 f4 ~ [a4,e5]@2 f4 ~, e4 ~ e4@5 ~ f4 ~@3 f4 ~@3, ~@5 c5@2 ~@9", // Am D5 A5
  AJ: "[[a4,d5]@2 f4 ~ [a4,d5]@2 f4 ~ [c5,d5]@2 g4 ~ [c5,d5]@2 ~@2 [b4,d5]@2 ~@2 g4 [a4,d5] b4 ~ [g4,d5]@3 ~ [g4,d5]@4 [e4,c5]@13 ~@3, f4 ~@3 f4 ~@3 g4 ~@3 g4 ~ g4@4 g3@4 ~@26, ~@19 d4@3 ~@2 c4@21 ~@3]/3", // D5 Csus2 Bm D5 G5 C
})).s("gm_piano").gain(0.48).pan(0.3)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@46 A@4 B ~>".pickRestart({
  A: "[~ e4 f4 g4 a4 b4 c5 d5 e5@6 g5 d5@3 g5 c5@3 g5 b4@7 c5 a4@4 ~ g4 a4 c5@2 e5@6 f5 d5@7 a4!2 a4@2 g4 ~ g4@2 f4 ~]/4",
  B: "f4@2 e4 ~ e4@2 d4@2 c4@4 ~@4",
})).s("gm_overdriven_guitar").gain(0.6).pan(0.4)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@19 A ~@3 A ~@12 B ~@3 B ~ C@2 D E@3 D F@3>".pickRestart({
  A: "~@8 [d4,d5] [c4,c5] [a3,a4] ~@5", B: "[d4,d5] [c4,c5] [a3,a4] ~@13",
  C: "[~@8 e5@8 d5@4 c5@4 [b3,b4]@7 ~, ~ c4@2 ~]/2", D: "[d4,d5] [c4,c5] [a3,a4]@4 [c4,c5]@2 [e4,e5]@8",
  E: "[[d4,d5]@4 c4 d4 e4 f4 [g3,g4]@11 ~ [g3,g4] [a3,a4] [c4,c5] [a3,a4] e5@8 d5@4 c5@4 [b3,b4]@8, ~@3 c4@2 ~, ~@32 e5 ~@15]/3", // D G A C A B
  F: "[[d4,d5]@4 c4 d4 e4 f4 [g3,g4]@11 ~ [g3,g4] [a3,a4] [c4,c5] [a3,a4] ~ c3@15 ~@8, ~@3 c4 ~@2, ~@12 c5 ~@11]/3", // D G A C A
})).s("gm_string_ensemble_1").gain(0.35)

// chords · synth strings 1 · "SYN STRING"
const synth_strings_1 = note("<~@10 A@3 B C@2 D@2 E F G@2 H I J K L@4 M@2 N@2 O@5 P@6 Q@7>".pickRestart({
  A: "[[c4,g4]@4 a4@2 ~@3 f4 e4 f4, e3@31 ~ [d3,a3]@15 ~, ~ b3 ~, ~@2 g4 ~]/3", // C5 D5
  B: "a4@4 g#4@2 a4 [d4,b4], e3@15 ~, b3@12 c4 ~@3", C: "[a3@7 ~ g3@7 ~@8 a4@8 ~, c5@23 ~@9, e4@15 ~ [f#3,d4]@16]/2",
  D: "[[e3,c4]@2 ~ g2, g4@31 ~, ~ g3]/2", E: "[g3,e4], c3@7 ~", F: "d4@4 c4@11 ~, [a2,e3]@15 ~",
  G: "[a3@15 ~@7 g3@8 d5@2, [d3,f4]@15 ~, ~@8 b3@7 ~]/2", H: "[g4,e5], c4@7 ~", I: "d5 c5@3, [a3,e4]@15 ~",
  J: "[d4,a4,f5]@15 ~", K: "[b4,g5]@7 g3, [d4,f4]@3 ~",
  L: "[g2@8 g4@16 a4@8 ~@12 f4@4 e4@4 f4@3 ~ [b3,a4]@8, ~@8 e3@30 ~@2 [d3,a3]@15 e3@9, ~@4 c4@7 ~ b3@8 ~@12, ~@8 g4@3 ~@5]/4", // B7 D5
  M: "[g#4@4 [c4,a4]@2 [d4,b4]@2 a3@8 g3@7 ~ [f#3,d4]@8, ~ c5@3, ~@8 e4@15 ~@9]/2", // F G D
  N: "[a4@7 ~ g4@16 [g3,g4]@8, ~@7 e3@17 ~@8, ~@4 c4@7 ~@5]/2", // G
  O: "[g2@8 [g4,e5]@16 d5@4 c5@12 [d4,a4]@15 ~ [b3,d5]@16 [c4,e5]@8, ~@8 c4@14 ~@2 [a3,e4]@15 ~ f5@32 ~@8, ~@7 g4@3]/5", // C D5 Bm C A5
  P: "[~@8 d5@4 c5@12 [d4,a4]@15 ~ [b3,d5]@15 ~ e5@16 d5@4 c5@12 [f4,e5]@8, ~@8 [a3,e4]@15 ~ f5@32 c4@14 ~@2 a3@24, ~@40 g4@31 ~ e4@16 ~@8]/6", // D5 Bm Fmaj7 A5
  Q: "[~@24 [c4,e5]@16 d5@8 c5@8 f4 ~@7 d5@8 c5@8 ~@4 f4@3 ~@9 c3@7 ~@9, d5@3 ~@4 e5 ~@2 b4 ~@3, ~@7 b3@15 ~@18 a3@32 [g3,d4]@16 [c4,c5]@14 ~@10, ~@8 g4@32 e4@15 ~@3 f4@13 ~@17 e4@12 ~@12]/7", // C G5 C
})).s("gm_synth_strings_1").gain(0.35)

// drums · kick
const kick = s("bd").struct("<~@14 A B C ~ B D A E D F A C ~@4 G H I ~ G H J H K@2 H L M K@3 N K@2 N O ~>".pickRestart({
  A: "x ~@6 x!2 ~ x ~@3 x ~", B: "x ~@6 x!2 ~ x ~@5", C: "x ~@6 x!2 ~@7", D: "x ~@6 x!2 ~ x ~@4 x",
  E: "x ~ x ~@6 x!2 ~@2 x!2 ~", F: "x ~ x ~@4 x!2 ~ x ~@3 x ~", G: "~@8 x ~@6 x", H: "x ~ x ~@3 x ~ x ~@6 x",
  I: "x!2 ~@2 x ~@3", J: "x ~ x ~@4 x!2 ~ x ~@4 x", K: "x ~ x ~@4 x!2 ~@6 x", L: "x ~ x ~@4 x!2 ~ x ~@5",
  M: "~ x!2 ~@2 x!4 ~@6 x", N: "x ~@6 x!2 ~@6 x", O: "x ~ x ~@4 x!2 ~@7",
})).gain(0.64)

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

// drums · low tom
const low_tom = s("lt").struct("<~@17 A ~@3 B ~@8 C ~@3 C ~@3 C ~@3 C ~@3 C ~@3 D ~>".pickRestart({
  A: "~@7 x", B: "~@15 x", C: "~@7 x ~@8", D: "~@6 x!2 ~@8",
})).gain(0.5)

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

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

// drums · open hat
const open_hat = s("oh").struct("<~@17 [~@7 x] ~@34>").gain(0.29)

// drums · high tom
const high_tom = s("ht").struct("<~@17 A ~@12 B ~@3 C ~@3 B ~@7 D ~@2 E F ~>".pickRestart({
  A: "~@13 x ~@2", B: "~@5 x ~@10", C: "~@4 x!2 ~@10", D: "~ x!2 ~@5", E: "~@7 x", F: "x",
})).gain(0.57)

// drums · crash
const crash = s("cr").struct("<~@18 A ~@3 A ~@2 B ~@4 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.43)

stack(
  bass, piano, overdriven_guitar, string_ensemble_1, synth_strings_1, kick, snare, low_tom, hihat, mid_tom, open_hat,
  high_tom, crash
)

More by Bernhard Brink