Strudelify

I'll Be Your Baby Tonight

UB40

KeyD majorTempo88 bpm
0:00/0:00
// I'll Be Your Baby Tonight — UB40
// 88 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 70 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(88/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 · "Bass"
const bass = note(`<
  ~@2 A B C B C B D E C B C B C B D F C B G H I H G H I J C B C B C B D K C B C L G H I H G H I J C B C B C B D K C B C
  L C B C B C B D K M N
>`.pickRestart({
  A: "d2@3 d3 d2 ~ d3 ~ g2@3 g3 g2 ~ g3 ~", B: "e2@3 e3 e2 ~ e3 ~ a1@3 a2 a1 ~ a2 ~",
  C: "d2@3 d3 d2 ~ d3 ~ g1@3 g2 g1 ~ g2 ~", D: "a1@3 a2 a1 ~ a2 ~ a1@3 a2 g2 ~ e2 ~",
  E: "g1@3 g2 g1 ~ g1 ~ a1@4 c#2@3 ~", F: "g1@3 g2 g1 ~ g1 ~ a1@3 a2 a1 ~ a2 ~",
  G: "a1@3 a2 a1 ~ a2 ~ a1@3 a2 a1 ~ a2 ~", H: "d2@3 d3 d2 ~ d3 ~ d2@3 d3 d2 ~ d3 ~",
  I: "g1@3 g2 g1 ~ g2 ~ g1@3 g2 g1 ~ g2 ~", J: "a1!5 ~@3 a1@4 c#2@3 ~", K: "g1@3 g2 g1 ~ g1 ~ a1@3 a2 a1 ~ a1 ~",
  L: "e2@3 e3 e2 ~ e3 ~ a1@3 a2 a1 ~ a1 ~", M: "d2@3 d3 d2 ~ d3 ~ g1@3 g2 g1 ~ a1 ~", N: "d2",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · drawbar organ · "Organ"
const drawbar_organ = note(`<
  ~@2 A B A B A B C D A B A B A B C E A B C F G F C F G H A B A B A B C I A J A J C F G F C F G H A B A B A B C E A J A
  J A B A B A B C I K L
>`.pickRestart({
  A: "~@2 [f#5,a5] ~@3 [f#5,a5] ~@3 [g5,b5] ~@3 [g5,b5] ~", B: "~@2 [a5,c#6] ~@3 [a5,c#6] ~@3 [g5,b5] ~@3 [g5,b5] ~",
  C: "~@2 [a5,c#6] ~@3 [a5,c#6] ~@3 [a5,c#6] ~@3 [a5,c#6] ~", D: "[g5,b5]@3 ~@3 [g5,b5] ~ [a5,c#6]@3 ~ [g5,b5]@3 ~",
  E: "~@2 [g5,b5] ~@3 [g5,b5] ~@3 [a5,c#6] ~@3 [a5,c#6] ~", F: "~@2 [f#5,a5] ~@3 [f#5,a5] ~@3 [f#5,a5] ~@3 [f#5,a5] ~",
  G: "~@2 [g5,b5] ~@3 [g5,b5] ~@3 [g5,b5] ~@3 [g5,b5] ~", H: "~@2 [a5,c#6] ~@3 [a5,c#6] ~ [a5,d6]@3 ~ [g5,d6]@3 ~",
  I: "[g5,b5]@2 ~@4 [g5,b5] ~ [a5,c#6]@2 ~@2 [g5,b5]@2 ~@2", J: "~@2 [a5,d6] ~@3 [a5,d6] ~@3 [a5,c#6] ~@3 [a5,c#6] ~",
  K: "~@2 [f#5,a5] ~@3 a5@2 [g5,b5]@3 ~ [g5,b5]@2 [a5,c#6] ~, ~@6 f#5 ~@9", L: "[f#5,a5,d6]",
})).s("gm_drawbar_organ").gain(0.35)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  ~@2 A B A B A B C D A B A B A B C D A B C E F E C E F C A B A B A B C D A G A G C E F E C E F C A B A B A B C H A G A
  G A B A B A B C D I J
>`.pickRestart({
  A: "~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // D G
  B: "~@2 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // A G
  C: "~@2 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~", // A
  D: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [e4,a4,c#5] ~@3 [d4,g4,b4] ~", // G A G
  E: "~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~", // D
  F: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // G
  G: "~@2 [e4,a4,d5] ~@3 [e4,a4,d5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~", // Dsus2 A
  H: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~", // G A
  I: "~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~ [d4,g4,b4] ~@3 [d4,g4,b4] ~ [e4,a4,c#5] ~", J: "[f#4,a4,d5]",
})).s("gm_electric_guitar_clean").gain(0.3)

// other · pad bowed · "Synth 1"
const pad_bowed = note("<~@21 A B@2 ~ C D E F G ~@11 A B@2 ~ C D E F H ~@10 F H ~@8>".pickRestart({
  A: "~ a4 g4 f#4, d5@3 ~", B: "[d4@3 ~]/2", C: "d4 f#4 g4 a4", D: "d5", E: "e5@7 e6@8 ~", F: "d5 a4 g4 f#4", G: "e4",
  H: "e4@4 e5 e4 ~ e5 e4 ~ e5 e4 ~ e5 e4 ~",
})).s("gm_pad_bowed").gain(0.4)

// other · music box · "SynGlock"
const music_box = note("<~@36 A B A B ~@16 A B A B ~@8 C D>".pickRestart({
  A: "[a4,d5]!10 [g4,d5]!6", B: "[a4,d5]!10 [a4,c#5]!6", C: "[f#4,d5]!8 [d4,b4]!6 [e4,c#5]!2", D: "[f#4,d5]!16",
})).s("gm_music_box").gain(0.2)

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

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~ x]!66 [~ x ~@2] ~>").gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@2 [~@5 x ~@7 x ~@2]!66 [~@5 x ~@10] ~>").gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@27 A ~@19 A ~@11 B ~@8 C ~>".pickRestart({
  A: "~@9 x!4 ~@3", B: "~@3 x", C: "~@7 x",
})).gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<[x!4] [x!2 ~@2] [x!3 ~ x ~ x ~ x!3 ~ x ~ x ~]!67 ~>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~@25 B ~@19 B ~@7 C ~@3 D ~@8 E ~>".pickRestart({
  A: "~@11 x!2 ~ x ~", B: "~@4 x ~@2 x!2 ~@7", C: "~@11 x ~@4", D: "~@6 x ~@3 x!2 ~@4", E: "~@12 x!2 ~@2",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~ [~ x] ~@68>").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@26 A B ~@18 A B ~@7 C ~@3 D ~@7 E F ~>".pickRestart({
  A: "~@14 x!2", B: "~ x!3 ~@12", C: "~@3 x", D: "~@7 x!3 ~@6", E: "~@10 x!3 ~@3", F: "~@11 x ~@4",
})).gain(0.35)

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

// drums · agogo bells
const agogo_bells = s("agogo:4").struct("<~@27 [~ x ~@2 x ~@4 x ~@2 x ~@3] ~@19 [~ x ~@2 x ~@4 x ~@2 x ~@3] ~@22>")
  .gain(2.85)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@2
  [~ x ~ x ~ x ~ x]!18
  [x!2 ~ x!3 ~@2 x!2 ~ x!3 ~@2]!8
  [~ x ~ x ~ x ~ x]!12
  [x!2 ~ x!3 ~@2 x!2 ~ x!3 ~@2]!8
  [~ x ~ x ~ x ~ x]!20
  ~@2
>`).gain(1.51)

stack(
  bass, drawbar_organ, electric_guitar_clean, pad_bowed, music_box, kick, snare, snare_soft, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, agogo_bells, cabasa
)

More by UB40