Strudelify

The Distance

Cake

KeyE minorTempo92 bpm
0:00/0:00
// The Distance — Cake
// 92 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 75 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar.
setcpm(92/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · "Bass"
const bass = note(`<
  A@7 B C B C B C B C ~ A@4 D E D F ~@2 A@6 B C B C B C B C ~ A@4 D E D E D E D G ~@2 H@9 ~@11
>`.pickRestart({
  A: "d2 d#2 e2 e1 ~ e1 d2 d#2 e2 e1@2 ~@5", B: "e2@2 ~ g2 ~ b1 e2@2 ~ b1 e2 ~ e2 d2 b1 ~",
  C: "g1 a1 b1 g1 ~ a1 e1@2 ~ e2!2 ~ e2 d2 b1 ~", D: "e2@2 ~ g2 ~ a1 b1@2 ~ a1 b1 ~ b1 a1 g1 ~",
  E: "b1@2 ~ d2@2 b1 e2@2 ~ b1 e2 ~ d2 b1 a1 ~", F: "b1@2 ~ d2@2 b1 e2@10", G: "b1@2 ~ d2@2 b1 e2@9 ~",
  H: "d2 d#2 e2 e1 ~ e1 d2 d#2 e2 e1!2 ~@5",
})).s("gm_fretless_bass").gain(0.55)

// other · bassoon · "Woodwind"
const bassoon = note("<~@11 A B C D ~@21 A B C D ~@35>".pickRestart({
  A: "g4@3 f#4@5", B: "f4@3 e4@5", C: "d4@3 c#4@5", D: "c4@3 b3@4 ~",
})).s("gm_bassoon").gain(0.43).pan(0.1)

// other · trombone · "Brass"
const trombone = note("<~@11 A B C D ~@21 A B C D ~@35>".pickRestart({
  A: "b4@3 a#4@5", B: "a4@3 g4@5", C: "f#4@6 e4@9 ~", D: "e4@5 ~ e4@9 ~",
})).s("gm_trombone").gain(0.37).pan(0.9)

// other · trumpet
const trumpet = note("<~@18 A B ~@5 C@3 ~@15 A B ~@10 D E ~@18>".pickRestart({
  A: "c#5 ~ c#5 [b4,c5] c#5 ~ c#5 ~ c#5 [b4,c5] c#5 ~ c#5 ~ c#5 [b4,c5]", // Cmaj7
  B: "c#5 ~ c#5 ~ c#5 [b4,c5] c#5 ~ c#5 ~ c#5 ~@5", C: "[~@10 g4@27 ~ e4@10]/3",
  D: "c#5 ~@5 c#5 [b4,c5] c#5 ~ c#5 ~ c#5 [b4,c5] c#5 ~", E: "c#5 ~ c#5 [b4,c5] c#5 [b4,c5] c#5 ~ c#5 ~ c#5 ~@5",
})).s("gm_trumpet").gain(0.56)

// other · recorder
const recorder = note("<~@20 A B A B ~@21 A B A B A B A B ~@4 A B A B A B A C@3 ~@8>".pickRestart({
  A: "e7 g7 d7 e7 b6 d7 a6 b6", B: "g6 d6 e6 g6 f#6@4", C: "[g6 d6 e6 g6 f#6@20]/3",
})).s("gm_recorder").gain(0.52)

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

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

// drums · hihat
const hihat = s("hh").struct("<~@4 A ~ A ~@9 A@4 ~@3 B ~@8 B@4 ~@12 C@4 ~@11 B ~ A ~@5 A ~@2 A>".pickRestart({
  A: "~@7 x", B: "x", C: "~@3 x",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@15
  [x!2 ~ x!2 ~ x!2 ~ x!2 ~ x ~ x ~]
  ~@30
  [~@14 x!2]
  [~ x!2 ~ x!2 ~ x!2 ~ x ~ x ~@3]
  ~@27
>`).gain(0.8)

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

// drums · crash
const crash = s("cr").struct("<~@2 A ~@4 B ~@3 C@4 ~@16 D ~@3 D ~@6 E F@3 G ~@4 E F@2 ~@4 H C@3 ~@3 C@10>".pickRestart({
  A: "~@3 x", B: "x", C: "x ~@2 x ~@4", D: "~ x ~@6", E: "~@7 x", F: "~@2 x ~@4 x", G: "~ x ~@2", H: "~@3 x ~@4",
})).gain(0.32)

stack(bass, bassoon, trombone, trumpet, recorder, kick, snare, hihat, mid_tom, open_hat, crash)

More by Cake