Strudelify

Baby-Baby-Baby

TLC

KeyA majorTempo96 bpm
0:00/0:00
// Baby-Baby-Baby — TLC
// 96 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 74 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(96/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · pad new age
const pad_new_age = note(`<
  ~@2 A B A C A B D E F G H G F G H G F G H G F G H G A B A C A B D E F G H G F G H G I J K L M N O P A B A C A B D E A
  B A C A B D E I J K L M N O P
>`.pickRestart({
  A: "b2@2 ~@4 b2@2 f#2@3 a2@3 b2@2", B: "c#3@4 e3 c#3 f#3@4 f#2@3 a2@3", C: "f#3@4 e3@4 d3 e3 d3@2 c#3@2 a2@2",
  D: "c#3@4 e3 c#3 a3@4 f#2@6", E: "b2@5 ~ b2@7 ~@3", F: "b2 ~@2 f#2@5", G: "a2 ~@2 f#2@5", H: "b2@2 ~@4 f#2@9 ~",
  I: "f#2@4 ~@2 f#2@4 ~@3 f#2 a2 g2", J: "f#2@4 ~@4 f#2@3 a2@2 ~ b2 ~", K: "c#3@5 ~ a2@6 ~@4", L: "g2@3 ~@5",
  M: "f#2@4 ~@2 f#2@5 ~@2 f#2 a2 g2", N: "f#2@4 ~@4 g2@3 a2@3 c#3@2", O: "e3@3 f#3@4 ~",
  P: "f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~@7",
})).s("gm_pad_new_age").gain(0.48)

// chords · piano
const piano = note(`<
  ~@2 A B A C D E F G H ~ I J H ~ I J H ~ I J H ~ I J A B A C D E F G H ~ I J H ~ I J K L M L N O P Q A B A C D E F G A
  B A C D E F G K L M L N O P Q
>`.pickRestart({
  A: "~@6 a3@9 ~", B: "a4@3 b4@3 ~@4 c#4@6, a3, e4@6 a4@9 ~", C: "a4@3 b4@3 a4@3 g#4@3 e4@3 ~, a3, e4@3 ~@5",
  D: "~@3 a3@4 ~", E: "a4@3 b4@3 a4@3 c#4@4 e4@3, a3@5 ~@3, e4@3 ~@5", F: "b3@3 c#4@3 e4@4 a3@6",
  G: "b3@3 c#4@3 a3@7 ~@3", H: "~@4 [e3,b3,e4]@2 c#4 ~@9", I: "~@4 [e3,a3,e4]@2 c#4 ~@9",
  J: "a3@4 b3@4 c#4@4 [a3,e4]@3 ~, e3", K: "a3@2 [a3,e4]@3 ~ d4@6 e4@3 ~, c#4@4 ~@2 a3@9 ~",
  L: "[a3,c#4]@5 ~@3 a3@3 b3@3 c#4 ~", M: "[a3,c#4]@5 ~ b3@6 ~@2 a3 ~", N: "[a3,c#4]@4 ~@2 d4@6 e4@3 ~, ~@6 a3@9 ~",
  O: "[a3,c#4]@5 ~@3 c#4@3 d4@3 e4@2", P: "f#4@3 ~", Q: "a4 ~ a4 ~ a4 ~ a4 ~ a4 ~@7",
})).s("gm_piano").gain(0.22)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@2 A ~ A B A ~ C D ~@16 A ~ A B A ~ C D ~@16 A ~ A B A ~ C D A ~ A B A ~ C D ~@8
>`.pickRestart({
  A: "b3@3 a3 ~@12", B: "f#4@4 e4@2 c#4@9 ~", C: "d4@3 e4@3 c#4@8 ~@2", D: "c#4@2 a3 b3@2 f#3 a3@9 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.22)

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

// drums · snare
const snare = s("sd").struct("<~ [~@3 x] [~ x ~ x]!72>").gain(0.31)

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

// drums · open hat
const open_hat = s("oh").struct("<~@2 [~ x ~@6]!72>").gain(0.36)

stack(pad_new_age, piano, acoustic_guitar_nylon, kick, snare, hihat, open_hat)

More by TLC