Strudelify

In the Middle of the Night

Magic Affair

KeyC minorTempo141 bpm
0:00/0:00
// In the Middle of the Night — Magic Affair
// 141 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(141/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · "SYN BASS 1"
const bass = note(`<
  ~@5 A B C D A B C D A B C ~ E@3 F G@3 H E@3 F G@3 H A B C D A B C D A B C D A B C ~ E@3 F G@3 H E@3 F G@3 H A B C D A
  B C D A B C D A B C ~@9 A B C D A B C D A B C D ~@5
>`.pickRestart({
  A: "c2 ~ c2 ~ c2 ~ c2 eb2 ~ eb2 ~ eb2!2 ~ eb2 ~", B: "bb1 ~ bb1 ~ bb1 ~ bb1 c2 ~ c2 ~ c2!2 ~ c2 ~",
  C: "c2 ~ c2 ~ c2 ~ c2 ab1 ~ ab1 ~ ab1!2 ~ ab1 ~", D: "d2 ~ d2 ~ d2 ~ d2 c2 ~ c2 ~ c2!2 ~ c2 ~",
  E: "c2 ~ c2 ~ c2@2 c2!2 ~ c2 ~ c2!2 ~ c2 ~", F: "c2 ~ c2 ~ c2@2 c2!2 ~ eb2 ~ eb2 d2 ~ d2 ~",
  G: "ab1 ~ ab1 ~ ab1@2 ab1!2 ~ ab1 ~ ab1!2 ~ ab1 ~", H: "ab1 ~ ab1 ~ ab1@2 ab1!2 ~ ab1 ~ ab1 bb1 ~ bb1 ~",
})).s("gm_synth_bass_1").gain(0.39)

// other · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~ A B A C A B A C D E D F D E D F ~@16 A B A C D E D F D E D F A B A C ~@16 A B A C D E D F D E D F A B A C ~@8 A B A
  C A B A C A B A C A B A C ~
>`.pickRestart({
  A: "~@2 [c4,c5] ~ [g4,g5] ~ [eb4,eb5] [ab3,ab4] ~ [ab3,ab4] ~ [ab3,ab4] [eb4,eb5] ~ [ab3,ab4] ~", // C G Eb Ab Eb Ab
  B: "~@2 [bb3,bb4] ~ [d4,d5] ~ [bb3,bb4] [c4,c5] ~ [c4,c5] ~ [c4,c5] [g4,g5] ~ [c4,c5] ~", // Bb D Bb C G C
  C: "~@2 [d4,d5] ~ [f4,f5] ~ [d4,d5] [eb4,eb5] ~ [eb4,eb5] ~ [eb4,eb5] [d4,d5] ~ [c4,c5] ~", // D F D Eb D C
  D: "~@2 c5 ~ g5 ~ eb5 ab4 ~ ab4 ~ ab4 eb5 ~ ab4 ~", E: "~@2 bb4 ~ d5 ~ bb4 c5 ~ c5 ~ c5 g5 ~ c5 ~",
  F: "~@2 d5 ~ f5 ~ d5 eb5 ~ eb5 ~ eb5 d5 ~ c5 ~",
})).s("gm_synth_brass_1").gain(0.22)

// other · brass section · "BRASS 1"
const brass_section = note(`<
  ~@2 A B C D ~@2 E F G H I F G J@2 ~@19 E F G H I F G K L ~@2 A B ~@19 E F G H I F G J@2 ~ A M ~@2 N D O ~@2 P Q ~@10 K
  L ~@5
>`.pickRestart({
  A: "~@4 [c5,eb5]@2 ~@2 [bb4,d5]@4 [g4,c5] ~ [bb4,d5]@2", B: "~@2 [c5,eb5]@5 ~@9", C: "~@6 c5 ~",
  D: "c5@4 bb4 ~ g4@4 f4 [f4,g4] eb4@4", E: "~@12 eb4@2 f4 ~", F: "g4 ab4 g4 f4 eb4 ~ eb4 bb4",
  G: "~@2 bb4@3 ~ ab4@4 g4 ~ g4@2 ~@2", H: "g4@2 ab4 ~ g4@2 f4@2 eb4@4 ~@2 f4@2", I: "~@2 g4@3 ~ g4@2 ~@4 eb4@2 f4 ~",
  J: "[g4@2 ab4 ~ g4@2 ab4 ~ g4@2 ab4@2 ~@2 g4@4 ~@14]/2", K: "g4@2 ab4 ~ g4@2 ab4 ~ g4@2 f4@2 ~@2 f4@2",
  L: "~ eb4@2 ~@5", M: "~@2 [c5,eb5]@7 ~@7", N: "~@10 c5@5 ~", O: "~@2 bb3@2 c4@2 eb4@5 ~@5",
  P: "~@2 c5 ~ c5 ~ eb5@6 d5@2 c5 ~", Q: "c5@15 ~",
})).s("gm_brass_section").gain(0.5)

// chords · pad warm · "WARM PAD"
const pad_warm = note("<A@8 B@8 C ~@15 A@8 D E@8 ~@15 A@8 F@5 G@7 B@8 D G@7 H@5 ~>".pickRestart({
  A: "[~@15 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@7 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@9 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@7 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@2]/8", // Cm Ab Bb Cm Ab Bb Cm Ab …
  B: "[~@6 [eb4,g4,c5]@9 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@7 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@9 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@7 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@2]/8", // Cm Ab Bb Cm Ab Bb Cm Ab …
  C: "~@6 [eb4,g4,c5]@9 ~", D: "~@6 [eb4,g4,c5]@9 [eb4,g4,c5]",
  E: "[~@7 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@7 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@9 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@7 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@9 ~]/8", // Ab Bb Cm Ab Bb Cm Ab Bb …
  F: "[~@6 [eb4,g4,c5]@9 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@7 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@9 [eb4,g4,c5]]/5", // Cm Ab Bb Cm Ab Bb Cm
  G: "[~@7 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@7 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@9 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@7 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@2]/7", // Ab Bb Cm Ab Bb Cm Ab Bb …
  H: "[~@6 [eb4,g4,c5]@9 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@7 [eb4,g4,c5]@8 [eb4,ab4,c5]@8 [f4,bb4,d5]@8 [eb4,g4,c5]@9 ~]/5", // Cm Ab Bb Cm Ab Bb Cm
})).s("gm_pad_warm").gain(0.27)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@5 A B C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D ~@16 A B C D A B C D A B C D A B C D A B C D A B C D
  A B C D A B C D A B C D ~@5
>`.pickRestart({
  A: "c2 c3 c2 c3 eb2 eb3 eb2 eb3", B: "bb1 bb2 bb1 bb2 c2 c3 c2 c3", C: "c2 c3 c2 c3 ab1 ab2 ab1 ab2",
  D: "d2 d3 d2 d3 c2 c3 c2 c3",
})).s("gm_lead_2_sawtooth").gain(0.32)

// other · synth drum
const synth_drum = note(`<
  A ~@4 B@7 C B@3 ~ B@7 D B@7 E B@3 F B@3 C B@3 F B@3 ~ B@3 C B@3 D B@7 E B@3 F B@3 C B@3 F B@3 ~@5 B@3 ~ B@3 C B@3 F
  ~@7 G H
>`.pickRestart({
  A: "bb1 ~@15", B: "bb1 ~@3 bb1 ~@3 bb1 ~@3 bb1 ~@3", C: "bb1 ~@3 bb1 ~@3 bb1 ~@3 bb1 ~ bb1 ~",
  D: "bb1 ~@3 bb1 ~@3 bb1 ~ bb1 ~ bb1!4", E: "bb1 ~@3 bb1 ~@3 bb1 ~@7", F: "bb1 ~@3 bb1!12", G: "bb1!16",
  H: "~@8 bb1 ~@7",
})).s("gm_synth_drum").gain(0.4)

// other · music box
const music_box = note("<~@57 [c7 g6 eb6 c6 c7 g6 eb6 c6]!4 [c7 ab6 eb6 c6 c7 ab6 eb6 c6]!4 ~@41>")
  .s("gm_music_box").gain(0.18)

// drums · kick
const kick = s("bd").struct(`<
  A ~@4 B@7 C B@3 ~ B@7 D B@7 E B@3 F B@3 C B@3 F B@3 ~ B@3 C B@3 D B@7 E B@3 F B@3 C B@3 F B@3 ~@5 B@3 ~ B@3 C B@3 F
  ~@7 G H
>`.pickRestart({
  A: "x", B: "x!4", C: "x ~ x ~ x ~ x!2", D: "x ~@3 x ~@3 x ~ x ~ x!4", E: "x!3 ~", F: "x ~@3 x!12", G: "x!16",
  H: "~ x",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@5 A@3 B A@7 ~ C@12 ~@8 A@7 B A@3 ~ C@12 ~@8 A@7 B A@3 ~@9 A@7 B ~@9>".pickRestart({
  A: "~ x ~ x", B: "~@4 x!12", C: "~@4 x ~@2 x ~ x ~@2 x ~@2 x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@5 A@11 ~ A@31 ~ A@31 ~@5 B C B D A@12 B C B@2 ~>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", B: "x!4", C: "x!2 ~@2", D: "x",
})).gain(0.27)

// drums · open hat
const open_hat = s("oh").struct("<~@5 A@11 ~ A@31 ~ A@31 ~@5 A B A ~ A@13 B A@2 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~ x!3 ~ x!3 ~",
})).gain(0.27)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@8 B ~@6 C B ~@7 B ~@2 C B ~@11 B ~@6 C B ~@7 B ~@2 C B ~@6 C ~@3 C B ~@2 C ~@4 B ~@16
>`.pickRestart({
  A: "~@2 x!2", B: "x", C: "~@3 x",
})).gain(0.22)

// drums · tambourine
const tambourine = s("tb").struct("<~@5 A@11 ~@17 A@15 ~@17 A@15 ~@9 A@12 ~@5>".pickRestart({
  A: "x!16",
})).gain(0.18)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@17
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!16
  ~@16
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!16
  ~@41
>`).gain(0.18)

stack(
  bass, synth_brass_1, brass_section, pad_warm, lead_2_sawtooth, synth_drum, music_box, kick, snare, hihat, open_hat,
  crash, tambourine, shaker
)

More by Magic Affair