Strudelify

Here Comes My Baby

The Tremeloes

KeyG majorTempo181 bpm
0:00/0:00
// Here Comes My Baby — The Tremeloes
// 181 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "E.PIANO 2" epiano2 (copy of ch 3 "A.PIANO 1" piano)
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(181/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 · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@4 A B C B C B C D E F G H I J K L M N O H I P Q R E R Q R Q S T U M V Q R E R T U E V K W E F G H I J K L M N O H I
  P Q R E R Q R Q S T U M V Q R E R T U E V K W E F G H I J K L M N O H I P Q R E R Q R Q S T U M V Q R E R T U E V K W
  E V E V E V K X Y
>`.pickRestart({
  A: "g2@3 ~ g2@4 d2@5 ~ c2@2", B: "~@2 c2@3 ~ c2 ~ d2@3 ~ d2@2 f#2@2", C: "g2@3 ~ g2@3 ~ d2@5 ~ c2@2",
  D: "~@2 c2@3 ~ c2 ~ d2@3 ~ d2@2 ~@2", E: "g2@3 ~ g2@3 ~ d2@4 ~@2 c2@2", F: "~@2 c2@2 ~@2 c2 ~ g2@3 ~ g2@3 ~",
  G: "d2@3 ~ d2@3 ~ a1@4 ~@2 d2@2", H: "~@2 d2@2 ~@2 d2@2 a1@3 ~ d2@3 ~", I: "c2@3 ~ c2@3 ~ g1@3 ~ c2 ~ d2@2",
  J: "~ d2 ~ d2 a1 ~ d2 ~", K: "g2@7 ~ d2@6 ~@2", L: "c2@7 ~ d2@6 ~@2", M: "g2 ~ g2 ~ d2@2 ~ c2",
  N: "~@2 c2@2 ~@2 c2@2 g2@3 ~ g2@2 ~@2", O: "d2@5 ~ d2@2 a1@5 ~ d2@2", P: "~@2 d2@2 ~@2 d2@2 a1@3 ~ d2@2 ~@2",
  Q: "g2@2 ~@2 g2@3 ~ d2@4 ~@2 c2@2", R: "~@2 c2@2 ~@2 c2 ~ d2@3 ~ d2@2 ~@2", S: "~@2 c2@2 ~@2 c2 ~ d2@3 ~ d2@3 ~",
  T: "c2@3 ~ c2@2 ~@2 c2@4 ~@2 d2@2", U: "~@2 d2@2 ~@2 d2 ~ d2@3 ~ d2@2 ~@2", V: "~@2 c2@2 ~@2 c2 ~ d2@2 ~@2 d2@2 ~@2",
  W: "c2@7 ~ d2@7 ~", X: "c2@6 ~@2 d2@7 ~", Y: "g1 ~@3",
})).s("gm_synth_bass_2").gain(0.64)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@4 A B C B C B C D E@2 F@2 G H I J K@2 L M N O P Q P Q P Q P Q R@2 P Q P Q P Q R@2 P Q S T E@2 F@2 G H I J K@2 L M N
  O P Q P Q P Q P Q R@2 P Q P Q P Q R@2 P Q S T E@2 F@2 G H I J K@2 L M N O P Q P Q P Q P Q R@2 P Q P Q P Q R@2 P Q P Q
  P Q P Q P Q U V W
>`.pickRestart({
  A: "g2@3 ~ g2@4 d2@5 ~ c2@2", B: "~@2 c2@3 ~ c2 ~ d2@3 ~ d2@2 f#2@2", C: "g2@3 ~ g2@3 ~ d2@5 ~ c2@2",
  D: "~@2 c2@3 ~ c2 ~ d2@3 ~ d2@2 ~@2",
  E: "[[g3,b3,d4]@3 ~ [g3,b3,d4]@4 d3@2 [g3,a3] ~ g3 ~@3 [c4,e4,g4]@3 ~ [c4,e4,g4]@2 ~@2 [c4,g4] ~ [d4,g4]@2 g3@2 [c4,e4]@2, g2@10 d4@4 c3@17 ~, ~@22 g3@4 c4 ~@5]/2", // G Gsus2 C C5 G5 C
  F: "[~@4 [d4,f#4,a4]@3 ~ [d4,e4,a4] ~ [d4,f#4,a4]@4 [d4,a4] ~ [d4,g4,a4]@2 ~@2 [d4,f#4,a4]@3 ~ [d4,e4] ~ [d4,f#4,a4]@3 ~@3, d2@29 ~@3, ~@10 e4 ~@13 a4@2 ~@6]/2", // D Dsus2 D D5 Dsus4 D Dsus2 D
  G: "[c4,e4,g4]@3 ~ [c4,e4,g4]@4 ~@2 d4@2 e4@2 ~@2, c3@3 ~, ~@2 g3 ~, ~@5 g4@2 ~", // C
  H: "[d4,f#4,a4]@2 ~@2 [d4,f#4,a4]@2 ~@2 [d4,f#4,a4] ~ d4@2 ~@2 d4 ~, d3@13 ~@3, a3@2 ~ a3@2 [f#4,a4]@3", // D F#m
  I: "[g2,g3,b3,d4]@8 [d2,f#3,a3,d4]@7 ~", J: "[c2,e3,g3,c4]@7 ~ [f#3,a3,d4]@7 ~, ~@8 d2@5 ~@3",
  K: "[~@4 [g3,b3,d4]@4 d3 ~ [g3,b3,d4]@4 ~@2 [c4,e4,g4]@3 ~ [c4,e4,g4]@2 ~@2 [d4,g4] ~ [d4,g4]@2 g3@2 [c4,e4] ~, g2@11 ~@3 c3@16 ~@2, ~@11 g3@2 ~@2 g4]/2", // G C G5 C
  L: "d3@3 ~ [d4,f#4,a4]@3 ~ [d4,e4,a4] ~ [f#4,a4]@3 ~ [d4,e4,a4] ~, ~@10 d4 ~@5", // D Dsus2 F#m Dsus2
  M: "[d4,g4,a4]@2 ~@2 [d4,f#4,a4]@3 ~ [d4,e4,a4] ~ [d4,f#4,a4]@4 ~@2", // Dsus4 D Dsus2 D
  N: "~@4 [c4,e4,g4]@2 ~@2 [d4,g4] ~@3 g3@2 c4@2, c3@13 ~@3, ~@3 g3@2 [e4,g4]@2 ~", // C G5 Em
  O: "a3@4 [d4,f#4,a4]@2 a3@2 [d4,f#4,a4] ~ [d4,f#4,a4]@2 a3@2 ~@2, d3@15 ~", // D
  P: "[g3,b3,d4]@4 g2@3 ~ [d2,d4]@5 ~ [g3,c4,e4]@2, g2@2 ~@6 [f#3,a3]@3 ~@3 c2 ~", // G D C F#m
  Q: "~@2 [c2,g3,c4,e4]@3 ~ [c2,g3,c4,e4] ~ [d2,a3,d4,f#4]@3 ~ [d2,a3,d4,f#4]@2 ~@2", // C D
  R: "[[c4,e4,g4]@3 ~ [c4,e4,g4]@3 ~ [c4,e4,g4]@4 c2 ~ [d4,f#4,a4]@3 ~ [d4,f#4,a4]@4 ~@2 [d4,f#4,a4]@3 ~ [d4,f#4,a4]@3 ~, c2@9 ~@5 d2@7 ~ d2@9 ~]/2", // C D
  S: "[g2,g3,b3,d4]@8 ~ a3@7, ~ [d2,f#3,d4]", T: "[c2,e3,g3,c4]@8 ~ d2@6 ~, ~@8 [f#3,a3,d4]@7 ~",
  U: "[g2,g3,b3,d4]@7 ~ [d2,f#3,a3,d4]@7 ~", V: "[c2,e3,g3,c4]@8 [d2,a3,d4]@7 ~, ~@8 f#3@5 ~@3",
  W: "[g2,g3,b3,d4]@3 ~@13", // G
})).s("gm_piano").gain(0.56)

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

// drums · snare
const snare = s("sd").struct("<A@3 B A@14 ~ C A@26 ~ C A@6 ~ C A@26 ~ C A@6 ~ C A@29 D A@3 D ~ E F>".pickRestart({
  A: "~ x ~ x", B: "~@2 x!6", C: "~@5 x!3", D: "~@2 x ~ x!4", E: "~ x ~ x ~ x!3", F: "x",
})).gain(0.71)

// drums · clap
const clap = s("cp").struct("<~@4 A@14 ~@2 A@26 ~@2 A@6 ~@2 A@26 ~@2 A@6 ~@2 A@34 ~@3>".pickRestart({
  A: "~ x ~ x",
})).gain(0.71)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@7 A ~@15 A ~@35 A ~@35 A ~@20 B C ~@2 B C ~ D E>".pickRestart({
  A: "~@6 x!2", B: "x!2", C: "x ~@3 x!4", D: "~@7 x", E: "x",
})).gain(0.71)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@14 ~@2 A@26 ~@2 A@6 ~@2 A@26 ~@2 A@6 ~@2 A@34 ~@3>".pickRestart({
  A: "x!4",
})).gain(0.64)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@6 A@14 ~@2 A@26 ~@2 A@6 ~@2 A@26 ~@2 A@6 ~@2 A@34 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<A@3 B ~@7 C ~@15 C ~@35 C ~@35 C ~@27 D ~>".pickRestart({
  A: "~@6 x!2", B: "~@4 x!2 ~@2", C: "~@5 x ~@2", D: "~@5 x!2 ~",
})).gain(0.71)

// drums · crash
const crash = s("cr").struct("<~@18 A@2 ~@26 A@2 ~@6 A@2 ~@26 A@2 ~@6 A@2 ~@34 A@2 ~>".pickRestart({
  A: "x!2",
})).gain(0.71)

// drums · ride
const ride = s("rd").struct("<A B A B ~@116 C@2 ~@2 C@2 ~@3>".pickRestart({
  A: "x ~ x ~ x ~@2 x", B: "~ x ~ x ~ x ~ x", C: "x!2",
})).gain(0.71)

// drums · shaker
const shaker = s("sh").struct("<~@4 A@14 ~@2 A@26 ~@2 A@6 ~@2 A@26 ~@2 A@6 ~@2 A@34 ~@3>".pickRestart({
  A: "x!4",
})).gain(0.5)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@4 A@14 ~@2 A@26 ~@2 A@6 ~@2 A@26 ~@2 A@6 ~@2 A@34 ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.07)

stack(bass, piano, kick, snare, clap, low_tom, hihat, hihat_soft, mid_tom, crash, ride, shaker, shaker_soft)

More by The Tremeloes