Strudelify

Stayin'Alive

Bee Gees

KeyA♭ majorTempo103 bpm
0:00/0:00
// Stayin'Alive — Bee Gees
// 103 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "Syn. Strings1" synth strings 1 (copy of ch 2 "Jazz Gt." electric guitar jazz)
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/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 · electric guitar jazz · "Jazz Gt."
const electric_guitar_jazz = note(`<
  A B C@2 ~ A D@3 E F G H I J K@2 L M N M N O P Q R A S@3 E F G H I J K@2 L M N M N O P Q R A T C@2 U A T C V U A D@3 E
  F G H I J K@2 L M N M N O P Q R A T C@2 U A T C U A T A T C@2 U A T C U A T A T
>`.pickRestart({
  A: "[c4,eb4] f4 ~ [c4,ab4] ~@2 [c4,eb4]@2 ~@2 c4@2 [f3,bb3] c4 eb4@2", B: "[f3,bb3] c4 ~ [f3,eb4] ~@2 [f3,bb3]@2 ~@8",
  C: "~@2 [d4,f4,bb4]@2 [d4,f4,bb4]@2 ab4@2 [d4,f4,c5]@3 [d4,f4,bb4]@2 ab4 f4@2", // Bb Dm7 Bb
  D: "[[f3,bb3] c4 ~ [f3,eb4] ~@2 [f3,bb3]@2 c4@2 f4@2 ab4 bb4@2 [eb4,ab4,c5]@3 bb4 ab4 [c4,eb4,bb4] f4@2 [c4,eb4,ab4]@2 [c4,eb4,ab4]@2 [c4,eb4,bb4]@2 f4!2 [bb3,eb4,ab4]@2 ab4 f4@2 ~@2 eb4@2 [ab3,c4,f4]@2 [ab3,c4,f4] [ab3,c4,f4]@3 ~@2]/3", // Bb5 F7 Bb5 Ab Cm7 Ab Cm7 Ebsus4 …
  E: "[eb4,ab4,c5] [eb4,ab4,c5]@2 c5 c5@2 f4 [c4,eb4,ab4]@2 [c4,eb4,ab4]@2 [c4,eb4,bb4]@2 f4 f4@2, ~@3 [eb4,ab4]@3 ~@10", // Ab Cm7 Ab5
  F: "[bb3,eb4,ab4]@2 [bb3,eb4,ab4] [bb3,eb4,ab4]@3 eb4 [ab3,c4,f4]@2 [ab3,c4,f4]@2 [ab3,c4,f4]@2 f4 ab4!2", // Ebsus4 Fm
  G: "[d4,f4,bb4]@3 [d4,f4,bb4]@3 ~@2 [d4,f4,ab4] [d4,f4,bb4]@2 [d4,f4,bb4]@3 ~@2", // Bb Ddim Bb
  H: "[d4,f4,ab4] [d4,f4,bb4]@2 [d4,f4,bb4]@2 [d4,f4,ab4]@2 [d4,f4,c5]@2 [d4,f4,bb4]@2 [d4,f4,bb4]@3 ~@2", // Ddim Bb Ddim Dm7 Bb
  I: "[f4,ab4,c5] [f4,bb4,d5]@2 [f4,bb4,d5]@3 ~ f4 [f4,ab4,c5] [f4,bb4,d5]@2 [f4,bb4,d5]@3 ~ f4", // Fm Bb Fm Bb
  J: "[f4,ab4,c5] [f4,bb4,d5]@2 [f4,bb4,d5]@2 [f4,ab4,c5]@2 [f4,c5,eb5]@2 [f4,bb4,d5]@2 [f4,bb4,d5]@3 ~@2", // Fm Bb Fm F7 Bb
  K: "[[eb4,ab4,c5]!5 [d4,g4,bb4]!2 [d4,g4,bb4]@2 [c4,f4,ab4]!4 [bb3,eb4,g4]!2 [bb3,eb4,g4]@2 [c4,f4,ab4]!2 [c4,f4,ab4]@3 ~@2 [bb3,eb4,g4] [c4,f4,ab4]!2 [c4,f4,ab4]@3 ~@2]/2", // Ab Gm Fm Eb Fm Eb Fm
  L: "[eb4,ab4,c5]!5 [d4,g4,bb4]!2 [d4,g4,bb4]@2 [c4,f4,ab4]!4 [bb3,eb4,g4]!3", // Ab Gm Fm Eb
  M: "[bb3,eb4,g4] [c4,f4,ab4]!2 [c4,f4,ab4]@3 ~@2 [bb3,eb4,g4] [c4,f4,ab4]!2 [c4,f4,ab4]@3 ~@2", // Eb Fm Eb Fm
  N: "[eb4,ab4,c5] ~ [d4,g4,bb4] ~ [c4,f4,ab4] ~ [bb3,eb4,g4] ~", O: "[c4,f4,ab4]!3 [f4,ab4,c5]@13",
  P: "[eb4,g4,bb4]@14 c5 bb4", Q: "[c4,f4,ab4]", R: "[bb3,eb4,g4]",
  S: "[[f3,bb3] c4 ~ [f3,eb4] ~@2 [f3,bb3]@2 c4@2 eb4@2 [f4,ab4] bb4@2 [eb4,ab4,c5]@3 bb4 ab4 [c4,eb4,bb4] f4@2 [c4,eb4,ab4]@2 [c4,eb4,ab4]@2 [c4,eb4,bb4]@2 f4!2 [bb3,eb4,ab4]@2 ab4 f4@2 ~@2 eb4@2 [ab3,c4,f4]@2 [ab3,c4,f4] [ab3,c4,f4]@3 ~@2]/3", // Bb5 F7 Bb5 Fm Ab Cm7 Ab Cm7 …
  T: "[f3,bb3] c4 ~ [f3,eb4] ~@2 [f3,bb3]@2 c4@2 eb4@2 f4@2 ab4@2", // Bb5 F7 Bb5
  U: "c5 ab4 f4@2 bb4 g4 eb4@2 ab4 f4 c4@2 g4 eb4 bb3@2", V: "~@6 ab4@2 [d4,f4,bb4]@2 ab4 [d4,f4,bb4]@2 ab4 bb4 ab4",
})).s("gm_electric_guitar_jazz").gain(0.42).pan(0.3)

// bass · synth bass 2
const bass = note(`<
  A@2 B@2 C D A@2 E A E B@4 A@4 F A F@4 G A@3 E A E B@4 A@4 F A F@4 G A@2 B@2 C D A B@2 C A@3 E A E B@4 A@4 F A F@4 G
  A@2 B@2 C A@2 B C A@4 H B C A@2 ~@6
>`.pickRestart({
  A: "[f1,f2]!4", B: "[bb1,bb2]!4", C: "[bb1,bb2]!8", D: "[f1,f2]!2 [g1,f2]!2", E: "[eb1,eb2]!2 [f1,f2]!2",
  F: "[f1,f2]!8", G: "[c2,c3]!5 g1 bb1 c2", H: "~ [bb1,bb2]!3",
})).s("gm_synth_bass_2").gain(0.35)

// bass · synth bass 2 · soft notes · Bb F
const bass_soft = note("<~@96 [[bb1,bb2]!4] [[bb1,bb2]!8] [[f1,f2]!4]!4>").s("gm_synth_bass_2").gain(0.15)

// drums · kick
const kick = s("bd").struct("<A@7 B A B A@11 B A@2 B A@5 B@2 A@29 B A@7 B A@4 B A@4 B A@22>".pickRestart({
  A: "x ~@6 x!2 ~ x ~@5", B: "x ~@6 x!2 ~ x!2 ~@4",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct(`<
  ~ A@2 ~ A@2 ~ A ~ A@9 ~@2 A@2 ~@2 A@2 ~ A ~@2 A@2 ~@6 A ~@3 A ~ A ~@4 A ~@4 A ~@4 A ~ A@9 ~ A ~@2 A@3 ~@2 A ~ A ~@2 A
  ~@5 A@2 ~@10
>`.pickRestart({
  A: "~ x ~ x",
})).gain(0.4)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@96 [~ x ~ x] ~@2 [~ x ~ x] ~ [~ x ~ x]>").gain(0.1)

// drums · snare
const snare = s("sd").struct(`<
  A B A@5 C A C A@7 B A@3 C A@2 C A@5 C@2 A@6 B A@22 C A@7 C A@4 C A@4 C A@14 ~@8
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x ~ x ~ x!2", C: "~@2 x ~@3 x!2",
})).gain(0.45)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~ [~@13 x ~@2] ~@15 [~@13 x ~@2] ~@20 [~@13 x ~@2] ~@55 [~ x ~ x]!8>").gain(0.15)

// drums · clap
const clap = s("cp").struct(`<
  A B@2 A B@2 A B A B@9 ~ A B@2 ~ A B@2 ~ B A@2 B@2 A@5 ~ B A@3 B A B A@2 ~ A B ~@4 B A ~ A@2 B ~ B@9 A B A@2 B@3 ~ A B
  ~ B A@2 B A@2 ~ A@2 B@2 A ~@2 A B ~@5
>`.pickRestart({
  A: "~ x ~ x", B: "~ x!3",
})).gain(0.3)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@97 [~ x ~ x]!2 [~ x!3] [~ x ~ x] [~ x!3]>").gain(0.1)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ A@2 ~ A@2 ~ A ~ A@9 ~@2 A B ~@2 B A ~ A ~@2 B@2 ~@6 A ~@3 A ~ A ~@4 A ~@4 A ~@4 A ~ A@8 B ~ A ~@2 A@3 ~@2 B ~ A ~@2
  A ~@5 A@2 ~@4 A ~@2 A ~@2
>`.pickRestart({
  A: "~@15 x", B: "~@14 x!2",
})).gain(0.35)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@2 C B@2 D B D B@10 E B@2 F G B@2 F B A G B@2 H G I J C F B J I G B H B H C B G B K B@2 F B C F H A B F B@9 E B C H
  B@3 F H B L B E A B H G F A E B@2 C K L H M ~@5
>`.pickRestart({
  A: "x!11 ~ x!3 ~", B: "x!16", C: "x!15 ~", D: "x!3 ~ x!11 ~", E: "x!3 ~ x!3 ~ x!7 ~", F: "x!7 ~ x!3 ~ x!4",
  G: "x!7 ~ x!3 ~ x!3 ~", H: "x!7 ~ x!7 ~", I: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", J: "x!3 ~ x!7 ~ x!3 ~", K: "x!11 ~ x!4",
  L: "x!3 ~ x!12", M: "x!6 ~@10",
})).gain(0.3)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@96
  [~@6 x!10]
  [x!3 ~ x!3 ~ x!3 ~ x!3 ~]
  [x!7 ~ x!3 ~ x!3 ~]
  [x!16]
  [x!7 ~ x!3 ~ x!3 ~]
  [x!15 ~]
>`).gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@19 A ~ B ~ A B ~@3 A ~ B@2 ~@3 A@2 ~@2 A@2 ~@14 A ~ A ~@11 B A ~@2 A ~@4 A B ~@3 A ~@4 A@2 ~@7 A ~@4
>`.pickRestart({
  A: "~@15 x", B: "~@11 x!3 ~@2",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct(`<
  A B@2 C B@2 D B D B@9 ~ E B@2 ~ F B@2 ~ B A F B@2 G F H I C ~ B I H F B G B G C ~ F B ~@4 B C ~ G A B ~ B@9 E B C G
  B@3 ~ G B ~ B E A B G F ~ A E B@2 C ~@2 G B ~@5
>`.pickRestart({
  A: "~@11 x ~@3 x", B: "~ x!3", C: "~@15 x", D: "~@3 x ~@11 x", E: "~@3 x ~@3 x ~@7 x", F: "~@7 x ~@3 x ~@3 x",
  G: "~@7 x ~@7 x", H: "~@3 x ~@3 x ~@3 x ~@3 x", I: "~@3 x ~@7 x ~@3 x",
})).gain(0.3)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct(`<
  ~@97
  [~@3 x ~@3 x ~@3 x ~@3 x]
  [~@7 x ~@3 x ~@3 x]
  [~ x!3]
  [~@7 x ~@3 x ~@3 x]
  [~ x!3]
>`).gain(0.1)

// drums · high tom
const high_tom = s("ht").struct(`<
  A ~@2 A ~@2 A ~ A ~@10 B ~ C ~ B C ~@3 B A C@2 A@3 B@2 ~@2 B@2 A ~ A ~ A@2 ~ A ~@6 B ~ B A ~@10 C B ~ A B ~@4 B C ~@2
  A B ~ A@2 ~ B@2 ~@2 A ~@2 A ~@6
>`.pickRestart({
  A: "~@12 x!4", B: "~@6 x!2", C: "~@8 x!3 ~@5",
})).gain(0.3)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct(`<
  ~@19 A ~@3 A ~@4 A ~@6 A@2 ~@2 A@2 ~@14 A ~ A ~@12 A ~@2 A ~@4 A ~@4 A ~@4 A@2 ~@7 B C ~ C ~
>`.pickRestart({
  A: "~ x ~@2", B: "~@2 x ~@3 x!2", C: "~@12 x!4",
})).gain(0.15)

// drums · ride
const ride = s("rd").struct(`<
  A ~@2 A ~@2 A B A B ~@11 C ~@2 C ~@4 A C@2 A@3 ~@6 A ~ A ~ A@2 ~ A ~@9 A ~@2 B ~@7 C ~@2 A ~ B ~@4 C ~@2 A ~@2 A@2 ~@5
  A ~@2 A ~@2 A ~ A ~
>`.pickRestart({
  A: "x", B: "~ x", C: "~ x ~@2",
})).gain(0.2)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A ~@2 A ~@2 A ~ A ~@10 A ~@3 A ~@4 A@2 ~@2 A@5 ~@2 A@3 ~ A ~ A@2 ~ A ~@6 A ~ A@2 ~@11 A ~ A@2 ~@4 A ~@3 A@2 ~ A@2 ~
  A@2 ~@2 A ~@9
>`.pickRestart({
  A: "~ x ~ x",
})).gain(0.45)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@95 [~ x ~ x] ~ [~ x ~ x]!2 ~ [~ x ~ x] ~>").gain(0.15)

stack(
  electric_guitar_jazz, bass, bass_soft, kick, rim, rim_soft, snare, snare_soft, clap, clap_soft, low_tom, hihat,
  hihat_soft, mid_tom, open_hat, open_hat_soft, high_tom, high_tom_soft, ride, tambourine, tambourine_soft
)

More by Bee Gees