Strudelify

Baby Sittin' Boogie

Buzz Clifford

KeyE♭ majorTempo140 bpm
0:00/0:00
// Baby Sittin' Boogie — Buzz Clifford
// 140 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~ A B C D E F G H A B C D E F G I J K L M N O P Q A B C D E F G Q A B C D E F G R A B C D E F G I J K L M N O P Q A B
  C D E F G
>`.pickRestart({
  A: "eb2@5 ~ eb2@2 bb1@7 ~", B: "eb2@5 ~ eb2@2 bb1@4 eb2@4", C: "ab2@5 ~ ab2@2 eb2@7 ~",
  D: "ab2@5 ~ ab2@2 eb2@4 ab2@4", E: "bb1@5 ~ bb1@2 f2@7 ~", F: "bb2@6 bb1@3 ~ bb1@2 c2@2 d2@2", G: "eb2 ~@7",
  H: "~@10 bb1@2 c2 ~ d2 ~", I: "~@10 eb2 ~ f2 ~ g2 ~", J: "ab2@5 ~ ab2@2 eb2@3 ~ eb2@4", K: "ab2 eb2 c2 ab1",
  L: "eb2@5 ~ eb2@2 bb1@3 ~ bb1@2 eb2@2", M: "~ eb2 bb2@2 g2@2 eb2@2", N: "f2@5 ~ f2@2 c2@3 ~ c2@4",
  O: "f2@2 c2@2 a1 f1 g1 a1", P: "bb1 ~@7", Q: "~@10 bb1 ~ c2 ~ d2 ~", R: "~@10 bb1 ~ c2 ~ d2@2",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · brass section · "BRASS 1"
const brass_section = note("<~@17 A B C D E F G ~@9 H I J K L M N ~@9 O P Q R S T U ~@8>".pickRestart({
  A: "~ [f4,eb5] ~@2 [f4,ab4,c5,eb5] ~@3, ~@2 [ab4,c5] ~@13", B: "[ab4,eb5]@2 ~@4 [f4,ab4,c5,eb5]@9 ~, [c5,f5] ~@15",
  C: "~@2 [g4,bb4,c5,eb5] ~@5 [g4,bb4,c5] ~@7, ~@4 eb5 ~@3", D: "[bb4,c5,eb5,g5] ~@5 [g4,bb4,c5,eb5]@8 ~@2",
  E: "~@2 [f4,a4,c5,eb5] ~@5 [f4,a4,c5,eb5] ~@7", F: "[a4,eb5]@2 ~@4 [f4,a4,c5,eb5]@9 ~, [c5,g5] ~@15",
  G: "[f4,ab4,d5] ~@7, bb4 ~@15", H: "~@4 [g4,bb4,c5,eb5] ~@11", I: "[g4,bb4,c5,eb5] ~@5 [g4,bb4,c5,eb5]@8 ~@2",
  J: "~@4 [f4,ab4,c5,eb5] ~@11", K: "[f4,ab4,c5,eb5] ~@5 [f4,ab4,c5,eb5]@9 ~", L: "~@4 [f4,ab4,bb4,d5] ~@11",
  M: "[f4,ab4,bb4,d5] ~@5 [f4,ab4,bb4,d5]@8 ~@2", N: "[g4,bb4,c5,eb5] ~@15", O: "~@2 [eb4,ab4,c5] ~@5",
  P: "[ab3,ab4] ~@3 [g3,g4]@2 [ab3,ab4] ~@9", Q: "~@2 [eb4,g4,bb4] ~@5", R: "[eb4,g4] ~@3 [d4,gb4]@2 [eb4,g4]@2 ~@8",
  S: "~@2 [a3,eb4,g4] ~@5", T: "d4 ~ [db4,e4] [c4,eb4] ~@4, f4 ~@15", U: "[bb3,d4] ~@7",
})).s("gm_brass_section").gain(0.37).pan(0.7)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~ A@2 B@2 C@2 D ~ A@2 B@2 C@2 D ~ B@2 A@2 E@2 F ~ A@2 B@2 C@2 D ~ A@2 B@2 C@2 D ~ A@2 B@2 C@2 D ~ B@2 A@2 E@2 F ~ A@2
  B@2 C@2 D
>`.pickRestart({
  A: "[bb3,eb4,g4]/2", B: "[c4,eb4,ab4]/2", C: "[bb3,d4,f4]/2", D: "[g3,bb3,eb4]@3 ~@13", E: "[a3,c4,eb4,g4]/2",
  F: "[bb3,d4,f4] ~@7", // Bb
})).s("gm_synth_strings_1").gain(0.12)

// other · alto sax
const alto_sax = note(`<
  ~@2 A B C D E B ~@2 A B C D E B ~@4 F ~ G H ~@2 A B C D E B ~ I J K L M N O ~@2 A B C D E B ~@2 P ~ F ~ G H ~@2 A B C
  D E B
>`.pickRestart({
  A: "~@10 c5 bb4 c5 bb4 g4 f4", B: "eb4 ~@7", C: "~@10 f4 eb4 f4 eb4 c4 ab3", D: "bb3 ~@7", E: "~@10 bb3 ~ c4 ~ d4 ~",
  F: "~@8 eb3@5 ~@3", G: "~@10 f3 ~ g3 ~ a3 ~", H: "bb3 ~@15", I: "bb4@2 bb4!2",
  J: "bb4 ~ g4 ~ bb4 ~ c5 ~ bb4@2 g4 ~ eb4 ~ c4 ~", K: "eb4@4 f4@3 c4 eb4 ~ eb4 ~ ab3 ~@3",
  L: "~@2 eb4@2 f4 eb4@3 f4 eb4@3 f4 eb4@3", M: "d4@2 f4 ~ f4 ~ g4 ~ d4 c4 bb3 ~ c4 ~@3",
  N: "~@6 f4 eb4 d4 eb4 f4 eb4 d4 bb3 c4 d4", O: "eb4 ~@15", P: "~@8 ab2@7 ~",
})).s("gm_alto_sax").gain(0.47).pan(0.6)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~ A@2 B@2 C@2 D ~ A@2 B@2 E@2 F ~ B@2 A@2 G@2 H ~ A@2 B@2 E@2 F ~ A@2 B@2 C@2 D ~ A@2 B@2 E@2 F ~ B@2 A@2 G@2 H ~ A@2
  B@2 C@2 D
>`.pickRestart({
  A: "[bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~ [bb3,eb4,g4] ~", // Eb
  B: "[c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~ [c4,eb4,ab4] ~", // Ab
  C: "[d4,f4,bb4,d5,bb5] ~ [d4,f4,bb4,d5,bb5] ~ [d4,f4,bb4,d5,bb5] ~ [d4,f4,bb4,d5,bb5] ~ [d4,f4,bb4,d5,bb5] ~ [d4,f4,bb4,d5,bb5] ~ [d4,f4,bb4,d5,bb5] ~ [d4,f4,bb4,d5,bb5] ~", // Bb
  D: "[bb3,eb4,g4,eb5,g5] ~@15", // Eb
  E: "[d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~", // Bb
  F: "[bb3,eb4,g4] ~@15", // Eb
  G: "[a3,eb4,g4] ~ [a3,eb4,g4] ~ [a3,eb4,g4] ~ [a3,eb4,g4] ~ [a3,eb4,g4] ~ [a3,eb4,g4] ~ [a3,eb4,g4] ~ [a3,eb4,g4] ~", // Am7b5
  H: "[bb3,d4,f4] ~@15", // Bb
})).s("gm_piano").gain(0.27).pan(0.8)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~ A@2 B@2 C D E ~ A@2 B@2 C D E ~ F@2 G@3 H I ~ A@2 B@2 C D E ~ A@2 B@2 C D E ~ A@2 B@2 C D E ~ F@2 G@3 H I ~ A@2 B@2
  C D E
>`.pickRestart({
  A: "~@4 [bb3,eb4,g4]@2 [bb3,eb4,g4] ~@3 [bb3,eb4,g4]@2 [bb3,eb4,g4]@2 [bb3,eb4,g4] ~", // Eb
  B: "~@4 [c4,eb4,ab4]@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4]@2 [c4,eb4,ab4]@2 [c4,eb4,ab4] ~", // Ab
  C: "~@4 [d4,f4,bb4]@2 [d4,f4,bb4] ~@3 [d4,f4,bb4]@2 [d4,f4,bb4]@2 [d4,f4,bb4] ~", // Bb
  D: "~@4 [d4,f4,bb4]@2 [d4,f4,bb4] ~@3 [d4,f4,bb4]@2 [d4,f4,bb4]@2 [d4,f4,bb4]@2", E: "[bb3,eb4,g4] ~@15",
  F: "~@4 [c4,eb4,ab4]@2 ~@6 [c4,eb4,ab4]@2 [c4,eb4,ab4] ~", G: "~@4 [eb4,g4,c5]@2 ~@6 [eb4,g4,c5]@2 [eb4,g4,c5] ~",
  H: "~@2 [eb4,g4,c5] ~@3 [eb4,g4,c5]!2", I: "[d4,f4,bb4] ~@15",
})).s("gm_electric_guitar_clean").gain(0.15).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~ A@6 B ~ A@6 B ~ A@6 B ~ A@6 B ~ A@6 B ~ A@6 B ~ A@6 B ~ A@6 B>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.46)

// drums · rim
const rim = s("rim").struct(`<
  ~ A@5 B C D A@5 B C D A@5 B C D A@5 B C D A@5 B C D A@5 B C D A@5 B C D A@5 B C
>`.pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~@2 x!2 ~ x!3", C: "x", D: "~@5 x!3",
})).gain(0.46)

// drums · snare
const snare = s("sd").struct("<~ A@6 B ~ A@6 B ~ A@6 B ~ A@6 B ~ A@6 B ~ A@6 B ~ A@6 B ~ A@6 B>".pickRestart({
  A: "~ x ~ x", B: "x",
})).gain(0.4)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~ A@5 B ~@2 A@5 B ~@2 A@5 B ~@2 A@5 B ~@2 A@5 B ~@2 A@5 B ~@2 A@5 B ~@2 A@5 B ~
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct(`<
  ~ A@2 B C@3 D E A@2 B C@3 D E A@2 B C@3 D E A@2 B C@3 D E A@2 B C@3 D E A@2 B C@3 D E A@2 B C@3 D E A@2 B C@3 D
>`.pickRestart({
  A: "x!5 ~ x!2", B: "x ~ x!6", C: "x!8", D: "x", E: "~@5 x!3",
})).gain(0.29)

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~ A@2 B ~@5 A@2 B ~@5 A@2 B ~@5 A@2 B ~@5 A@2 B ~@5 A@2 B ~@5 A@2 B ~@5 A@2 B ~@4
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6",
})).gain(0.17)

// drums · shaker
const shaker = s("sh").struct("<~ A@6 B C A@6 B C A@6 B C A@6 B C A@6 B C A@6 B C A@6 B C A@6 B>".pickRestart({
  A: "x!8", B: "x", C: "~@5 x!3",
})).gain(0.23)

stack(
  bass, brass_section, synth_strings_1, alto_sax, piano, electric_guitar_clean, kick, rim, snare, pedal_hat, ride,
  ride_soft, shaker
)