Strudelify

Baby Come Back

Equals

KeyF♯ majorTempo127 bpm
0:00/0:00
// Baby Come Back — Equals
// 127 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(127/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(`<
  ~@2 A@4 B@8 C D C D C D C D C E@2 B@8 C D C D C D C D C E@2 B@8 C D C D C D C D C E@2 B@22
>`.pickRestart({
  A: "[b1@3 ~ b1@3 ~ b1@2 c#2@2 d#2@2 f#2@6 f#2@3 ~ f#2@2 g#2 ~ f#2@2 d#2@2]/2",
  B: "[b1@3 ~ b1@3 ~ b1@2 c#2@2 d#2@2 f#2@6 f#2@2 g#2@2 f#2@2 e2 ~ d#2@2 c#2@2]/2",
  C: "f#1@2 f#1 ~ f#1@2 f#1 ~ f#1@2 f#1 ~ f#1@2 f#1 ~", D: "f#1@2 f#1 ~ f#1@2 f#1 ~ f#1@2 b1@4 c#2@2",
  E: "f#1 c#2 f#1 c#2 f#1 c#2 f#1 c#2",
})).s("gm_fretless_bass").gain(0.45)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A@2 B@10 C@2 D E D E D E D E D@3 B@6 C@2 D E D E D E D E D@3 B@6 C@2 D E D E D E D E D@3 B@22
>`.pickRestart({
  A: "[b2@3 ~ b2@4 g#2@2 b2@2 g#2@2 f#2@16 ~@2]/2",
  B: "[b2@3 ~ b2@4 g#2@2 b2@2 g#2@2 f#2@6 f#2@2 f#2@2 g#2@2 b2@2 g#2@2 f#2@2]/2",
  C: "[b2@3 ~ b2@4 g#2@2 b2@2 g#2@2 f#2@6 f#2@2 f#2@2 d#3@2 b2@2 e3@2 c#3@2]/2", D: "f#2@3 ~ f#2@3 ~ f#2@3 ~ f#2@3 ~",
  E: "f#2@3 ~ f#2@3 ~ d#3@2 b2@2 e3@2 c#3@2",
})).s("gm_electric_guitar_clean").gain(0.35)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean_2 = note(`<
  ~@2 A B A B A B A B A B A C D E F E F E F E F E F A B A B A B A B D E F E F E F E F E F A B A B A B A B F E F E F E F
  E F E F A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "[f#3,b3] [f#3,b3,d#4,f#4] [f#3,b3,d#4] [f#3,b3,d#4,f#4] [f#3,b3] [f#3,b3,d#4,f#4] [f#3,b3] [f#3,a#3,c#4,f#4]", // B5 B B5 B B5 F#
  B: "[f#3,a#3] [f#3,a#3,c#4,f#4] [f#3,a#3] [f#3,a#3,c#4,f#4] [f#3,a#3] [f#3,a#3,c#4,f#4] [f#3,a#3] [f#3,b3,d#4,f#4]", // F# B
  C: "[f#3,a#3] [f#3,a#3,c#4,f#4] [f#3,a#3] [f#3,a#3,c#4,f#4] [f#3,a#3] [f#3,a#3,c#4,f#4] [f#3,a#3] [f#3,a#3,c#4,f#4]", // F#
  D: "[c#3,f#3] f#3!6 [f#3,c#4], ~ [c#3,c#4]!2 c#3", // F#5 C#
  E: "[c#3,f#3,c#4] [c#3,f#3]!3 f#3 [c#3,f#3] [c#3,f#3,c#4] [f#3,c#4], ~@2 c#4 ~", // F#5
  F: "f#3!7 [f#3,c#4], c#3 [c#3,c#4]!2 c#3", // F#5 C#
})).s("gm_electric_guitar_clean").gain(0.15).pan(0.9)

// drums · kick
const kick = s("bd").struct("<~@2 [x!2]!83>").gain(0.66)

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

// drums · low tom
const low_tom = s("lt").struct("<~ A ~@22 B ~@18 B ~@18 B ~@11 C ~ D ~@3 C ~ D ~@2>".pickRestart({
  A: "~@7 x", B: "~@12 x!3 ~", C: "~@14 x!2", D: "~@11 x ~@4",
})).gain(0.52)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~ [~@8 x!5 ~@3] ~@72 [~@13 x ~@2] ~@5 [~@13 x ~@2] ~@4>").gain(0.52)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@7 A ~ B ~ A ~ A B A@2 B A ~@7 A ~ B ~ A ~ A B A@2 B A ~@7 A ~ B ~ A ~ A B A@2 B A ~ A ~ A ~ A ~ A ~ A ~ A B A
  B A ~ A B A B
>`.pickRestart({
  A: "x", B: "x!2 ~@2",
})).gain(0.37)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@70 [~@3 x ~ x ~ x] [~ x ~ x ~ x ~ x]!14>").gain(2.62)

stack(bass, electric_guitar_clean, electric_guitar_clean_2, kick, snare, low_tom, open_hat, mid_tom, crash, cabasa)