Strudelify

Sharing The Night Together

Dr. Hook

KeyE majorTempo153 bpm
0:00/0:00
// Sharing The Night Together — Dr. Hook
// 153 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(153/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 · "Base"
const bass = note(`<
  A B A C D E F G D E F H I J F G D E F H I J F K L M N O N P Q R S T U E F V U E F V W X Y Z AA X AB AC AD H Y T U E F
  V U E F V W X Y ~@2
>`.pickRestart({
  A: "e2", B: "g#2", C: "b1@3 c#2@2 d#2@2 b1", D: "e1@6 b1 c2", E: "c#2@5 c#2 g#1@2", F: "a1@3 c#2",
  G: "b1@3 c#2@2 d#2@3", H: "b1", I: "e2@6 b1 c2", J: "c#2", K: "b1@3 c#2@2 d#2 f#1!2", L: "f#1@7 c#2",
  M: "g#1@6 d#2 g#1", N: "f#1@5 f#1 c#2 f#1", O: "g#1@4 g#1 d#2 g#2@2", P: "g#1@6 f#1 g#1", Q: "a1@6 a1 g#1",
  R: "f#1!2", S: "a1@4 a1@3 a1", T: "b1!2", U: "e1@5 b1 e2 b1", V: "b1@3 f#1 b1@2 f#1@2", W: "c#2@5 c#2 f#1@2",
  X: "g#1@3 g#1", Y: "a1!2", Z: "b1 c2", AA: "c#2@3 f#1", AB: "a1@5 a1 e2@2", AC: "a2@4 a2 e2 a1 a#1",
  AD: "b1@5 b1 f#2 b1",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · epiano1 · "Piano 1"
const epiano1 = note(`<
  A@3 ~ B C D E F G H I@2 J@3 F G H I@2 K L@2 M N M O P Q R@2 S T U@3 T U@3 T V W X Y V Z AA AB AC AD@2 T U@3 T U@3 T V
  W X ~@2
>`.pickRestart({
  A: "~ [e4,g#4]@2 e4 f#4 g#4@3, ~ [b3,e4]", B: "[e4,g#4,b4]", C: "[e4,g#4,c#5]", D: "[e4,a4,c#5]", E: "[d#4,f#4,b4]",
  F: "[b3,e4]!2", G: "[c#4,e4,g#4] [e4,g#4,c#5]", H: "[e3,a3,c#4] [a3,c#4]",
  I: "[[a3,d#4]@4 [a3,d#4]@3 [b3,e4]@3 [a3,f#4] [g#3,e4]@5]/2", // Adim E5 D C#m
  J: "[[g#3,b3,c#4,e4]@7 [a3,c#4,e4]@5 ~ c#4 g#3 [d#3,f#3,b3]@5 ~@4]/3", K: "[g#3,b3,c#4,e4]",
  L: "[[a3,c#4,e4]@4 ~ c#4 g#3 [d#3,f#3,b3]@5 ~@4]/2", M: "~ [d#4,f#4,b4]@3",
  N: "[d#4,f#4] [d#4,f#4]@2 [d#4,f#4]@3 [d#4,f#4]@2", O: "[d#4,f#4]@3 [d#4,f#4]@5", P: "[a3,c#4,f#4] [a3,c#4,e4]",
  Q: "[d#4,f#4]!2", R: "[[a3,c#4,e4]@4 [a3,c#4,e4]@3 [a#3,c#4,e4]@5 [a#3,c#4,e4]@4]/2",
  S: "[a3,c#4,e4]@3 [a3,c#4,e4]@5", T: "[b3,d#4,f#4] [b3,d#4]",
  U: "[[b3,e4,f#4]@2 [b3,e4,g#4]@3 ~@2 [g#3,b3,e4]@7 [g#3,b3,f#4] [a3,c#4,e4]@5 [a3,c#4,e4,g#4]@4]/3", // Bsus4 E G#m7 A Amaj7
  V: "[c#4,e4,g#4] [e4,g#4]", W: "[f#4,b4]@3 [d#4,f#4]@5", X: "[e4,a4]@3 [c#4,e4] [c#4,e4]@4",
  Y: "[d#4,f#4,b4] [d#4,f#4,c5]", Z: "[e4,g#4,c#5] [e4,g#4]", AA: "[e4,a4] [e4,a4]@3", AB: "[c#4,e4]!2",
  AC: "[a3,d#4] [a3,d#4,f#4]", AD: "[[b3,d#4,f#4,b4]@4 [a3,d#4]@3 [a3,c#4,e4]@5 [a3,c#4,e4,a4]@4]/2",
})).s("gm_epiano1").gain(0.48)

// chords · epiano2 · "Piano 2"
const epiano2 = note(`<
  ~@3 A@3 B@2 C ~@6 D E ~@6 F G H I J ~@6 K@3 ~ K@3 ~ L M N O P L Q R S M T ~ K@3 ~ K@3 ~ L M N ~@2
>`.pickRestart({
  A: "[[c#5,f#5] [b4,e5]@2 [b4,e5] [g#4,c#5]@2 [g#4,c#5] [g#4,b4]@3 [e4,g#4]@2 [e4,g#4]@3 [d#4,f#4]@2 [d#4,f#4]@2 [d#4,f#4]!2 [e4,g#4] [e4,g#4]@2]/3", // F#5 E5 C#5 G#m E D#m E
  B: "[[d#4,f#4] [e4,g#4]!3 [e4,g#4]@3 [c#4,e4]@2 [c#4,e4]@2 [c#4,e4]!2 [d#4,f#4] [d#4,f#4]@2]/2", // D#m E C#m D#m
  C: "f#4 g#4@2 e4 ~@4", D: "[e5,g#5]@3 [c#5,f#5]@3 [b4,e5]@2", E: "a4 g#4@2 e4 ~@4",
  F: "[c#5,f#5] [b4,e5]!3 [g#4,c#5]!4", G: "[f#4,a4] [c#4,e4]", H: "[f#4,a4]", I: "[c#4,e4,a4] [f#4,a4,c#5]",
  J: "[d#4,f#4]", K: "[[b3,e4,g#4]@7 [g#3,b3,e4]@8 ~@5 g#4@4, ~@5 [a3,c#4,e4]@3]/3", L: "g#4", M: "b4", N: "a4@3 e4@5",
  O: "b4 c5", P: "c#5 g#4", Q: "a4", R: "e4", S: "d#4 f#4", T: "e4 a4",
})).s("gm_epiano2").gain(0.56)

// chords · string ensemble 2 · "strings"
const string_ensemble_2 = note(`<
  ~@4 A B C D A B C D A B C D A B C D A B C D@2 E D E F G H@2 I D J@3 D J@3 D K L M N K L O@2 P@2 M Q J@3 D J@3 D K L M
  ~@2
>`.pickRestart({
  A: "[e4,g#4,b4]", B: "[e4,g#4,c#5]", C: "[e4,a4,c#5]", D: "[d#4,f#4,b4]", E: "[f#4,a4,c#5]",
  F: "[a3,c#4,f#4] [a3,c#4,e4]", G: "[d#4,f#4]", H: "[[a3,c#4,e4]@7 [a#3,c#4,e4]@9]/2", I: "[c#4,e4,a4]",
  J: "[[b3,e4,g#4]@7 [g#3,b3,e4]@8 ~@5 g#4@4, ~@5 [a3,c#4,e4]@3]/3", K: "c#5", L: "g#4", M: "a4", N: "b4 g#4",
  O: "a4/2", P: "b4/2", Q: "b4",
})).s("gm_string_ensemble_2").gain(0.32)

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

// drums · open hat
const open_hat = s("oh").struct("<~@3 A B@4 C@6 B@2 C@6 B C@42 ~@2>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@3 x", C: "~@3 x ~@4",
})).gain(0.4)

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

stack(bass, epiano1, epiano2, string_ensemble_2, hihat, open_hat, crash)

More by Dr. Hook