Strudelify

Sugar Baby Love

The Rubettes

KeyC majorTempo120 bpm
0:00/0:00
// Sugar Baby Love — The Rubettes
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · fretless bass · "FRETLESS"
const bass = note(`<
  A@8 B C D E F G H I J K L M H I N O B C D E F G H I J K L M H I N O B P Q R F G H I J K L M H I N O B C D E F G H I J
  K L M H I N O B C D E F G H I J K L M H I N O B P Q R F G H I J K L M H I N O B C D E F G H I ~@8
>`.pickRestart({
  A: "g1!8", B: "c2@4 ~@2 c2 ~ c2@5 ~ c2 ~", C: "c2@6 c2 ~ c2 ~ c2@2 d2@2 e2@2", D: "g2@5 ~ g2 ~ g2@6 d2@2",
  E: "g2@5 ~ d2 ~ g2@3 ~ g#2@3 ~", F: "a2@5 ~ a2 ~ a2@5 ~ a2 ~", G: "a2@5 ~ a2 ~ a2@4 g2@3 ~",
  H: "f2@5 ~ f2 ~ f2@5 ~ f2 ~", I: "f2@5 ~ f2 ~ f2@4 g2@4", J: "c2@5 ~ c2 ~ c2@5 ~ c2 ~",
  K: "c2@5 ~ c2 ~ c2 ~ c2@2 d2@2 e2@2", L: "g2@5 ~ g2 ~ g2@5 ~ g2 ~", M: "g2@5 ~ d2@2 g2@3 ~ g2@4",
  N: "c2@5 ~ c2 ~ c2@5 ~ c2@2", O: "g1 ~ g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2", P: "c2@6 c2 ~ c2 ~ c2@2 d2@2 d#2@2",
  Q: "e2@5 ~ e2 ~ e2@6 b1@2", R: "e2@5 ~ b1 ~ e2@3 ~ g#2@3 ~",
})).s("gm_fretless_bass").gain(0.35)

// other · tubular bells · "TUBULARBEL"
const tubular_bells = note(`<
  A@2 B@2 C@2 D@2 ~@5 E F ~ G ~ H ~ I J K ~@9 L M N O ~@12 L M N O ~@9 E F ~ G ~ H ~ I J K ~@9 L M N O ~@12 L M N O ~@9
  E F ~@9
>`.pickRestart({
  A: "[g4@3 ~]/2", B: "[b4@3 ~]/2", C: "[d5@13 ~@3]/2", D: "[f5@13 ~@3]/2", E: "~@2 a4 g4", F: "f4@3 ~", G: "e5@11 ~@5",
  H: "d5@3 ~", I: "c5@13 ~@3", J: "~@4 c5@3 ~ g#4@3 ~ c4@2 ~@2", K: "e4@2 f4@2 g4@9 ~@3", L: "~@2 c5 e5", M: "g5@15 ~",
  N: "~@2 b4 d5", O: "g5@11 ~@5",
})).s("gm_tubular_bells").gain(0.25)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@8 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 ~@16 I@2 J@4 K@2 L@2 M@2 N@2 O@2 P@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 ~@16 I@2 J@4 K@2
  L@2 M@2 N@2 O@2 P@2 B@2 C@2 D@2 ~@8
>`.pickRestart({
  A: "[[g4,g6]@22 ~@2 [g4,g6]@3 [f4,f6]@2 [e4,e6]@3]/2", B: "[[d4,d6]@23 ~ [f4,f6]@3 [e4,e6]@2 ~ d6@2, ~@29 d4@2 ~]/2",
  C: "[[d4,d6]@5 e4 d4@2 [c4,c6]@15 ~ [c5,c6]@4 [b4,b5]@4, ~@5 e6@2 ~@25, ~@6 d6 ~@25]/2", D: "[[a4,a5]@7 [g4,g5]]/2",
  E: "[[e5,e6]@23 ~ [e5,e6]@2 [d5,d6]@3 [c5,c6]@3]/2", // E D C
  F: "[[d5,d6]@21 ~ [d5,d6]@2 [e5,e6]@2 [d5,d6]@2 [c5,c6]@2 d6@2, ~@30 d5 ~]/2", // D E D C
  G: "[[d5,d6]@6 [e5,e6] [d5,d6] [c5,c6]@11 ~ [g#4,g#5]@4 [f4,f5]@4 [c4,c5]@4]/2", H: "[[e4,e5] [f4,f5] [g4,g5]@14]/2",
  I: "g4/2", J: "[g#4@32 a4@23 ~ [a4,c5]@4 [g4,b4]@4]/4", K: "[[f4,a4]@31 ~]/2", L: "[f4@8 e4@23 ~, [c4,g4]@15 ~]/2",
  M: "[~@6 d4@21 ~@5, [b3,g4]@29 ~@3, e4 ~@3]/2", N: "[c4@6 f4 c4, g#4@27 ~@5, f4@11 ~@5]/2",
  O: "[e4@2 f4@2 ~@9 [g5,a5] [b5,c6] [d6,e6] [f6,g6] ~@15, ~@4 g4@25 ~@3, ~ e4@3 ~@4]/2", // Gsus2 Cmaj7 Dsus2 Fsus2
  P: "[g6@22 ~@2 [g4,g6]@3 [f4,f6]@2 [e4,e6]@3]/2", // G F E
})).s("gm_string_ensemble_1").gain(0.19)

// other · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  ~@24 A B C@2 D@2 E@2 B@2 C@2 F@2 B C ~@32 A B C@2 D@2 E@2 B@2 C@2 F@2 B C ~@32
>`.pickRestart({
  A: "~@2 g3 ~ c4 ~ g3 ~ e4 ~ g3 ~ c4@2 g3 ~", B: "~@2 g3 ~ c4 ~ g3 ~ e4 ~ g3 ~ c4 ~ g3 ~",
  C: "~@2 g3 ~ b3 ~ g3 ~ d4 ~ g3 ~ b3 ~ g3 ~", D: "~@2 a3 ~ c4 ~ a3 ~ e4 ~ a3 ~ c4 ~ a3 ~",
  E: "~@2 f3 ~ a3 ~ f3 ~ c4 ~ f3 ~ a3 ~ f3 ~", F: "~@2 f3 ~ g#3 ~ f3 ~ c4 ~ f3 ~ g#3 ~ f3 ~",
})).s("gm_pizzicato_strings").gain(0.31).pan(0.3)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B A B A B A B C D E F G H I J C@2 K L M@2 N O P D E F G H I J C@2 K L M@2 N O P D Q R G H I J C@2 K L M@2 N O P D E
  F G H I J C@2 K L M@2 N O P D E F G H I J C@2 K L M@2 N O P D Q R G H I J C@2 K L M@2 N O P D E F G H I J S@8
>`.pickRestart({
  A: "[g3,b3,d4]@3 [g3,b3,d4] [g3,b3,d4]@4", B: "[g3,b3,d4]@3 [g3,b3,d4] d4@2 d4 [g3,b3,d4], ~@4 [g3,b3]@3 ~",
  C: "[c4,e4,g4]@5 ~ [c4,e4,g4]@2 [c4,e4,g4]@4 [c4,e4,g4]@3 ~", // C
  D: "[c4,e4,g4]@5 ~ [c4,e4,g4]@2 [c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~", // C
  E: "[b3,d4,g4]@6 [b3,d4,g4]@2 [b3,d4,g4]@3 ~ [b3,d4,g4]@3 ~", // G
  F: "[b3,d4,g4]@6 [b3,d4,g4] ~ [b3,d4,g4]@2 b3 ~ b3@2 b3@2, ~@3 [d4,g4]", // G G5
  G: "[c4,e4,a4]@5 ~ [c4,e4,a4]@2 [c4,e4,a4]@4 [c4,e4,a4]@3 ~", // Am
  H: "[e4,a4]@6 c4 ~ [c4,e4,a4]@3 ~ [b3,d4,g4]@3 ~, c4@5 ~@11", // A5 Am G
  I: "[a3,c4,f4]@5 ~ [a3,c4,f4]@2 [a3,c4,f4]@4 [a3,c4,f4]@3 ~", // F
  J: "[a3,c4,f4]@5 ~ [a3,c4,f4] ~ [a3,c4,f4]@3 ~ [a3,c4,f4]@3 ~", // F
  K: "[b3,d4,g4]@5 ~ [b3,d4,g4] ~ [b3,d4,g4]@4 [b3,d4,g4]@3 ~", // G
  L: "[b3,d4,g4]@6 [b3,d4,g4] ~ [b3,d4,g4]@3 ~ [b3,g4]@4, ~@6 d4 ~", // G Em
  M: "[g#3,c4,f4]@5 ~ [g#3,c4,f4]@2 [g#3,c4,f4]@3 ~ [g#3,c4,f4]@3 ~", // Fm
  N: "[c4,e4,g4]@5 ~ [c4,e4,g4] ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~", // C
  O: "[b3,d4,g4]@5 ~ [b3,d4,g4]@2 [b3,d4,g4]@3 ~ [b3,d4,g4]@4", // G
  P: "[c4,e4]@5 ~ [c4,e4,g4]@2 [c4,e4,g4]@4 [c4,e4,g4]@3 ~, g4 ~@15", // C
  Q: "[b3,e4,g#4]@6 [b3,e4,g#4]@2 [b3,e4,g#4]@3 ~ [b3,e4,g#4]@3 ~", // E
  R: "[b3,e4,g#4]@6 [b3,e4,g#4] ~ [b3,e4,g#4]@2 b3 ~ b3@2 b3@2, ~@3 [e4,g#4]", S: "[e4, c4@21 ~@107, g4@5 ~@123]/8",
})).s("gm_electric_guitar_muted").gain(0.11).pan(0.9)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@8 A@2 B@2 C D E F G@2 B H I@2 G J ~@17 K L M N@2 O P Q R S@2 T U V W A@2 B@2 C D E F G@2 B H I@2 G J ~@17 K L M N@2
  O P Q R S@2 T U V W A@2 B@2 C ~@11
>`.pickRestart({
  A: "[c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~", // C
  B: "[b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~", // G
  C: "[c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~", // Am
  D: "[c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~", // Am G
  E: "[a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~", // F
  F: "[a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,g5] ~ [a4,c5,g5] ~", // F Am7
  G: "[g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~", // C
  H: "[b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5] ~", // G Bm
  I: "[g#4,c5,f5] ~ [g#4,c5,f5] ~ [g#4,c5,f5] ~ [g#4,c5,f5] ~ [g#4,c5,f5] ~ [g#4,c5,f5] ~ [g#4,c5,f5] ~ [g#4,c5,f5] ~", // Fm
  J: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g6,a6,b6] [b5,c6,d6,e6,f6] [f5,g5,a5] [b4,c5,d5,e5] [f4,g4,a4] [d4,e4] [a3,b3,c4] g3", // G Bdim F Cmaj7 F Dsus2 Am
  K: "~@2 [c5,e5,g5,c6]!3 ~ [c5,e5,g5,c6] ~ [c5,e5,g5,c6]@3 ~ [c5,e5,g5,c6]@3 ~", L: "[b4,e5,g#5,b5] ~",
  M: "~@3 [b5,e6,g#6]@2 [b5,e6,g#6] ~@2 [b5,e6,g#6]@3 ~ [b5,e6,g#6]@2 ~@2", // E
  N: "[[a5,c6,e6]@5 ~ [a5,c6,e6] ~ [a5,c6,e6]@10 ~@6 [e5,a5,c6]@3 ~ [d5,g5,b5]@3 ~]/2", // Am G
  O: "[c5,f5,a5]@5 ~ [f5,a5] ~ [c5,f5,a5]@7 ~", P: "~@2 [c5,f5,a5]@2 ~@2 [c5,f5,a5]@2 [c5,f5,a5]@3 ~ [c5,f5,a5]@3 ~",
  Q: "[c5,f5,a5]@5 ~ [c5,e5,g5] ~ [c5,e5,g5]@8", R: "~@8 [g4,c5,e5]@3 ~ [g4,c5,e5]@3 ~",
  S: "[[g4,c5,e5]@6 [g4,b4,d5] ~ [g4,b4,d5]@10 ~@14]/2", // C G
  T: "~@6 [g#4,c5] ~ [f4,g#4,c5] ~ [f4,g#4,c5] ~@3 [f4,g#4,c5] ~", // G# Fm
  U: "[f4,g#4,c5] ~ [f4,g#4,c5] ~ [f4,g#4,c5] ~ [f4,g#4,c5] ~ [f4,g#4,c5] ~ [f4,g#4,c5] ~ [f4,g#4,c5] ~ [f4,g#4,c5] ~", // Fm
  V: "[e4,g4,c5] ~ [g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~", // C C5 C
  W: "[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [g6,a6,b6] [b5,c6,d6,e6,f6] [f5,g5,a5] [b4,c5,d5,e5] [f4,g4,a4] [d4,e4] [a3,b3,c4] g3", // G Bdim F Cmaj7 F Dsus2 Am
})).s("gm_piano").gain(0.18).pan(0.4)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note("<~@46 A ~@5 B ~ C ~@39 A ~@5 B ~ C ~@6 D E F@8 ~>".pickRestart({
  A: "~@6 c5 ~@9", B: "~@6 f4 ~@9", C: "~@2 e4 ~@13",
  D: "[c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [c5,e5,a5] ~ [b4,d5,g5] ~ [b4,d5,g5] ~", // Am G
  E: "[a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~", // F
  F: "[[a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,f5] ~ [a4,c5,g5] ~ [a4,c5]@19 ~@95, ~@7 g5@57]/8", // F Am7 Am
})).s("gm_piano").gain(0.07).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  [~ x ~ x!2 ~@3]!8
  [x ~@2 x!2 ~@3]!63
  [x!2]
  [x ~@2 x!2 ~@3]!31
  [x ~ x!3 ~@2 x]
  [x ~@2 x!2 ~@3]!8
  ~@8
>`).gain(0.6)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  A@8 ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
  B ~ B ~ B ~ C ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@3 B ~ B ~ B ~ B ~@8
>`.pickRestart({
  A: "~@5 x ~ x", B: "~@7 x", C: "~@3 x ~@3 x",
})).gain(0.38)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@7 [~ x!7] ~@95 [~@14 x!2] ~@16>").gain(0.38)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@15 A ~@7 B ~@7 A ~@7 B ~@7 A ~@7 B ~@7 A ~@15 A ~@7 B ~@7 A ~@15 A ~@8
>`.pickRestart({
  A: "~@6 x!2", B: "~@5 x!3",
})).gain(0.38)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@23 A ~@15 A ~@15 A ~@31 A ~@32>".pickRestart({
  A: "~ x",
})).gain(0.23)

// drums · mid tom
const mid_tom = s("mt").struct("<~@103 [~@13 x ~@2] ~@16>").gain(0.38)

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

stack(
  bass, tubular_bells, string_ensemble_1, pizzicato_strings, electric_guitar_muted, piano, piano_soft, kick, kick_soft,
  snare, hihat, low_tom, open_hat, open_hat_soft, mid_tom, crash
)

More by The Rubettes