Strudelify

Give Me the Night

George Benson

KeyE minorTempo112 bpm
0:00/0:00
// Give Me the Night — George Benson
// 112 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/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 1 · "SYNTH BASS"
const bass = note(`<
  ~ A B C D A B A D A B A D A E C D F G A E A D A B A D A E C D F G A E A D H I H I H I H J K L M A B A D C E C D C E C
  N F G A E A D H I H I H I H J K L M C E C D C E C N F G O ~ O ~ O ~ O P A B A D A E C D F G A B A D A E C D F G A B A
  D A E C D F G C E C D C E C N F Q@2
>`.pickRestart({
  A: "e2 ~@2 d2 e2 ~ a1@2 ~@6 a1@2", B: "b1 ~@2 a1 b1 ~ c2 c3 ~@6 d2@2", C: "e2 ~@2 d2 e2 ~ a1 ~@7 a1@2",
  D: "b1 ~@2 a1 b1 ~ c2 ~ a1 ~ b1 ~ e1@2 ~@2", E: "b1 ~@2 a1 b1 ~ c2!2 ~@6 d2@2", F: "a1@3 ~@3 a1 a2 ~@3 a1 e2 ~ d#2 ~",
  G: "d2@3 ~@3 d1!2 ~@4 d3 ~@3", H: "g1@2 g2 g3 g1 ~ f1@3 ~ f2 ~ f1 ~ f2 ~", I: "d1 ~ d2 d3 d1 ~ c1@3 ~ c2 ~ c1 ~ c3 ~",
  J: "d#1@15 ~", K: "c1@7 ~", L: "d#1", M: "d1@7 ~ d1@6 d1 ~", N: "b1 ~@2 a1 b1 ~ c2 ~ a1 ~ b1 ~ e1 ~@3",
  O: "b1@2 ~ b1 d2 ~ e2 ~@9", P: "~@12 e1@3 ~", Q: "[d2@2 ~@4 d1!2 ~@4 b1 d2 e2 e1@2 ~@15]/2",
})).s("gm_synth_bass_1").gain(0.62)

// other · brass section · "BRASS"
const brass_section = note(`<
  ~@4 A ~@3 A ~@13 A ~@8 B C D ~ D A ~@11 D ~ D A ~@8 B C D ~ D A ~@19 B C ~@8 D ~ D A D ~ D A ~@2 D ~ D A D ~ D A ~@2 D
  ~ D A D ~ D A ~@2 D ~ D A D ~ D A ~@3
>`.pickRestart({
  A: "~@10 g5 e5 g5 a5 ~@2", B: "[e4,a4]@5 ~ a4!2 ~@8, ~@3 e4 ~@4", C: "[g4,c5]@5 ~ [g4,c5]!2 ~@8",
  D: "b3 ~@2 b3 d4 ~ e4 ~@9",
})).s("gm_brass_section").gain(0.64).pan(0.3)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@4 A ~@3 B ~@13 A ~@13 A ~@14 A ~@13 A ~@21 C D C D C D C D ~@3 A ~@3 B ~@5 A ~@3 B ~@5 A ~@3 B ~@5 A ~@3 B ~ E@2
>`.pickRestart({
  A: "[b4,e5,g5] ~ a5 ~ [a4,d5,f#5] ~ [b4,e5,g5]@8 ~@2", B: "[b4,d5,g5] ~ a5 ~ [a4,d5,f#5] ~ [g4,b4,e5]@10",
  C: "~@7 b4", D: "a4 ~@5 a4@2 g4 ~@7", E: "[~@12 g5 a5 b5 e6@2 ~@15, ~@15 b4 ~@16]/2",
})).s("gm_string_ensemble_1").gain(0.5)

// other · trombone
const trombone = note(`<
  ~@4 A ~@3 A ~@13 A ~@13 A ~@14 A ~@13 A ~@32 A ~@3 A ~@5 A ~@3 A ~@5 A ~@3 A ~@5 A ~@3 A ~@3
>`.pickRestart({
  A: "~@10 g4 e4 g4 a4 ~@2",
})).s("gm_trombone").gain(0.32).pan(0.7)

// chords · epiano1 · "E.PIANO"
const epiano1 = note(`<
  ~ A B C D E D F B E B G H G I G J K L A B C D E B G H G I G J K L A B C D M ~@6 N@3 O A B C D E B G H G I G J K L A B
  C D M ~@10 E B G H G I G J K L P ~ Q ~ Q ~ Q ~ A B C D E D F B K L A B C D E D F B K L A B C D E D F B K L A B C D E D
  F B K L ~
>`.pickRestart({
  A: "[g3,b3,e4]@5 ~ [c4,e4]@9 ~, ~@6 a3@7 ~@3", B: "[b3,d4,f#4]@5 ~ [b3,e4,g4]@7 ~@3",
  C: "[g3,b3,e4]@5 ~ [a3,c4,e4]@8 ~@2, d4 ~@15", D: "[b3,d4,f#4]@5 ~ [b3,e4,g4]@6 ~@4",
  E: "[g3,b3,e4]@5 ~ [a3,c4,e4]@9 ~", F: "[g3,b3,e4]@5 ~ [c4,e4]@8 ~@2, ~@3 a3@3 ~@2",
  G: "[g3,b3,e4]@5 ~ [a3,c4,e4]@8 ~@2", H: "[d4,f#4]@5 ~ [e4,g4]@7 ~@3, b3@7 ~", I: "[b3,d4,f#4]@2 ~ [b3,e4,g4]@3 ~@2",
  J: "[b3,d4,f#4]@5 ~ [b3,e4,g4]@10", K: "[a1,c4,e4], a3@7 ~",
  L: "~@8 d1@4 [g3,c4,e4]@3 ~, [d2,c4]@13 ~@3, [g3,e4]@11 ~@5", M: "e4@5 ~@11",
  N: "[[d#3,a#3,d4]@15 ~@5 c4@10 ~@2 [d#3,d4]@14 ~@2, g3@23 ~, ~@15 c3@16 ~@17, ~@15 e4@14 ~@3 a#3@12 ~@4]/3", // D#maj7
  O: "[g3,c4,e4]@7 ~, d3@3 ~", P: "b1@2 ~ b1 d2@2 e2 ~@9", Q: "b1@2 ~ b1 d2 ~ e2 ~@9",
})).s("gm_epiano1").gain(0.28)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note(`<
  ~@17 A@3 B ~@10 C@3 B ~@2 D E D F D G H I J K L ~ B ~@10 M@3 B ~@2 N E O F D G H I J K L ~@8 P@3 Q R Q R Q R Q ~ B ~@3
  S ~@2 M@3 B ~@3 S ~@2 C@3 T ~ U ~ V ~ W C@3 B ~@3 S ~@2 X@3
>`.pickRestart({
  A: "[~@12 c6@4 b5@4 a5@4 ~@6 b5@3 ~@15, e5@23 ~@25, a5@8 g5@9 ~@7]/3", B: "~@6 e5 ~ e5 d5 b4 a4 g4@2 e4@2",
  C: "[~@6 c6@2 b5@2 a5@2 ~@3 b5 ~@8, e5@11 ~@13, a5@8 g5@9 ~@7]/3", D: "[a#5,d6]@5 ~ [a5,c6]@8 ~@2",
  E: "[f5,a5]@5 ~ [e5,g5]@8 ~@2", F: "[f5,a5]@5 ~ [e5,g5]@6 ~@4", G: "[f5,a5]@5 ~ [e5,g5]@7 ~@3",
  H: "[a#5,d6]@4 ~@2 [a5,c6]@9 ~", I: "d#5", J: "c5", K: "d#5@15 ~", L: "d5@15 ~",
  M: "[~@12 c6@4 b5@4 a5@4 ~@6 b5!2 ~@16, e5@11 ~@13, a5@8 g5@9 ~@7]/3", N: "[a#5,d6]@5 ~ [a5,c6]@9 ~",
  O: "[a#5,d6]@2 ~ [a5,c6]@4 ~", P: "[~@12 c6@4 b5@4 a5@4 ~@6 b5!2 ~@14 [b5,b6] ~, e5@11 ~@13, a5@8 g5@9 ~@7]/3",
  Q: "[a5,a6] ~@5 [a5,a6] ~ [g5,g6] ~@7", R: "~@14 [b5,b6] ~", S: "~@6 g5 ~ e5 d5 b4 a4 g4@2 e4@2",
  T: "~@6 e5 ~ [e5,d6,e6] d5 [b4,g6] a4 g4@2 e4@2, ~@11 e6@5", U: "~@6 a#6 ~ a6 g6 e6@4 ~@2",
  V: "~@6 g5 ~ e5 d5 [b4,d6] [a4,e6] [g4,g6]@2 [e4,e6]@2", W: "~@10 a#6 ~ a6 g6 e6 ~",
  X: "[~@3 c6 b5 a5 ~ b5 ~@4, e5@11 ~@13, a5@8 g5@9 ~@7]/3",
})).s("gm_string_ensemble_1").gain(0.44).pan(0.6)

// chords · flute
const flute = note(`<
  ~ A ~ A ~ A ~ A ~@9 B C A ~ D ~@9 B C A E F G ~@7 H I J K L M D N ~@8 B C L M D O ~@7 H I J K ~@8 B C P M P M P M P M
  Q R Q R Q R Q R B C Q R Q R Q S Q R B C Q R Q R Q R A T B C Q R Q R Q R A U B V ~
>`.pickRestart({
  A: "[a#4,b4,d#5,e5] ~ [a#4,b4,d#5,e5] ~@13", B: "[b4,d5]@2 [b4,e5] ~ [c5,e5] ~ e5@6 e5@4, ~@6 c5@9 ~",
  C: "[b4,d5] ~ [a4,c5] ~ [a4,c5] ~ [a4,c5]@8 ~@2", D: "[a#4,b4,d#5,e5] ~ [a4,a#4,b4,d#5,e5] ~@13",
  E: "g4@4 f#4@4 d4@7 ~", F: "[a#4,b4,d#5,e5] ~ [a4,a#4,b4,d#5,e5] ~@11 b4 ~", G: "a4 ~@5 a4@2 g4 ~@7", H: "g4 a4",
  I: "a#4@8 c5@7 ~", J: "d5 f5", K: "g5 a5", L: "[a#4,b4,d#5,e5] ~ [a#4,b4,d#5,e5] ~@11 [b4,b5] ~",
  M: "[a4,a5] ~@5 [a4,a5] ~ [g4,g5] ~@7", N: "[g4,g5]@3 ~ f#4@2 ~@2 [d4,d5]@6 ~@2",
  O: "[g4,g5]@3 ~ f#5@2 ~@2 [d4,d5]@6 ~@2, ~@4 f#4 ~@11", P: "~@14 [b4,b5] ~",
  Q: "[a#4,b4,d#5,e5] ~ [a#4,b4,d#5,e5] ~@11 [b3,b4] ~", R: "[a3,a4] ~@5 [a3,a4] ~ [g3,g4] ~@7",
  S: "a4 ~@5 [a3,a4] ~ [g3,g4] ~@7", T: "[g3,g4]@3 ~ [f#3,f#4] ~@3 [d3,d4]@6 ~@2",
  U: "[g3,g4]@3 ~ f#3 ~@3 [d3,d4]@5 ~@3", V: "[b4,d5] ~ [a4,c5] ~ [a4,c5] ~@7 g5 a5 b5 [e5,b5], ~@3 [a4,c5]@4 ~",
})).s("gm_flute").gain(0.35)

// other · trumpet
const trumpet = note(`<
  ~@33 A ~@6 B ~@8 C ~@3 D ~ E ~ D ~ E ~@2 A ~@6 B ~@25 F ~@9 G ~ H ~ I ~ J ~@3 F ~@9 F ~@4 K ~@3 L@2
>`.pickRestart({
  A: "[b4,e5] ~@3", B: "~@6 g5 g#5 a5 c6!2 a5 d6 a5 c6 ~", C: "~@2 d5 b4 d5 e5 ~@4 g5 e5 g5 a5 ~@2",
  D: "~@8 g5 d5 e5 ~ e5 ~@3", E: "~@10 a#4 ~ a4 g4 e4 ~", F: "e6@3 ~@13", G: "e6@3 ~@5 d5 e5!2 d5 g5 e5!2 ~",
  H: "~@10 a#5 ~ a5 g5 e5 ~", I: "~@10 d5 e5 g5 e5 ~@2", J: "~@10 a#5 ~ [g5,a5] ~ e5 ~",
  K: "a#5 ~@3 a5 ~@3 g5 ~@3 e5 ~@3", L: "[~@12 g5 a5 b5 e6@2 ~@15]/2",
})).s("gm_trumpet").gain(0.57).pan(0.3)

// other · whistle
const whistle = note("<~@44 A B C D ~@25 A B C D ~@59>".pickRestart({
  A: "g5@7 ~ a5@7 ~", B: "a#5@7 ~ c6@7 ~", C: "d6@7 ~ f6@7 ~", D: "g6@7 ~ a6@8",
})).s("gm_whistle").gain(0.46).pan(0.6)

// chords · epiano2 · "E.PIANO"
const epiano2 = note("<~@37 A B A C A D E F@2 G H ~@18 A B A C A D E F@2 G H ~@59>".pickRestart({
  A: "[g4,a#4,d5]@5 ~ [f4,a4,c5]@9 ~", B: "[f4,a4,c5]@5 ~ [g4,c5]@8 ~@2, ~@3 e4@3 ~@2",
  C: "[f4,a4,c5]@5 ~ [e4,g4,c5]@7 ~@3", D: "[f4,a4,c5]@5 ~ [e4,g4,c5]@9 ~", E: "[g4,a#4,d5]@5 ~ [f4,a4,c5]@6 ~@4",
  F: "[[g4,a#4]@16 [g4,a#4,e5]@15 ~, [d#3,d#4,d5]@19 ~@13, ~@8 [c3,c4]@5 ~@3]/2", G: "[g4,a#4,d5]@15 ~, [d#3,d#4]@3 ~",
  H: "[g4,c5,e5], [d3,d4]@13 ~@3", // C D
})).s("gm_epiano2").gain(0.5).pan(0.7)

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

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

// drums · clap
const clap = s("cp").struct("<~@19 A@3 B ~@10 A@4 ~@11 A@3 B ~@10 A@4 ~@21 A C A D A C A B E@40 ~>".pickRestart({
  A: "x!4", B: "x ~ x ~ x!3 ~", C: "x ~@3 x ~@3 x ~@3 x ~@2 x", D: "x ~@3 x ~@3 x ~ x ~ x ~@2 x", E: "~ x ~ x",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@94 [~@4 x!4] ~@41>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<A B@43 ~@4 B@25 ~@4 B@10 C@7 D B@40 ~>".pickRestart({
  A: "x!3 ~", B: "x!4", C: "x ~@2 x!2 ~@3 x ~ x ~ x ~ x!2", D: "x ~@2 x!2 ~@3 x ~ x ~ x ~@3",
})).gain(0.64)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@95 A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@2 x!2 ~@12",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct("<~@44 A ~@28 A ~@3 A ~@9 A ~@6 B A ~@7 A ~ A ~@7 A ~ A ~@7 A ~ A ~@7 A C ~>".pickRestart({
  A: "x", B: "~@3 x", C: "~@15 x",
})).gain(0.71)

// drums · cowbell
const cowbell = s("cb").struct("<~ A@43 ~@4 A@25 ~@4 A@10 B@8 A@40 ~>".pickRestart({
  A: "x!4", B: "~ x ~ x",
})).gain(0.5)

// drums · bongos
const bongos = s("bongo:18").struct(`<
  ~ A@16 ~@2 A@12 ~@2 A@4 ~@11 A@12 ~@2 A@4 ~@11 A@8 ~@10 A@8 ~@2 A@8 ~@2 A@8 ~@2 A@8 ~@3
>`.pickRestart({
  A: "~ x ~ x",
})).gain(1.13)

// drums · congas
const congas = s("conga:13").struct("<~@87 A@17 B A@9 B A@9 B A@9 B ~>".pickRestart({
  A: "~@3 x ~@6 x ~@5", B: "~@3 x ~@6 x ~ x!3 ~",
})).gain(1.6)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~ A@16 ~@2 A@12 ~@2 A@4 ~@11 A@12 ~@2 A@4 ~@11 A@8 ~@2 B@8 A@8 B@2 A@8 B@2 A@8 B@2 A@8 B@2 ~
>`.pickRestart({
  A: "x ~@2 x ~@4 x ~@2 x ~@4", B: "x!2",
})).gain(1.6)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~@87 A@8 ~ A@2 ~ A@3 ~@4 A@2 ~ A@3 ~@4 A@2 ~ A@3 ~@4 A@2 ~ A@3 ~@4
>`.pickRestart({
  A: "~@3 x ~@3 x",
})).gain(1.6)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@87 A B C D C B C E F@40 ~>".pickRestart({
// … 8 more lines

More by George Benson