Strudelify

Help Me Make It Through the Night

Kris Kristofferson

KeyC majorTempo164 bpm
0:00/0:00
// Help Me Make It Through the Night — Kris Kristofferson
// 164 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 25.
setcpm(164/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
const bass = note(`<
  ~@4 A B C D E F G H I J K@2 L D M N O C@3 P F G Q I K@2 R S B C D E F@3 T C U@2 V W Q@2 X Y Z AA AB C@3 E F G H I J
  K@2 S C AC N AD C@3 AE F G H I K R K AF D C B AE F@2 AG AH C@2 U AI Q H AJ I AK AL AA AM C D C AN F AO Q AP J@2 K AQ
  AR AS D AT
>`.pickRestart({
  A: "~@4 g1@3 ~ a1@4 b1@4", B: "c2@5 ~@3 g1@4 ~@4", C: "c2 ~ g1 ~", D: "c2@4 ~@4 g1@5 ~@3",
  E: "c2@4 ~@3 c2 d2@3 ~ e2@3 ~", F: "f2 ~ c2 ~", G: "f2@4 ~@3 f2 e2@7 ~", H: "d2@5 ~@3 a1@4 ~@4",
  I: "d2@4 ~@4 a1@3 ~ d2@3 ~", J: "g2@5 ~@3 d2@4 ~@4", K: "g2 ~ d2 ~", L: "g2@4 ~@4 e2@4 d2@3 ~",
  M: "c2@5 ~@3 g1@4 a1@4", N: "c2@3 ~@13", O: "~ g1 a1 b1", P: "c2@4 ~@3 c2 c2@3 ~ d2@3 ~", Q: "d2 ~ a1 ~",
  R: "g2@4 ~@4 d2@5 ~@3", S: "g2@2 ~@2 g1@3 ~ a1@3 ~ b1@3 ~", T: "f2@4 ~@4 c2@3 ~ f2@3 ~", U: "c2@5 ~@3 g1@5 ~@3",
  V: "c2@4 ~@3 c2 g1@3 ~ c#2@4", W: "d2@5 ~@3 a1@5 ~@3", X: "d2@4 ~@4 a1@3 ~ d2@4", Y: "g2@5 ~@3 f2@4 ~@4",
  Z: "d2@4 ~@4 b1@3 ~ a1@4", AA: "g1 ~@3", AB: "~@4 g1@3 ~ a1@3 ~ b1@3 ~", AC: "c2@4 ~@4 g1@3 ~ a1@3 ~",
  AD: "~@4 g1@4 a1@3 ~ b1@3 ~", AE: "c2@5 ~@2 c2 d2@3 ~ e2@3 ~", AF: "g2@4 ~@3 g2 d2@3 ~ g2@3 ~",
  AG: "f2@4 ~@4 c2@5 ~@3", AH: "f2@4 ~@3 f2 e2@3 ~ d2@4", AI: "c2@4 ~@3 c2 g1@4 c#2@3 ~", AJ: "d2@4 ~@4 a1@5 ~@3",
  AK: "g2@5 ~@3 f2@5 ~@3", AL: "d2@5 ~@3 b1@4 a1@4", AM: "~@4 g1@4 a1@3 ~ b1@4", AN: "c2@4 ~@4 d2@4 e2@3 ~",
  AO: "f2@4 ~@4 e2@7 ~", AP: "d2@4 ~@4 a1@4 d2@3 ~", AQ: "g2@5 ~@3 d2@4 g2@3 ~", AR: "c2@4 ~@4 g1@3 ~ c2@3 ~",
  AS: "f2@5 ~@3 c2@4 f2@3 ~", AT: "c2@3 ~",
})).s("gm_fretless_bass").gain(0.32)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~ A@2 B ~ C D E@2 F@2 G@2 H@4 C D I ~ C D E@2 J@2 K@2 H@4 C D L@2 M@4 N@4 O@4 P@2 Q ~ C D E@2 F@2 K@2 R@4 C D S ~ C D
  E@2 F@2 K@2 H@4 C D T@2 M@4 U@4 V@4 W@2 Q ~ C D E@2 F@2 K@2 H@4 X Y Z AA
>`.pickRestart({
  A: "[[e4,e5]@15 ~ [f4,f5]@15 ~, [g3,c4]@31 ~]/2", B: "[c4,e4,g4,g5] ~@3", C: "[g3,c4,e4]@15 ~", D: "[g3,c4,f4]@15 ~",
  E: "[[g3,c4,e4]@31 ~]/2", F: "[f4@23 ~ e4@7 ~, [a3,c4]@31 ~]/2", G: "[a3,d4,f4]/2", H: "[[g3,b3,d4]@63 ~]/4",
  I: "[g3,c4,e4]@3 ~@13", J: "[f4@24 e4@7 ~, [a3,c4]@31 ~]/2", K: "[[a3,d4,f4]@31 ~]/2",
  L: "[[g3,c4,e4]@8 [g3,a#3,c4,e4]@23 ~]/2", M: "[[a3,c4,f4]@63 ~]/4", N: "[[g3,c4,e4]@63 ~]/4",
  O: "[[f#3,a3,c4,d4]@63 ~]/4", P: "[[g3,b3,d4]@31 ~]/2", Q: "[f3,g3,b3,d4]@3 ~@13", R: "[g3,b3,d4]/4",
  S: "[g3,c4,e4] ~@3", T: "[[g3,c4,e4]@7 ~ [g3,a#3,c4,e4]@24]/2", U: "[[g3,c4,e4]@31 ~]/4", V: "[f#3,a3,c4,d4]/4",
  W: "[g3,b3,d4]/2", X: "[g3,c4,e4]", Y: "[a3,c4,f4]@15 ~", Z: "[g3,c4,e4]@3 ~@5 [g3,b3,d4]@3 ~@5",
  AA: "[g3,c4,e4]@3 ~", // C
})).s("gm_synth_strings_1").gain(0.08)

// other · string ensemble 1
const string_ensemble_1 = note("<~@37 A@4 B@4 C@7 ~@33 A@4 D@4 C@7 ~@17>".pickRestart({
  A: "[[a4,a5]@63 ~]/4", B: "[g4, g5@25 ~@39]/4", C: "[[f#4,f#5]@9 [b4,b5]@5 ~@2]/7", D: "[g4, g5@7 ~@9]/4",
})).s("gm_string_ensemble_1").gain(0.17)

// other · electric guitar clean
const electric_guitar_clean = note("<~@67 A B@2 ~ C D E F G H@3 I J@2 ~@35>".pickRestart({
  A: "~@4 g2@4 c3@3 ~ e3@2 ~@2", B: "[e3@2 ~@2 e3@2 ~@2 d3@2 ~ c3 a2@2 g2@16 ~@2]/2", C: "~@7 g2 c3@3 ~ e3@2 ~@2",
  D: "e3@3 ~ e3@3 ~ d3@2 ~ c3@3 a2 ~", E: "c3", F: "a2", G: "~@7 d3 d3@3 ~ e3@3 ~",
  H: "[f3@3 ~ e3@4 d3@2 ~ e3 c3@2 b2@20 ~@14]/3", I: "~@6 d3 ~ f3@2 d3 ~ f3@4",
  J: "[e3 f3 e3 ~ d3 e3 ~ d3 c3@2 ~ b2 g2@2 c3@18]/2",
})).s("gm_electric_guitar_clean").gain(0.42).pan(0.6)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A@3 ~@6 B@2 ~ C D ~@10 E@3 ~ C F ~@4 G ~@13 C H ~@7 I J ~ C F ~@3 K ~@7 I L ~ C F ~@4 G ~@13 M N ~@5 O P@3 ~ C D ~@6
>`.pickRestart({
  A: "[~@6 c4@4 ~@2 c4@7 ~@9 g3@3 ~@2 g4@13 ~@2, ~@3 g3@7 g3@9 g3@9 ~@3 g3@14 ~@3, ~@4 e4@11 ~@5 c4@7 c4@5 ~@16, ~@11 f4@4 ~@9]/3",
  B: "[~ f4@5 ~@3 e4@4 ~@4 f4@9 ~@6, ~@15 d3@10 ~@7]/2", C: "~@3 [d3,g3,b3,g4]", D: "~ b3 ~ b3",
  E: "[~@17 f4@4 ~@4 e4@4 ~@4 f4@11 ~@4, ~@15 f3@6 ~@10 d3@13 ~@4]/3", F: "~@4 b3@5 ~@3 b3@4", G: "~@3 a#3",
  H: "~@4 b3@5 ~@2 b3@4 ~", I: "~ f4@4 ~@4 e4@4 ~@3", J: "~ f4@10 ~@5", K: "~@5 e3@2 ~", L: "~ f4@11 ~@4", M: "~@3 b3",
  N: "~@4 b3@4 ~@3 b3@3 ~@2, ~@5 d3@2 ~", O: "~@3 f4", P: "[~@15 f3@5 ~@4 e4@5 ~@2 d3@3 ~@14]/3",
})).s("gm_acoustic_guitar_steel").gain(0.08).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel_2 = note(`<
  A@5 B C D@2 E F G H I J K L B M N ~ D C B@2 E F G H O J L K B M D P Q@2 E@2 D@2 B@2 R@4 O J S ~ B M D B E F H@2 O J K
  L B M N ~ D C D@2 E F G H O J K L D M D T E Q E Q B D@2 B R@3 U V W S ~ X M B D Y F G H Z J AA AB B E AC AD
>`.pickRestart({
  A: "[~@16 [c4,e4]@13 ~@3 [c4,f4]@13 ~@3 [g3,c4,e4]@28 ~@4, ~@15 [c3,e3]@15 ~ [c3,e3]@15 ~ [c3,e3]@29 ~@4, ~@16 g3@15 ~ g3@15 ~@33]/5", // C F5 C
  B: "[e3,g3,c4,e4]@4 [e3,g3,c4,e4]@3 [e3,g3,c4,e4]@4 [e3,g3,c4,e4] [e3,g3,c4,e4]@2 ~@2", // C
  C: "[e3,g3,c4,f4]@4 [e3,g3,c4,f4]@3 [e3,g3,c4,f4]@4 [e3,g3,c4,f4]!2 ~@3", // C
  D: "[e3,g3,c4,e4]@4 [e3,g3,c4,e4]@3 [e3,g3,c4,e4]@4 [e3,g3,c4,e4]!2 ~@3", // C
  E: "[f3,a3,c4,f4]@4 [f3,a3,c4,f4]@3 [f3,a3,c4,f4]@4 [f3,a3,c4,f4]!2 ~@3", // F
  F: "[f3,a3,c4,f4]@4 [f3,a3,c4,f4]@3 [f3,a3,c4,f4] [f3,a3,c4,f4]@2 ~ [f3,a3,c4,e4]@4 ~", // F Fmaj7
  G: "[d3,a3,d4,f4]@4 [d3,a3,d4,f4]@3 [d3,a3,d4,f4]@4 [d3,a3,d4,f4]!2 ~@3", // Dm
  H: "[d3,a3,d4,f4]@4 [d3,a3,d4,f4]@3 [d3,a3,d4,f4]@4 [d3,a3,d4,f4] [d3,a3,d4,f4]@2 ~@2", // Dm
  I: "[d3,g3,b3,g4]@4 [d3,g3,b3,g4]@3 [d3,g3,b3,g4] [d3,g3,b3,g4]@2 ~ [d3,g3,c4,g4]@3 ~@2", // G Csus2
  J: "[d3,g3,d4,g4]@4 [d3,g3,d4,g4]@3 [d3,g3,d4,g4]@4 [d3,g3,d4,g4] [d3,g3,c4,g4]@2 ~@2", // G5 Csus2
  K: "[d3,g3,b3,g4]@4 [d3,g3,b3,g4]@3 [d3,g3,b3,g4]@4 [d3,g3,b3,g4] [d3,g3,b3,g4]@2 ~@2", // G
  L: "[d3,g3,b3,g4]@4 [d3,g3,b3,g4]@3 [d3,g3,b3,g4]@4 [d3,g3,b3,g4]!2 ~@3", // G
  M: "[e3,g3,c4,f4]@4 [e3,g3,c4,f4]@3 [e3,g3,c4,f4]@4 [e3,g3,c4,f4] [e3,g3,c4,f4]@2 ~@2", N: "[e3,g3,c4,e4]@3 ~@13",
  O: "[d3,g3,b3,g4]@4 [d3,g3,b3,g4]@3 [d3,g3,b3,g4]!2 ~@2 [d3,g3,c4,g4]@4 ~", // G Csus2
  P: "[e3,g3,a#3,c4,e4]@4 [e3,g3,a#3,c4,e4]@3 [e3,g3,a#3,c4,e4]@4 [e3,g3,a#3,c4,e4]!2 ~@3", // C7
  Q: "[f3,a3,c4,f4]@4 [f3,a3,c4,f4]@3 [f3,a3,c4,f4]@4 [f3,a3,c4,f4] [f3,a3,c4,f4]@2 ~@2", // F
  R: "[d3,a3,c4,d4,f#4]@4 [d3,a3,c4,d4,f#4]@3 [d3,a3,c4,d4,f#4]@4 [d3,a3,c4,d4,f#4]!2 ~@3", S: "[d3,g3,b3,g4] ~@3",
  T: "[e3,g3,c4,e4]@3 ~ [e3,g3,a#3,c4,e4]@3 [e3,g3,a#3,c4,e4]@4 [e3,g3,a#3,c4,e4]!2 ~@3", // C C7
  U: "[d3,a3,c4,d4,f#4]@4 [d3,a3,c4,d4,f#4]@3 [d3,a3,c4,d4,f#4]@4 [d3,a3,c4,d4,f#4] [d3,a3,c4,d4,f#4]@2 ~@2", // D7
  V: "[d3,g3,b3,g4]@4 [d3,g3,b3,g4]@3 [d3,g3,b3,g4]!2 ~ d3 [g3,c4,g4] [d3,g3,c4,g4]@3 ~, ~@11 b3@4 ~", // G C5 Csus2
  W: "[d3,g3,d4,g4]@4 [d3,g3,d4,g4]@2 ~ [g3,d4,g4]@4 [d3,g3,d4,g4] [d3,g3,c4,g4]@2 ~@2, ~@3 d3@2 ~@3", // G5 Csus2
  X: "[e3,g3,c4,e4]@4 [e3,g3,c4,e4]@3 [e3,g3,c4,e4]@3 e3 [g3,c4,e4] [e3,g3,c4,e4] ~@3", // C
  Y: "[f3,a3,c4,f4]@4 [f3,a3,c4,f4]@2 ~ [a3,c4,f4]@4 [f3,a3,c4,f4] [f3,a3,c4,f4]@2 ~@2, ~@3 f3@2 ~@3", // F
  Z: "[d3,g3,b3,g4]@4 [d3,g3,b3,g4]@2 d3 [g3,b3,g4] [d3,g3,b3,g4] ~@2 [d3,g3,c4,g4]@4 ~", // G Csus2
  AA: "[d3,g3,b3,g4]@4 [d3,g3,b3,g4]@2 ~ [g3,b3,g4]@4 [d3,g3,b3,g4] [d3,g3,b3,g4]@2 ~@2, ~@3 d3@2 ~@3", // G
  AB: "[d3,g3,b3,g4]@4 [d3,g3,b3,g4]@3 [d3,g3,b3,g4]@3 d3 [g3,b3,g4] [d3,g3,b3,g4]@2 ~@2", // G
  AC: "[e3,g3,c4,e4]@4 ~@4 [d3,g3,b3,g4]@5 ~@3", AD: "[e3,g3,c4,e4]@7 ~",
})).s("gm_acoustic_guitar_steel").gain(0.1).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@3 A@18 B@15 C A@16 B@14 A@2 B@15 C A@31 D>".pickRestart({
  A: "x!2", B: "x ~@6 x!2 ~@7", C: "x ~@6 x!2 ~@6 x", D: "x",
})).gain(0.45)

// drums · rim
const rim = s("rim").struct("<~@21 A@15 ~@17 B@13 C ~@2 B@6 D B@8 E ~@32>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@6 x!2 ~@3", D: "~ x ~@2", E: "~@3 x!2 ~@11",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@36 [~@11 x!2 ~@3] [~ x ~ x]!14 ~@33 [~@11 x!2 ~@3] [~ x ~ x]!14 ~@18>").gain(0.4)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@5 A@14 ~@2 A@12 B@3 C ~@16 A@14 ~@2 A@12 B@3 C ~@16 A@14 ~@2>".pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x", B: "~@7 x ~@7 x", C: "~@3 x ~@3 x ~@8",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@40 A ~@3 A ~@3 A ~@39 A ~@3 A ~@3 A ~@20>".pickRestart({
  A: "~@3 x",
})).gain(0.05)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ A ~@13 A ~ A ~@14 B@2 ~@15 A ~@13 A ~ A ~@14 B@2 ~@15 A ~@13 A ~@2
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A ~@5 A ~@7 A ~ A ~@14 B A ~@13 A ~ A ~@5 A ~@7 A ~ A ~@14 B A ~@15 A ~@5 A ~@7 C A
>`.pickRestart({
  A: "x", B: "~@15 x", C: "x!2",
})).gain(0.2)

// drums · ride
const ride = s("rd").struct(`<
  ~@37
  [~@4 x ~@2 x!2 ~@3 x ~@2 x]
  [x ~@3 x ~@2 x!2 ~@3 x ~@2 x]!13
  ~@34
  [~@4 x ~@2 x!2 ~@3 x ~@2 x]
  [x ~@3 x ~@2 x!2 ~@3 x ~@2 x]!13
  ~@18
>`).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~@5 A@14 ~@2 B@15 C D@14 E ~ A@14 ~@2 B@15 C D@14 E ~ A@14 ~@2>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "x!4", E: "x",
})).gain(0.3)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@37 [~@3 x ~@3 x ~@3 x ~@3 x]!14 ~@34 [~@3 x ~@3 x ~@3 x ~@3 x]!14 ~@18>")
  .gain(0.15)

stack(
  bass, synth_strings_1, string_ensemble_1, electric_guitar_clean, acoustic_guitar_steel, acoustic_guitar_steel_2, kick,
  rim, snare, hihat, hihat_soft, mid_tom, open_hat, crash, ride, tambourine, tambourine_soft
)

More by Kris Kristofferson