Strudelify

Be My Baby

Vanessa Paradis

KeyA minorTempo128 bpm
0:00/0:00
// Be My Baby — Vanessa Paradis
// 128 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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 A B A B A B A B A B A B C D E F E F E F G H A B C D E F G I A B A B A B C J E F E F E F G H A B C D E F G I A B
  C D E F G I E F E K E F G H A B A B A B C D E F E F E F G H A B C D E F G I A B C D E F G I L
>`.pickRestart({
  A: "c2 ~ c2 ~ c2 g1 c2!2", B: "~@2 c2 ~ c2 g1 c2 g1", C: "c2 ~ c2 ~ c2 g1 c2 a1", D: "~ a1 ~ a1 ~ a1 f2 e2",
  E: "d2 ~ d2 ~ d2 a1 d2!2", F: "~@2 d2 ~ d2 a1 d2 a1", G: "d2 ~ d2 ~ d2 a1 d2 g1", H: "~ g1 ~ g1 ~ g1 ~ g1",
  I: "~ g1 ~ g1 ~ g1 ~ b1", J: "~ a1 ~ a1 g1 f1 e1 ~", K: "~ a1 d2 f2 e2 d2!2 c2", L: "c2@2 c2!3 ~@11",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · tubular bells · "TUBULARBEL"
const tubular_bells = note("<~ A ~@3 A ~@27 A ~@3 A ~@3 B ~@3 B ~@27 C ~ D ~ C ~@2 E B ~@3 B ~@20>".pickRestart({
  A: "[e4,c5] ~@15", B: "d5 ~@15", C: "c5 ~@3", D: "~@7 b4", E: "d5 ~@7 c#5 ~@7",
})).s("gm_tubular_bells").gain(0.3)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~ A B A C A B A C ~@8 D@7 E A B F G H@2 I J ~@8 D@7 E A B F G K@3 L A B F G M@3 J ~@4 N ~ O@2 ~@8 D@7 E A B F G M@3 J
  A B P G M@3 Q R
>`.pickRestart({
  A: "[c4,c5] ~ [g3,g4] ~ [c4,c5] ~@5 [g3,g4] ~ [c4,c5] ~ [c4,c5] ~", // C G C G C
  B: "~@2 [g3,g4] ~ [c4,c5] ~@5 [g3,g4] ~ [c4,c5] ~ [g3,g4] ~", C: "~@2 [g3,g4] ~ [c4,c5] ~@11",
  D: "[[d4,d5]@6 [a3,a4]@6 [d4,d5]@4 [c#4,c#5]@6 [a3,a4]@6 [c#4,c#5]@4 [c4,c5]@6 [a3,a4]@6 [c4,c5]@4 [c#4,c#5]@6 [a3,a4]@5 ~ [f4,a5] [e4,g5] [d4,f5] [c#4,e5] [d4,d5]@6 [a3,a4]@6 [d4,d5]@4 [c#4,c#5]@6 [a3,a4]@6 [c#4,c#5]@4 [c4,c5]@6 [a3,a4]@6 [c4,c5]@4, f3, ~@4 [f4,f5]@3]/7", // D A D C# A C# C A …
  E: "[e4,g4,e5] [d4,f4,d5]", F: "[c4,c5] ~ [g3,g4] ~ [c4,c5] ~@5 [g3,g4] ~ [c4,c5] ~ [a3,a4,a5] ~",
  G: "~@2 [a3,a4,a5] ~ [g4,g5] ~ [a3,g4,g5] ~ [f4,f5] ~ [a3,f4,f5] ~ [a4,a5]@2 [g4,g5] ~, ~@12 f4 ~ e4@2", // A G A7 F Dm A G
  H: "[[d4,d5]@3 ~ f4 e4 d4 ~ [c#4,c#5]@3 [a3,a4]@3 c#5@2, f4@2 ~ d5 ~@4, ~@3 [a3,a4]@3 ~ e4@4 ~@5]/2", // D C# A
  I: "[c4,e4,c5]@3 [a3,a4]@3 [c4,c5]@2", J: "[e4,b4]@3 [f4,c5]@3 [g4,d5]@2",
  K: "[[d4,d5]@3 ~ f4 e4 d4 ~ [c#4,c#5]@3 ~ f4 e4 d4 ~ [c4,c5]@3 [a3,a4]@3 [c4,c5]@2, f4@4 ~@2 d5@2 ~@3 [a3,a4]@3 ~ e4@7 ~@2, ~@3 [a3,a4]@3 ~ e4@5 ~@2 [c#4,c#5]@2 ~@8]/3", // D C# C A C A C#
  L: "[e4,b4]@3 [f4,c5]@3 [d3,g4,d5]@2", // E5 F5 G5
  M: "[[d4,d5]@3 ~ f4 e4 d4 ~ [c#4,c#5]@3 ~ f4 e4 d4 ~ [c4,c5]@3 [a3,a4]@3 [c4,c5]@2, f4@4 ~@2 d5@2 ~@3 [a3,a4]@3 ~ e4@7 ~@2, ~@6 [a3,a4]@6 ~@2 e5@12 ~@4 e5@17 ~, ~@7 e4@5 ~@2 [c#4,c#5]@2 ~@8]/3", // D C# C A C A C#
  N: "[d4,f4,d5] ~@7", O: "[~@7 [e4,g4,e5]@2 [d4,f4,d5]@2 [e4,g4,e5]@2 [d4,f4,d5]@2 g3]/2",
  P: "[c4,c5] ~ [g3,g4] ~ [c4,c5] ~@5 [g3,g4] ~ [c4,c5] ~ [a3,a4] ~", Q: "[e4,g4,b4]@3 [f4,a4,c5]@3 [g4,b4,d5]@2",
  R: "[c4,c5] ~ [g3,g4] ~ [c4,c5] ~@11", // C G C
})).s("gm_string_ensemble_1").gain(0.32)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~ A B C B A B C B A B C B A B C ~ D E F E D E F G A B C ~ D E F G A B C B A B C ~ D E F E D E F G A B C ~ D E F G A B
  C ~ D E F G D E F E D E F G A B C B A B C ~ D E F E D E F G A B C ~ D E F G A B C ~ D E F G H
>`.pickRestart({
  A: "~@4 [g4,c5] ~@11", B: "~@4 [g4,b4] ~@11", C: "~@4 [g4,a#4] ~@11", D: "~@4 [d4,f4] ~@11", E: "~@4 [c#4,f4] ~@11",
  F: "~@4 [c4,f4] ~@11", G: "~@4 [e4,g4] ~@7 [d4,f4] ~@3", H: "~@4 g4 ~@11",
})).s("gm_overdriven_guitar").gain(0.35).pan(0.2)

// chords · vibraphone
const vibraphone = note(`<
  ~ A@8 B@4 C@3 D E F G H E F G I C@3 D E F G I A@4 C@3 D E F G H E F G I C@3 D E F G I C@3 D E F G I J@4 K@4 B@4 C@3 D
  E F G H E F G I C@3 D E F G I C@3 D E F G I L
>`.pickRestart({
  A: "[[c4,e4]@14 [b3,e4]@16 [a#3,e4]@16 [b3,e4]@13 ~@5]/4", // C E5 A#dim E5
  B: "[[c4,e4]@14 b3@14 b3@2 [a#3,e4]@16 [b3,e4]@13 ~@5, g4@15 g4@9 ~@8, ~@7 e4@8 ~@17]/4", // C A#dim E5
  C: "[[c4,e4]@7 b3@7 b3 [a#3,e4,g4]@9, g4@5 ~@3, ~@7 e4@8 ~@9]/3", D: "[c#4,e4,a4]@2 [c#4,e4,g4] ~",
  E: "d5@5 ~ a4@6 d5@4, d4", F: "c#5@5 ~ a4@6 c#5@4, c#4", G: "c5@6 a4@5 ~ c5@4, c4", H: "c#5@6 a4@6 ~ c#5@3, c#4",
  I: "[e4,g4]@7 ~ [d4,f4]@7 ~", J: "[[d4,a4]@7 [c#4,a4]@8 [c4,a4]@8 [c#4,a4]@9]/4",
  K: "[[d4,a4]@7 [c#4,a4]@8 [c4,a4]@8 g4@5 f4@4, ~@23 d4@9]/4", L: "[c4,e4,g4] ~@15",
})).s("gm_vibraphone").gain(0.24).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~ [~ x ~@3 x ~ x]!104 [~ x ~@6]>").gain(0.4)

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

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

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

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@19 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@9 B C A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~ x ~ x ~ x ~@2",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~ [x!4]!104 [x!2 ~@2]>").gain(0.4)

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

stack(
  bass, tubular_bells, string_ensemble_1, overdriven_guitar, vibraphone, kick, snare, hihat, hihat_soft, crash,
  tambourine, tambourine_soft
)