Strudelify

Das Boot

U96

KeyC majorTempo122 bpm
0:00/0:00
// Das Boot — U96
// 122 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 163 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(122/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 · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A@2 B@2 C@2 D@2 E F@3 G H@3 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 I@2 J@2 I@2 J@2 ~ I@2 J@2 I@2 J@2 K E F@3 G H@3 E F@3 G
  H@3 ~@3 E F@3 G H@3 L@2 M@2 N@2 O@2 P Q I@8 E F@3 G H@3 E F@3 G H@3 ~@12 I@2 J@2 I@2 J@2 E F@3 G H@3 E F@3 G H@3 R@5
  S@2 T U@3 ~@5
>`.pickRestart({
  A: "[~ g3 ~ d#4@5, c3@15 ~, ~ c2@15, ~ g#3@3]/2", B: "[~ f#3 ~ d4@5, c3@31 ~, ~ c2@15, ~ g3@3]/2",
  C: "[~ f#3 ~ c#4@5, c3@15 ~, ~ c2@15, ~ g3@3]/2", D: "[~ f3 ~ c4@5, c3, ~ c2@15, ~ g3@3]/2",
  E: "d#4@3 d4 c4 d4 d#4 g4, [c2,c3,g3], c4 ~", F: "[a#4@3 a4 g4 a4 a#4 d5 [a#2,a#3,f4,f5]@16, d4, [g2,g3] ~@2]/3",
  G: "f4@5 ~ e4@2 d4 ~ e4 ~ f4@2 a4@2, [d2,d3,a3]@15 ~, d4 ~", // D5
  H: "[c5@3 b4 a4 b4 c5 e5 [c2,c3,c4,g4,g5]@16, e4@47 ~, [a2,a3] ~@2]/3", I: "[[c#3,c#4]@7 [e3,e4]]/2",
  J: "[[b2,b3]@31 ~]/2", K: "e2@15 ~", L: "[~@4 [g3,g4]@3 ~ g#3@4 d#4@20, c3@31 ~, ~@4 g#4 ~ d#5 ~@9]/2",
  M: "[~ f#3 g3 d4@5, c3@31 ~, ~@2 f#4 ~ g4 ~ d5 ~@9]/2",
  N: "[~@4 [f#3,f#4]@3 ~ g3@4 c#4@20, c3@31 ~, ~@4 g4 ~ c#5 ~@9]/2", // F#
  O: "[~@4 f3@4 g3@4 c4@19 ~, c3@31 ~, ~@2 f4 ~ g4 ~ c5 ~@9]/2", P: "c3@13 ~ d3@2", Q: "g2@15 ~",
  R: "[c3@77 ~ c#3@2]/5", S: "[c3@15 d#3]/2", T: "c3@15 ~", U: "[c2,c3]/3",
})).s("gm_string_ensemble_1").gain(0.45)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@32 A@2 B@2 A@2 B@2 C A@2 B@2 A@2 B@2 ~ D E F@2 G H I@2 D E F@2 G H I@2 ~@3 D E F@2 G H I@2 ~@10 A@8 D E F@2 G H I@2
  D E F@2 G H I@2 J@4 K L K L M@2 N@2 A@2 B@2 A@2 B@2 D E F@2 G H I@2 D E F@2 G H I@2 ~@8 O@2 ~@6
>`.pickRestart({
  A: "c#2!16", B: "b1!16", C: "c#3 c2 ~@6", D: "c2 ~ c2!8 ~ c2!5", E: "g1 ~ g1!14", F: "a#1 ~ a#1!14", G: "d2 ~ d2!14",
  H: "a1 ~ a1!14", I: "c2 ~ c2!14", J: "f#1 ~ f#1 ~ f#1 ~ f#1 ~", K: "f#1 ~@2 f#1 ~@2 f#1 ~",
  L: "~ f#1 ~@2 f#1 ~ f#1 ~", M: "f#1!2 ~@4 f#1 ~@5 f#1!2 ~@2", N: "e1!2 ~@4 e1 ~@5 e1!2 ~@2", O: "[c2@11 ~@5]/2",
})).s("gm_synth_bass_1").gain(0.3).pan(0.7)

// bass · synth bass 2 · "SYN BASS 2"
const bass_2 = note(`<
  ~@32 A@2 B@2 A@2 B@2 C A@2 B@2 A@2 B@2 ~ D E F@2 G H I@2 D E F@2 G H I@2 ~@3 D E F@2 G H I@2 ~@10 A@8 D E F@2 G H I@2
  D E F@2 G H I@2 J@4 K L K L M@2 N@2 A@2 B@2 A@2 B@2 D E F@2 G H I@2 D E F@2 G H I@2 ~@8 O@2 ~@6
>`.pickRestart({
  A: "c#3!16", B: "b2!16", C: "c#4 c3 ~@6", D: "c3 ~ c3!8 ~ c3!5", E: "g2 ~ g2!14", F: "a#2 ~ a#2!14", G: "d3 ~ d3!14",
  H: "a2 ~ a2!14", I: "c3 ~ c3!14", J: "f#2 ~ f#2 ~ f#2 ~ f#2 ~", K: "f#2 ~@2 f#2 ~@2 f#2 ~",
  L: "~ f#2 ~@2 f#2 ~ f#2 ~", M: "f#2!2 ~@4 f#2 ~@5 f#2!2 ~@2", N: "e2!2 ~@4 e2 ~@5 e2!2 ~@2", O: "[c3@11 ~@5]/2",
})).s("gm_synth_bass_2").gain(0.3).pan(0.3)

// chords · synth brass 1 · "SYNBRASS 1" · C Dm C Dm
const synth_brass_1 = note(`<
  ~@66
  [[c3,c4,e4] [d3,d4,f4] ~ [d3,d4,f4] ~@2 [d3,d4,f4] ~ [d3,d4,f4]!2 ~ [d3,d4,f4] ~@2 [d3,d4,f4] ~]
  [[c3,c4,e4] [d3,d4,f4] ~ [d3,d4,f4] ~@2 [d3,d4,f4] ~ d3 [d4,f4] ~ d3 [d4,f4] ~ [d3,d4,f4] ~]
  ~@95
>`).s("gm_synth_brass_1").gain(0.4).pan(0.9)

// other · glockenspiel · "GLOCKENSPL"
const glockenspiel = note(`<
  ~@66 A ~ A ~@3 B A ~ B C ~@21 B A ~ B C ~@3 B A ~ B C ~@23 B A ~ B C ~@3 B A ~ B C ~@16
>`.pickRestart({
  A: "c5 d5 ~@14", B: "~@14 d5!2", C: "c5 d5 ~ d5 ~@12",
})).s("gm_glockenspiel").gain(0.4).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~@32 A@8 ~ A@8 ~ A@16 ~@3 A@16 B ~ A@64 ~@12>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@32 A@3 B A@3 B ~ A@3 B A@3 B ~ A@3 B A@3 B A@3 B A@3 B ~@3 A@3 B A@3 B A@3 B A@3 B ~@2 A@11 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 ~@12
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~@2 x",
})).gain(0.64)

// drums · clap
const clap = s("cp").struct("<~@85 [~ x ~@2] ~@77>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@24 A@8 B@8 A B@8 C B@16 ~@3 B@16 D E B@64 A@3 F ~@8>".pickRestart({
  A: "x!2 ~@2 x ~@3 x!2 ~ x!2 ~@3", B: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", C: "x!8", D: "x!4",
  E: "x ~@3 x ~@3 x ~@2 x!2 ~ x ~", F: "x!2 ~@2 x ~@3 x!2 ~@6",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@31 [~@14 x!2] ~@8 [~@14 x!2] ~@8 [~@14 x!2] ~@113>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@24 A@25 ~ A@16 ~@3 A@16 ~@2 A@67 B ~@8>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@31 [~@11 x!2 ~@3] ~@8 [~@11 x!2 ~@3] ~@8 [~@12 x!2 ~@2] ~@113>").gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@31 [~@9 x ~@6] ~@17 [x ~ x!4 ~ x ~ x!3 ~@4] ~@113>").gain(0.64)

stack(
  string_ensemble_1, bass, bass_2, synth_brass_1, glockenspiel, kick, snare, clap, hihat, low_tom, open_hat, mid_tom,
  high_tom
)

More by U96