Strudelify

Rock It Baby (We've Got a Date)

Johnny Nash

KeyF majorTempo78 bpm
0:00/0:00
// Rock It Baby (We've Got a Date) — Johnny Nash
// 78 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 3, 4/4 at bar 3, 2/4 at bar 23, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 5 "SYN STR 1" synth strings 1 (copy of ch 4 "SLOWSTRING" string ensemble 2); ch 7 "TUBULARBEL" tubular bells (copy of ch 8 "STEELDRUMS" steel drums)
// note: Full arrangement: all 79 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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 B A B C D C D C E F G F H F I J K L M N O P O P O Q R C S T S U V W X Y C D C D C E F G C D C D C E F Z AA AB AC
  AD@2 C D C D C E F G C D C D C E F G C D C AE
>`.pickRestart({
  A: "[f2,f3] [bb2,bb3]", B: "[c3,c4]@23 ~", C: "[f2,f3]@8 ~ [f2,f3]@3 [bb2,bb3]@8 ~ [bb2,bb3]@3",
  D: "[c3,c4]@11 [c3,c4] ~@6 [a2,a3]@3 [c3,c4]@3, ~@4 [c3,c4]@3 ~", E: "[c3,c4]@11 [c3,c4] [c3,c4]@9 [a2,a3]@3",
  F: "[bb2,bb3]@8 ~ [bb2,bb3]@3 [c3,c4]@8 ~ [c3,c4]@3", G: "[f2,f3]@8 ~ [f2,f3]@3 [f2,f3]@8 ~ [f2,f3]@3",
  H: "[f2,f3]@11 [f2,f3] [f2,f3]@10 ~@2", I: "[f2,f3]@11 [f2,f3] [f2,f3]@8 [f2,f3]@4",
  J: "[d2,d3]@8 ~ [d2,d3]@3 [d2,d3]@5 ~@7", K: "[bb1,bb2]@11 [bb1,bb2] [bb1,bb2]@10 ~@2",
  L: "[c2,c3]@8 ~ [c2,c3]@3 [d2,d3]@8 ~ [d2,d3]@3", M: "[bb1,bb2]@8 ~ [bb1,bb2]@3 [c2,c3]@8 ~ [c2,c3]@3",
  N: "[c2,c3]@8 ~ [c2,c3]@3 [f2,f3]@8 ~ [f2,f3]@3", O: "[bb2,bb3]@8 ~ [bb2,bb3]@3 [c3,c4]@11 [c3,c4]",
  P: "~@6 [a2,a3]@3 [c3,c4]@3 [f2,f3]@8 ~ [f2,f3]@3, [c3,c4]@3 ~@5", Q: "[c3,c4]@9 [a2,a3]@3 [bb2,bb3]@8 ~ [bb2,bb3]@3",
  R: "[c3,c4]@8 ~ [c3,c4]@3 [f2,f3]@8 ~ [f2,f3]@3", S: "[c3,c4]@8 ~ [c3,c4]@3 [f2,f3]@11 [f2,f3]",
  T: "[f2,f3]@10 ~@2 [bb2,bb3]@8 ~ [bb2,bb3]@3", U: "[f2,f3]@8 [f2,f3]@4 [d2,d3]@8 ~ [d2,d3]@3",
  V: "[d2,d3]@5 ~@7 [bb1,bb2]@11 [bb1,bb2]", W: "[bb1,bb2]@10 ~@2 [c2,c3]@8 ~ [c2,c3]@3",
  X: "[d2,d3]@8 ~ [d2,d3]@3 [bb1,bb2]@8 ~ [bb1,bb2]@3", Y: "[c2,c3]@8 ~ [c2,c3]@3 [c2,c3]@8 ~ [c2,c3]@3",
  Z: "[f2,f3]@8 ~ [f2,f3]@3 [f2,f3]@6 [f2,f3]@5 ~", AA: "[a1,a2]@23 ~", AB: "[bb1,bb2]@23 ~", AC: "[a1,a2] [bb1,bb2]",
  AD: "[c2,c3]@23 ~", AE: "[c3,c4]@11 [c3,c4] [c3,c4]@10 ~@2",
})).s("gm_fretless_bass").gain(0.31)

// chords · reed organ
const reed_organ = note(`<
  ~@21 A B@6 C@8 D E F G H G H G I J K G H G H G I J L M N G@2 O G H G H G I J K G H G H G I J K G H P
>`.pickRestart({
  A: "~@12 [a4,c5,f5]@11 ~", // F
  B: "[[bb4,d5,f5]@11 ~ [g4,c5,e5]@24 [a4,f5]@11 ~ [bb4,d5,f5]@11 ~ [g4,c5,e5]@24 [a4,f5]@11 ~ [bb4,d5,f5]@11 ~ [g4,c5,e5]@24 [bb4,d5,f5]@11 ~, ~@3 c5@2 ~@2 c5@2 ~@3]/6", // Bb C Dm Bb C Dm Bb C …
  C: "[[g4,c5,e5]@11 ~ [a4,c5,f5]@24 [bb4,d5]@11 ~ [g4,c5,e5]@11 ~ [a4,c5,f5]@24 [bb4,d5]@11 ~ [g4,c5,e5]@11 ~ [a4,c5,f5]@24 [f4,a4,d5]@24 [f4,bb4,d5]@24 [g4,c5,e5]@11 ~, ~@3 f5@2 ~@2 f5@2 ~@7]/8", // C F Bb C F Bb C F …
  D: "[bb4,d5,f5]@23 ~", E: "[g4,c5,e5]@11 ~ [g4,c5,e5]@9 ~@3", F: "[a4,c5,f5]@11 ~ [bb4,d5,f5]@11 ~", G: "[g4,c5,e5]",
  H: "[a4,f5]@11 ~ [bb4,d5,f5]@11 ~, c5", I: "[bb4,d5,f5]@11 ~ [g4,c5,e5]@11 ~", J: "[a4,c5,f5]",
  K: "f5 [bb4,d5,f5], [a4,c5]", L: "[f4,a4,d5]", M: "[f4,bb4,d5]", N: "[f4,d5] ~@11 [f4,bb4,d5]@11 ~, a4@11 ~@13",
  O: "[a4,f5]@11 ~ [bb4,d5,f5]@11 ~, c5 ~@23", P: "[g4,c5,e5] ~",
})).s("gm_reed_organ").gain(0.24)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~ A B C D E F G H I H J K L K J M N O P@3 Q R S T Q U V@2 W@2 X@4 Y Z I F G H I H J K I F G H I H J K AA AB AC AD@2 I
  F G H I H J K I F G H I H J K I F G H
>`.pickRestart({
  A: "[c5,f5,a5]@8 ~@4 [d5,f5,bb5]@9 ~@3", B: "[c5,e5,g5]@4 ~@3 [f4,bb4,d5]",
  C: "[a4,c5]@8 ~@4 [f4,bb4,d5]@7 ~@5, f4 ~@7", D: "[g4,c5,e5]@5 ~", E: "[f4,a4,c5]@3 ~ [f4,bb4,d5]@3 ~",
  F: "[e4,g4,c5]@13 ~@11", G: "[f4,a4,c5]@7 ~@5 [f4,bb4,d5]@8 ~@4", H: "[e4,g4,c5] ~",
  I: "[f4,a4,c5]@9 ~@3 [f4,bb4,d5]@10 ~@2", J: "[f4,bb4,d5]@12 [e4,g4,c5]@11 ~", K: "[f4,a4,c5]@3 ~",
  L: "[f4,bb4,d5]@11 ~ [e4,g4,c5]@11 ~", M: "[f4,a4,c5]@2 ~", N: "[d4,f4,a4]@3 ~", O: "[d4,f4,bb4]@19 ~@5",
  P: "[[e4,g4,c5]@11 ~ [d4,f4,bb4]@24 [e4,g4,c5]@23 ~ [f4,a4,c5]@9 ~@3]/3", Q: "[f4,bb4,d5]@5 ~ [e4,g4,c5]@6",
  R: "~@12 [f4,a4,c5]@7 ~@5", S: "[f4,bb4,d5]@2 ~ [e4,g4,c5]@3", T: "~@4 [f4,a4,c5]@3 ~", U: "~ [f4,bb4,d5]",
  V: "[[e4,g4,c5]@11 ~ [f4,a4,c5]@18 ~@6 [f4,bb4,d5]@11 ~]/2", // C F Bb
  W: "[[e4,g4,c5]@11 ~ [f4,a4,c5]@18 ~@6 [f4,bb4,d5]@12]/2", // C F Bb
  X: "[[e4,g4,c5]@11 ~ [f4,a4,c5]@17 ~@7 [d4,f4,a4]@18 ~@6 [d4,f4,bb4]@19 ~@5 [e4,g4,c5]@11 ~]/4", Y: "[d4,f4,bb4]",
  Z: "[e4,g4,c5]@23 ~", AA: "[d4,f4,a4,d5]@19 ~@5", AB: "[d4,f4,bb4,d5]@19 ~@5",
  AC: "[d4,f4,a4,d5]@11 ~ [d4,f4,bb4,d5]@11 ~", AD: "[[e4,g4,c5,e5]@47 ~]/2",
})).s("gm_string_ensemble_2").gain(0.21)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
  ~@21 A B@6 C@8 D E F G H G H G I J K G H G H G I J L M N G@2 O G H G H G I J K G H G H G I J K G H P
>`.pickRestart({
  A: "~@12 [a3,c4,f4]@11 ~", // F
  B: "[[bb3,d4,f4]@11 ~ [g3,c4,e4]@24 [a3,f4]@11 ~ [bb3,d4,f4]@11 ~ [g3,c4,e4]@24 [a3,f4]@11 ~ [bb3,d4,f4]@11 ~ [g3,c4,e4]@24 [bb3,d4,f4]@11 ~, ~@3 c4@2 ~@2 c4@2 ~@3]/6", // Bb C Dm Bb C Dm Bb C …
  C: "[[g3,c4,e4]@11 ~ [a3,c4,f4]@24 [bb3,d4]@11 ~ [g3,c4,e4]@11 ~ [a3,c4,f4]@24 [bb3,d4]@11 ~ [g3,c4,e4]@11 ~ [a3,c4,f4]@24 [f3,a3,d4]@24 [f3,bb3,d4]@24 [g3,c4,e4]@11 ~, ~@3 f4@2 ~@2 f4@2 ~@7]/8", // C F Bb C F Bb C F …
  D: "[bb3,d4,f4]@23 ~", E: "[g3,c4,e4]@11 ~ [g3,c4,e4]@9 ~@3", F: "[a3,c4,f4]@11 ~ [bb3,d4,f4]@11 ~", G: "[g3,c4,e4]",
  H: "[a3,f4]@11 ~ [bb3,d4,f4]@11 ~, c4", I: "[bb3,d4,f4]@11 ~ [g3,c4,e4]@11 ~", J: "[a3,c4,f4]",
  K: "f4 [bb3,d4,f4], [a3,c4]", L: "[f3,a3,d4]", M: "[f3,bb3,d4]", N: "[f3,d4] ~@11 [f3,bb3,d4]@11 ~, a3@11 ~@13",
  O: "[a3,f4]@11 ~ [bb3,d4,f4]@11 ~, c4 ~@23", P: "[g3,c4,e4] ~",
})).s("gm_synth_strings_2").gain(0.38)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A B A C A B A B A B A B A B A D A B E F B G A G A G A G A G A G H G I J G A B A B A B A B A B A B A B A B K@2 L B@2
  A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "x!2", B: "x ~@10 x!2 ~@11", C: "x ~@10 x!2 ~@4 x ~@2 x ~@3", D: "x ~@10 x!2 ~@7 x ~@3", E: "x ~@2 x!2 ~@3",
  F: "x ~@4 x ~@5 x!2 ~@11", G: "x ~@11 x ~@10 x", H: "x ~ x!2 ~@2", I: "x ~@3 x ~@2 x", J: "x ~@11 x ~@4 x ~@5 x",
  K: "x", L: "x ~@10 x!2 ~@10 x",
})).gain(0.35)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~
  [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!77
  [x ~ x!2 ~ x!2 ~ x!2 ~ x ~@12]
>`).gain(0.12)

// drums · crash
const crash = s("cr").struct("<~ [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!73 ~@5>").gain(0.17)

// drums · crash · soft notes
const crash_soft = s("cr").struct(`<
  ~@74
  [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!4
  [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@11]
>`).gain(0.06)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~ A ~@3 A ~@7 A ~@3 A ~@3 B ~@7 B ~@3 B ~@4 A ~@7 A ~@7 A@2 C A@3 ~@7 A ~@7 A ~@3
>`.pickRestart({
  A: "x", B: "~ x", C: "x!2",
})).gain(0.3)

// drums · ht
const ht = s("ht").struct("<A B@19 C D B@14 E F B@7 G B@7 H ~@2 I H J B@7 K B@7 L B@3 M>".pickRestart({
  A: "~@12 x!4 ~ x!2 ~ x ~@3", B: "~ x ~ x", C: "~@6 x ~ x!2 ~@7 x!5 ~@2", D: "~ x!3 ~ x!5 ~@8 x ~@5",
  E: "~@6 x ~@11 x ~ x!2 ~@2", F: "~@5 x!5 ~@3 x!3 ~ x!5 ~@2", G: "~@6 x ~@7 x ~@2 x!5 ~ x",
  H: "~@6 x ~@4 x!2 ~ x ~@2 x!5 ~@2", I: "~@3 x", J: "x!4 ~ x!2 ~ x ~@2 x!5 ~ x!7", K: "~@6 x ~@7 x!2 ~ x!5 ~ x",
  L: "~@6 x ~@11 x!4 ~ x", M: "~ x ~@2",
})).gain(0.4)

// drums · whistle
const whistle = s("ballwhistle:0").struct("<[~@21 x!3] x ~@77>").gain(0.3)

stack(bass, reed_organ, string_ensemble_2, synth_strings_2, mid_tom, cowbell, crash, crash_soft, bongos, ht, whistle)

More by Johnny Nash