Strudelify

Sleeping Bag

ZZ Top

KeyC majorTempo118 bpm
0:00/0:00
// Sleeping Bag — ZZ Top
// 118 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118/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 · slap bass 2 · "SLAPBASS 2"
const bass = note("<~@19 A B C B ~@8 D B C B ~@16 E@2 ~@2 E@2 ~@2 A B C B ~@16 D F G H ~@18>".pickRestart({
  A: "g2@6 f2@4 ~@2 d#2 ~ f2@2", B: "~@2 [c2,d#2] ~ [c1,c2]!12", C: "g2@5 ~ f2@4 ~@2 d#2 ~ f2@2",
  D: "g2@6 f2@5 ~ d#2 ~ f2@2", E: "f0@3 ~ f0@3 ~ f0@3 ~ f0@3 ~", F: "~@2 d#2 ~ [c1,c2]!12",
  G: "[g1,g2]@5 ~ [f1,f2]@5 ~ [d#1,d#2] ~ [f1,f2]@2", H: "~@2 [c1,d#2] ~ [c1,c2]!12",
})).s("gm_slap_bass_2").gain(0.5)

// bass · lead 8 bass lead · "BASS&LEAD"
const bass_2 = note("<~@9 A@10 B ~ C ~ A@8 C ~ D ~ A@16 E@2 A@2 E@2 A@2 D ~ F ~ A@16 D ~ G H I@16 J@2>".pickRestart({
  A: "c3 c2 c3!2 c2 c3 c2!2 c3 c2 c3!2 c2 c3 c2!2", B: "g2@6 f2@5 ~ d#2@2 f2@2", C: "g2@5 ~ f2@5 ~ d#2@2 f2@2",
  D: "g2@5 ~ f2@5 ~ d#2 ~ f2@2", E: "f3 f2 f3!2 f2 f3 f2!2 f3 f2 f3!2 f2 f3 f2!2", F: "g2@5 ~ f2@4 ~@2 d#2 ~ f2@2",
  G: "~@6 f2@5 ~ d#2 ~ f2@2", H: "~@2 c2 ~ c2@11 ~", I: "d3 d2 d3!2 d2 d3 d2!2 d3 d2 d3!2 d2 d3 d2!2", J: "[d2,d3] ~@7",
})).s("gm_lead_8_bass_lead").gain(0.38)

// bass · synth bass 2 · "SYN BASS 2"
const bass_3 = note("<~@9 A B A@8 C D C E A@8 C F C G A@16 H@2 I A H@2 A@2 C F J@2 A@16 C F C G K@16 L M>".pickRestart({
  A: "c2@3 ~ c2@3 ~ c2@3 ~ c2@3 ~", B: "c2@3 ~ c2@4 c2@3 ~ c2@3 ~", C: "g1@5 ~ f1@5 ~ d#1 ~ f1@2",
  D: "~@2 d#1 ~ c2@4 c2@3 ~ c2@3 ~", E: "~@2 d#1 ~ c2@4 c2@3 ~ c2@4", F: "~@2 d#1 ~ c2@3 ~ c2@3 ~ c2@3 ~",
  G: "~@2 d#1 ~ c2@3 ~ c2@3 ~ c2@4", H: "f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~", I: "c2@3 ~ c2@3 ~ c2@3 ~ c2@4",
  J: "[g1@5 ~ f1@5 ~ d#1 ~ f1@4 d#1 ~ c2@3 ~ c2@3 ~ c2@4]/2", K: "d2@3 ~ d2@3 ~ d2@3 ~ d2@3 ~", L: "d2 ~@15",
  M: "d2@3 ~@13",
})).s("gm_synth_bass_2").gain(0.5)

// other · synth drum
const synth_drum = note(`<
  A ~@3 B ~@3 C ~ D E F G H I J K L M N M O P Q R S T H I U M V M V ~@7 W ~@7 X ~@19 Y T F T H Z AA AB H M N M V AC ~ AD
  ~@12 AE ~@2
>`.pickRestart({
  A: "~@10 f#3 ~@5", B: "~@2 f#3!2 ~@12", C: "~@6 f#3 ~@9", D: "~@12 c#3 ~ d#3 ~",
  E: "c#3 ~@3 d#3 ~ c#3 ~@5 c#3 ~ d#3 ~", F: "c#3 ~ d#3 ~ c#3 ~ d#3 ~@9", G: "c#3 ~@3 d#3 ~@2 c#3 d#3 ~ c#3 ~ d#3 ~@3",
  H: "c#3 ~ d#3 ~@3 c#3 ~@9", I: "d#3 ~@3 c#3 ~ d#3 c#3 ~@4 c#3 ~ d#3 ~", J: "c#3 ~@3 d#3 ~ c#3 ~@9",
  K: "c#3 ~@3 d#3 ~ c#3 ~@5 c#3 ~@3", L: "d#3 ~ c#3 ~ d#3 ~ c#3 ~@9", M: "~@8 c#3 ~ d#3 ~ c#3 ~ d#3 ~",
  N: "c#3 ~ d#3 c#3 ~@12", O: "c#3 ~ d#3 c#3 ~@8 c#3 ~ d#3 ~", P: "c#3 ~@3 d#3 ~ c#3 d#3 ~@4 c#3 ~ d#3 ~",
  Q: "c#3 ~ d#3 ~@3 c#3 ~@7 d#3 ~", R: "c#3 ~ d#3 c#3 ~@2 d#3 ~ c#3 ~ d#3 ~ c#3 ~ d#3 ~",
  S: "c#3 ~ d#3 c#3 ~@2 d#3 ~@9", T: "c#3 ~ d#3 ~ c#3 ~ d#3 c#3 ~@2 d#3 ~ c#3 ~ d#3 ~", U: "c#3 ~@3 d#3 ~ c#3 d#3 ~@8",
  V: "c#3 ~ c#3 d#3 ~@12", W: "~@10 c#3 ~@5", X: "~@2 c#3 ~@13", Y: "~@3 c#3 ~@12",
  Z: "c#3 ~@3 d#3 ~ d#3 c#3 ~@2 d#3 ~ c#3 ~@3", AA: "d#3 ~ c#3 ~ d#3 ~ c#3 ~@5 c#3 ~ d#3 ~",
  AB: "c#3 ~@3 d#3 ~ d#3 c#3 ~@2 d#3 ~ c#3 ~ d#3 ~", AC: "~@3 f#3 ~@12", AD: "~ f#3 ~@14", AE: "~@4 f#3 ~@11",
})).s("gm_synth_drum").gain(0.62)

// other · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note("<~@3 A ~@3 A ~@31 A ~@47 B ~@3 C ~@3 C ~@3 C ~>".pickRestart({
  A: "~@4 c5@3 ~@9", B: "~@4 d5@3 ~@9", C: "d5@3 ~@13",
})).s("gm_synth_brass_2").gain(0.8)

// drums · kick
const kick = s("bd").struct("<~ A B A@80 C D C D C D C D C D C D C D C D A ~>".pickRestart({
  A: "x!4", B: "x!2 ~ x", C: "x ~@2 x ~ x ~ x ~@2 x ~@5", D: "x ~@2 x ~ x ~ x ~ x!3 ~@4",
})).gain(0.5)

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

// drums · clap
const clap = s("cp").struct("<~@3 A B C D ~@28 E F E G E G H I ~@58>".pickRestart({
  A: "~@2 x ~ x ~@3 x ~@2 x ~@2 x ~", B: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x!2", C: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  D: "~@2 x ~@2 x ~ x!2 ~ x ~ x!2 ~@2", E: "~@4 x ~@3 x ~ x ~@2 x ~@2", F: "x ~@2 x ~@2 x ~ x ~ x ~ x!2 ~@2",
  G: "x ~ x ~@2 x ~@2 x ~@3 x ~ x!2", H: "~@4 x ~@2 x ~@2 x ~@2 x ~@2", I: "x ~ x ~@2 x ~@2 x ~@3 x ~ x ~",
})).gain(0.5)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@2 A ~@3 A ~@7 B ~@7 B ~@7 B ~@7 C ~@3 D ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@16 D ~
>`.pickRestart({
  A: "~@7 x", B: "~@13 x ~@2", C: "~@13 x!2 ~", D: "~@14 x!2",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@7 [x!8]!28 ~@8 [x!8]!40 ~@16 [~ x ~ x ~ x ~ x] ~>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 A ~@3 A ~@31 B ~@3 C ~@56 D ~>".pickRestart({
  A: "~@13 x ~@2", B: "~@10 x!2 ~@4", C: "~@12 x!2 ~@2", D: "~@6 x!2 ~@8",
})).gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@2 A ~@3 B ~@31 C ~@3 D ~@56 E ~>".pickRestart({
  A: "~@3 x", B: "~@7 x!6 ~@3", C: "~@8 x!2 ~@6", D: "~@8 x!4 ~@4", E: "~@2 x!2 ~@6 x!2 ~@4",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@21
>`.pickRestart({
  A: "x",
})).gain(0.35)

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

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@3 [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!96 ~@2>").gain(1.26)

stack(
  bass, bass_2, bass_3, synth_drum, synth_brass_2, kick, snare, clap, low_tom, hihat, mid_tom, high_tom, crash, cabasa,
  cabasa_soft
)

More by ZZ Top