Strudelify
Another Night cover art

1995 · Another Night

Another Night

Real McCoy

KeyG majorTempo126 bpm
0:00/0:00
// Another Night — Real McCoy
// 126 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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.

// chords · piano · "Electric Piano"
const piano = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@8 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
>`.pickRestart({
  A: "[[a3,c4,e4]@3 ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,d4,f4]@3 ~ [a3,d4]@2 [g3,b3,d4]@4 [g3,b3,d4]@4 [b3,d4] ~ [g3,c4,e4]@3 ~ [g3,c4,e4]@3 ~, ~@12 f4 ~@9 g3@2 ~@8]/2", // Am Dm D5 G Bm C
  B: "[[a3,c4,e4]@3 ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,d4,f4]@3 ~ [a3,d4]@2 [g3,b3,d4]@4 [g3,d4]@3 ~ [g3,c4,e4]@3 ~ [g3,c4,e4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~, ~@12 f4 ~@5 b3@4 ~@10]/2", // Am Dm D5 G G5 C G
})).s("gm_piano").gain(0.36)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2 A@2 B@2 A@2 B@2 C@8 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
>`.pickRestart({
  A: "[e4@5 ~@3 f4@4 ~@2 d4@7 ~@3 e4@5 ~@3]/2", B: "[e4@5 ~@3 f4@4 ~@2 d4@6 ~@2 e4@4 ~@2 d4@3 ~]/2",
  C: "a4 g4 c5 g4 e5 g4 c5 g4 d5 ~ a4 ~ a4 ~@3",
})).s("gm_string_ensemble_1").gain(0.15)

// other · lead 2 sawtooth · "Saw Tooth"
const lead_2_sawtooth = note(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B ~@24 A B A B A B A B ~@4 A B A B ~@24 A B A B A B A B C D C E C D
  C F ~@8 A B A B A ~@3
>`.pickRestart({
  A: "a4 ~ e5 ~ d5 e5 ~ a4 ~ a4 e5 ~ d5 ~ e5 ~", B: "g4 ~ d5 ~ c5 d5 ~ g4 ~ g4 d5 ~ c5 ~ b4 ~",
  C: "~@2 a1@3 ~ a1@3 ~ a1@3 ~ a1@2", D: "~@2 g1@3 ~ g1@3 ~ g1@3 ~ g1@2", E: "~@2 f1@3 ~ f1@3 ~ g1@3 ~ g1@2",
  F: "~@2 f1@3 ~ f1@3 ~ g1@3 ~ g1 ~",
})).s("gm_lead_2_sawtooth").gain(0.41)

// other · lead 2 sawtooth · "Saw Tooth" · soft notes
const lead_2_sawtooth_soft = note(`<
  ~@121
  [g4 ~ d5 ~ c5 d5 ~ g4 ~ g4 d5 ~ c5 ~ b4 ~]
  [a4 ~ e5 ~ d5 e5 ~ a4 ~ a4 e5 ~ d5 ~ e5 ~]
  [g4 ~ d5 ~ c5 d5 ~ g4 ~ g4 d5 ~ c5 ~ b4 ~]
>`).s("gm_lead_2_sawtooth").gain(0.15)

// bass · synth bass 2 · "Bass Line (Syn Bass2)"
const bass = note(`<
  ~@8 A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@4 A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D C E C D C F ~@4 A B A B A B A B A B A B
>`.pickRestart({
  A: "a1@2 ~@2 a1@2 ~ d2 ~@2 d2 ~@3 d2 ~", B: "g1@2 ~@2 g1@2 ~ c2 ~@2 c2 ~ b1 ~ b1 ~",
  C: "~@2 a1@3 ~ a1@3 ~ a1@3 ~ a1@2", D: "~@2 g1@3 ~ g1@3 ~ g1@3 ~ g1@2", E: "~@2 f1@3 ~ f1@3 ~ g1@3 ~ g1@2",
  F: "~@2 f1@3 ~ f1@3 ~ g1@3 ~ g1 ~",
})).s("gm_synth_bass_2").gain(0.46)

// chords · rock organ
const rock_organ = note(`<
  ~@20 A B A B A B A B ~@32 A B A B A B A B ~@24 A B A B A B A B ~@16 A B A B A C ~@2
>`.pickRestart({
  A: "[a4,c5,e5] ~@3 [a4,c5,e5] ~@2 [a4,c5,e5] ~@2 [a4,c5,e5] ~@5", // Am
  B: "~@2 [g4,b4,d5] ~ [g4,b4,d5] ~@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // G C G
  C: "~@2 [g4,b4,d5] ~ [g4,b4,d5] ~@11", // G
})).s("gm_rock_organ").gain(0.41)

// chords · rock organ · soft notes · C G Am G C G
const rock_organ_soft = note(`<
  ~@121
  [~@7 [g4,c5,e5] ~@2 [g4,c5,e5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~]
  [[a4,c5,e5] ~@3 [a4,c5,e5] ~@2 [a4,c5,e5] ~@2 [a4,c5,e5] ~@5]
  [~@2 [g4,b4,d5] ~ [g4,b4,d5] ~@2 [g4,c5,e5] ~@2 [g4,c5,e5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~]
>`).s("gm_rock_organ").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~@8 [x!4]!100 ~@4 [x!4]!12>").gain(0.51)

// drums · snare
const snare = s("sd").struct(`<
  ~@11 A B C@3 B C@3 ~@4 B C@2 D B C@3 B C@3 B C@3 B C@2 A B C@3 B C@2 A B C@3 B C@3 ~@4 B C@2 A B C@3 B C@3 B C@3 B C@3
  B C@3 B C@2 A B C@3 B C@3 B C@3 B C@3 ~@4 B C@2 A B C@3 B C@3
>`.pickRestart({
  A: "x!16", B: "~@4 x ~@7 x ~ x!2", C: "~ x ~ x", D: "~@4 x ~@7 x!4",
})).gain(0.41)

// drums · clap
const clap = s("cp").struct("<~@12 [~ x ~ x]!8 ~@4 [~ x ~ x]!36 ~@4 [~ x ~ x]!44 ~@4 [~ x ~ x]!12>").gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~@12 [x!16]!8 ~@4 [x!16]!84 ~@4 [x!16]!12>").gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<~@8 [~ x ~ x ~ x ~ x]!12 ~@4 [~ x ~ x ~ x ~ x]!84 ~@4 [~ x ~ x ~ x ~ x]!12>")
  .gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct("<~@12 [x!16]!8 ~@4 [x!16]!36 ~@4 [x!16]!44 ~@4 [x!16]!12>").gain(0.36)

stack(
  piano, string_ensemble_1, lead_2_sawtooth, lead_2_sawtooth_soft, bass, rock_organ, rock_organ_soft, kick, snare, clap,
  hihat, open_hat, tambourine
)

More by Real McCoy