Strudelify

Midnight Blue

Melissa Manchester

KeyC majorTempo98 bpm
0:00/0:00
// Midnight Blue — Melissa Manchester
// 98 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 6 epiano1 (copy of ch 1 piano)
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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 · epiano1
const epiano1 = note("<A@8 B@4 C@2 D@8 E F@4 ~@72>".pickRestart({
  A: "[~@8 a4@2 ~@2 f2 ~@11 a4@2 ~@2 f2 ~@3 [c4,e4] ~@4 g3 ~@6 c4@2 ~@5 [g3,c4]@2 ~@9 [e2,g3,a#3,d4]@2, c3@12 c3@12 b4@2 f2@14 c5@4 c3@14 f2@30 e4@8 [c3,g3]@4 f4@20 [c3,g3,a#3,e4] d4 c4@6, b4@3 b4@5 f2@2 c5@4 [f4,a4]@7 [e5,g5]@9 a4@14 [c3,g3]@2 e3@7 e3@11, ~ c5@3 c5@4 f4@2 a4@2 g4@12 f4@2 a4@2 [g4,b4]@10 g3 [c4,e4] [c3,g3]@2 [c4,e4] [d4,f4]@3 c4@2 [d4,f4] [c4,e4] d4@3 g3@3 a4@8, ~@2 [e5,g5]@3 [e5,g5]@11 [c3,b4] c5 [e5,g5] b4@5 f2@2 c5@4 f4 g3 c3 [c4,e4] [d4,f4] [c4,e4] g2@15 [c3,e4]@2 c4@3 [c3,a#3,e4]@2 g4@6]/8", // C C5 Em7b5 C5 C7 F Em C5 …
  B: "[f2@2 ~ f2 a#2@2 ~ a#2 f2@2 [f3,a3]@2 ~ c4@2 [c3,g3,c4]@3 ~ c3 c3@2 [g3,c4]@2 c3@2 ~ c3 c3@2 [g3,c4]@2, c4@12 ~@3 e4@17, ~@2 [f3,a3]@2 ~@2 [f3,a#3]@2 ~@4 [f2,f3,a3]@3 ~@3 [g3,c4]@2 ~@6 [g3,c4]@2 ~@4]/4", // F C5 F A#5 F C5
  C: "[g4!2 b4 g4@2 b4@2 a4@2 f4 g4@2 f4@2 f2@2, [g2,b3,d4]@3 [g2,b3,d4]@4 [f2,a3,c4]@7 ~@2]/2", // G F
  D: "[c5!2 b4 a4@2 g4 [a2,f3]@4 [g1,g3]!2 [c2,c4]!2 [e2,e4] a4 a4 ~@2 c3 c3@2 [c4,e4]@2 c3@2 [c4,e4]@2 c5 b4@2 [e3,b3,c4,e4]@3 ~ e3 e3@2 [b3,e4]@2 e3@2 [b3,e4]@2 [g3,b3,e4,b4]@2 [e3,g3,b3,g4] [a2,e3,a3]@3 ~ a2 a2@2 [e3,a3]@2 g2@2 ~ g2 c4@2 [b3,d4]@2, [a2,c4,e4]@3 [a2,c4,e4]@3 [c4,d4]@3 ~@6 [c4,e4]@5 ~@14 [b3,e4]@2 ~@11 d4@13 ~@4, ~@15 c3@3 ~@10 [c3,g3,c4,e4]@3 ~@19 [e3,a3]@2 ~@6 g3@2 [g2,g3]@4, ~@17 g4@11 ~@3 g4@13 ~@20]/8", // Dm G C E C Cmaj7 E5 Em …
  E: "e4@2 f4 e4@2 f4 e4@2, [c3,g3,c4]", // C5
  F: "[g2@4 ~@2 g2@2 g2@4 [g3,c4]@4 d5@2 d5 e5 f5@2 e5 d5 c5@2 e5@2 ~@2 g3@32 ~@2, d4@7 ~@9, ~ [g3,c4] ~@2 g2 [g3,b3]@2 ~@9, ~@11 g2 g2@2 [g2,d5]@16 ~@2]/4", // C5 G G5
})).s("gm_epiano1").gain(0.4).pan(0.4)

// bass · fretless bass
const bass = note(`<
  A B C D A E C F G H C I J H K L M N O P Q R A S T A E C F G H C I J H K L M N O P Q R A S U M V A W X H C I J H K Y M
  N O P Q R A S U M Z A AA M N A S U M N J S M N J S M N J S M N J S M N J S M N ~
>`.pickRestart({
  A: "c2@5 ~ c2@8 g1 ~", B: "g1@5 ~ g1@4 g2 d2 g1 d2 d2@2", C: "c2@5 ~ c2@9 ~", D: "g1@5 ~ g1@7 ~ d2 ~",
  E: "c2@5 ~ c2@4 c3 g2 c2 g2 g1@2", F: "c2@5 ~ c2@6 c2 ~ g1 ~", G: "f2@5 ~ f2@2 a#1@6 f1 ~",
  H: "f2@5 ~ f2@4 f3 c3 f2 c3 c2@2", I: "c2@5 ~ c2@7 ~ g1 ~", J: "g1@5 ~ g1@8 d2 ~", K: "a2@5 ~ a2@9 ~",
  L: "g2@5 ~ g2@7 ~ d2 ~", M: "c2@6 c2@8 c3!2", N: "c2@5 ~ c2@7 ~ g2 a2", O: "e2@5 ~ e2@8 b1 ~", P: "e2@5 ~ e2@9 ~",
  Q: "a1@6 a1@8 a2!2", R: "g1@5 ~ g1@6 g1 ~ d2 e2", S: "g1@5 ~ g1@9 ~", T: "g1@5 ~ g1@8 ~@2", U: "g1@3 g1@4 ~",
  V: "a1@5 ~ a1@7 ~ e2 g2", W: "c2@3 c2@3 c2 ~", X: "f2@5 ~ f2@8 c2 ~", Y: "g2@3 g2@4 ~", Z: "f2@5 ~ f2@7 ~ c3 d3",
  AA: "f2@5 ~ f2@9 ~",
})).s("gm_fretless_bass").gain(0.4)

// chords · synth strings 2 · C Csus4 C Csus4 G
const synth_strings_2 = note(`<
  [[c3,g3,c4,e4]]
  [[g3,f4,g4,c5]]
  [[c3,g3,c4,e4,g4]]
  [[g3,f4,g4,c5,f5]]
  ~@20
  [[g3,d4,g4,b4]@15 ~]
  ~@74
>`).s("gm_synth_strings_2").gain(0.26)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@4 A@2 B C D E F@2 G E H I ~@9 A@2 B C D E F@2 G E H I ~@13 J@2 F@2 G E ~@43
>`.pickRestart({
  A: "[c6@11 g5@3 e5@2]/2", B: "[g4,c5]", C: "[a#4,c5]@12 [a#4,c5] ~@3", D: "f6 a#6", E: "f6@3 c6@3 a5@2",
  F: "[[g4,c5]@29 ~@3]/2", G: "g6", H: "[e5,a5]", I: "[f5,g5]@13 ~@3", J: "[f6@11 c6@3 a5@2]/2",
})).s("gm_string_ensemble_2").gain(0.15)

// chords · string ensemble 2
const string_ensemble_2_2 = note(`<
  ~@16 A@2 B@2 C D E F ~@13 A@2 B@2 C D E G H ~@3 I ~@7 J A@2 B@2 C D E F K L M E N L O E P H A@2 P G A@2 P G A@2 P G
  A@2 P G A@2 P G A@2 ~
>`.pickRestart({
  A: "[c6@3 g5, [g3,c4,e4,g4]]/2", B: "[b3,g4,b4,e5,e6]/2", C: "[e4,a4,c5,e5,a6]",
  D: "g6@2 d6 [d4,g4,b4,d5,d6], [d4,g4,c5,d5]@3 ~", E: "[g3,e4,g4,c5,c6]", F: "[d4,c5,d5,g5,g6]", G: "[d4,b4,d5,g5,g6]",
  H: "[d4,g4,b4,d5,g6]@15 ~", I: "[a#3,c4,e4,a#4,c6]@12 [a#3,c4,e4,a#4,c6]@3 ~", J: "[f4,g4,f5,g6]@15 ~, c5 ~@15",
  K: "[d4,g4,c5,d5,g6]@15 ~", L: "[g3,c4,e4,g4,c6]", M: "f6 c6, [c4,f4,a4,c5]", N: "[c4,a4,c5,f5,f6]",
  O: "c6 g5, [g3,c4,e4,g4]", P: "[f4,c5,f5,g5,g6]",
})).s("gm_string_ensemble_2").gain(0.26)

// chords · epiano1
const epiano1_2 = note(`<
  ~@16 A@2 B@2 C D E F ~@13 A@2 B@2 C D E G H ~@3 I ~@7 H A@2 B@2 C D E F H J K E L J M N O H A@2 P G A@2 P G A@2 P G
  A@2 P G A@2 P G A@2 ~
>`.pickRestart({
  A: "[c5@2 ~ [c5,c6]@6 ~@2 g5@5, c4@17 ~ g4@12 ~@2, ~@5 c5@3]/2", // C
  B: "[e5 ~@3 [b4,g5]@18 ~@6 b5@4, e4@10 ~ e4@5, ~@2 g4@19 ~@3 g4@8, ~@13 e5@3]/2", C: "a5@2 ~ [a5,a6]@5, a4",
  D: "[g5,g6] ~@2 d6@3 [g5,d6]@2, g4 ~ d5@10 d5@2 ~@2, ~ g5@2 ~", E: "c5 ~@3 [g4,e5]@12, c4, ~ e4@7",
  F: "[c5,d5,c6]@3 ~@3 d6@2, g4@2 ~ g4@5, ~ c5, ~@5 g5@3", G: "[b4,d5,b5]@3 ~@3 d6@2, g4@2 ~ g4@5, ~ b4, ~@5 g5@3",
  H: "g5@2 ~ [g5,g6]@4 ~, g4@15 ~", I: "c5@4 ~@2 [c5,c6]@6 [c4,c5,c6]@3 ~, c4@3 ~", J: "c5@2 ~ [c5,c6]@5, c4",
  K: "[f5,f6] ~@2 c6@5, f4 ~ c5@12 ~@2, ~ f5@3", L: "[a4,c5,a5]@3 ~@3 c6@2, f4@2 ~ f4@5, ~ a4, ~@5 f5@3",
  M: "[c5,c6] ~@2 g5@5, c4 ~ g4@12 ~@2, ~ c5@3", N: "~ [g4,e5]@3, c4, ~ e4@7",
  O: "[c5,f5,c6]@3 ~@3 f6@2, g4@2 ~ g4@5, ~ c5, ~@5 g5@3", P: "g5 ~@3 [f5,c6]@12, g4, ~ c5@7",
})).s("gm_epiano1").gain(0.35)

// chords · piano
const piano = note(`<
  ~@25 A@4 B@4 C@2 D@8 E F@2 G H G I J@2 K@2 C@2 L@8 E M@2 N O N P Q@2 R S T@2 R S T@2 R S T@2 R S T@2 R S T@2 R S T@2
  ~@2
>`.pickRestart({
  A: "[[c4,e4] ~@4 g3 ~@6 c4@2 ~@5 [g3,c4]@2 ~@9 [e2,g3,a#3,d4]@2, c3@14 [c4,e4]@6 [c4,e4]@4 e4@8 [c3,g3]@4 f4@20 [c3,g3,a#3,e4] d4 c4@6, ~ [c4,e4]@2 [c4,e4]@3 g3@2 [c3,g3]@4 [c3,g3]@2 e3@7 e3@11, ~@2 [d4,f4]@9 [d4,f4]@3 c4@2 [d4,f4] [c4,e4] d4@3 g3@3 a4@8, ~@4 g2@15 [c3,e4]@2 c4@3 [c3,a#3,e4]@2 g4@6]/4", // C C5 Em7b5 C C5 C7 C C5 …
  B: "[f2@2 ~ f2 a#2@2 ~ a#2 f2@2 [f3,a3]@2 ~ c4@2 [c3,g3,c4]@3 ~ c3 c3@2 [g3,c4]@2 c3@2 ~ c3 c3@2 [g3,c4]@2, c4@12 ~@3 e4@17, ~@2 [f3,a3]@2 ~@2 [f3,a#3]@2 ~@4 [f2,f3,a3]@3 ~@3 [g3,c4]@2 ~@6 [g3,c4]@2 ~@4]/4", // F C5 F A#5 F C5
  C: "[g4!2 b4 g4@2 b4@2 a4@2 f4 g4@2 f4@2 f2@2, [g2,b3,d4]@3 [g2,b3,d4]@4 [f2,a3,c4]@7 ~@2]/2", // G F
  D: "[c5!2 b4 a4@2 g4 [c4,d4]@4 [g1,g3]!2 [c2,c4]!2 [e2,e4] a4 a4 ~@2 c3 c3@2 [c4,e4]@2 c3@2 [c4,e4]@2 c5 b4@2 [e3,b3,c4,e4]@3 ~ e3 e3@2 [b3,e4]@2 e3@2 [b3,e4]@2 [g3,b3,e4,b4]@2 [e3,g3,b3,g4] [a2,e3,a3]@3 ~ a2 a2@2 [e3,a3]@2 g2@2 ~ g2 c4@2 [b3,d4]@2, [a2,c4,e4]@3 [a2,c4,e4]@3 [a2,f3]@3 ~@6 [c4,e4]@5 ~@14 [b3,e4]@2 ~@11 d4@13 ~@4, ~@15 c3@3 ~@10 [c3,g3,c4,e4]@3 ~@19 [e3,a3]@2 ~@6 g3@2 [g2,g3]@4, ~@17 g4@11 ~@3 g4@13 ~@20]/8", // Csus2 G C E C Cmaj7 E5 Em …
  E: "e4@2 f4 e4@2 f4 e4@2, [c3,g3,c4]", // C5
  F: "[g2@2 ~ g2 g2@2 [g3,c4]@2 g2@2 ~ g2 e5 ~@2 g3, d4@7 ~, ~ [g3,c4] ~@3 [g3,b3]@2 ~, ~@6 g2!2, ~@13 d5@3]/2", // C5 G
  G: "b4 c5 [e5,g5] [c3,b4] c5 [e5,g5]@3, c3 ~ g2 ~", H: "[f2,f4,a4]@2 ~ f2 [f2,g4,b4]@2 ~ f2, ~ [a4,c5] ~ [f4,a4]",
  I: "[a4,a5] [g4,g5]@2 f2 ~ [d4,d5] ~ e2, f2@2 ~ [e4,e5]@2 ~ [c4,c5]@2, ~@2 f2 ~", // A G D E C
  J: "[~@3 c4 f4 g4 a4 f4@2 ~ c2@2 d2@2 f2@2, f2@4 [f2,a3,c4]@3 f2@3 ~@6, c4@3 ~@4 [a3,c4]@9, ~@2 [f3,a3]@2 ~@5 f4@7]/2", // F Am F
  K: "[c2@2 ~ b4 c5 a4 c5 ~@3 a2@2 b2@2 c3@2, ~@2 e2@2 [c4,e4]@3 [c4,e4]@9, ~@2 g2 a2 c3 ~@3, ~@7 a4@2 g4@7]/2", // C
  L: "[c5!2 b4 a4@2 g4 [a2,e4] g2@3 [g2,g3]!2 [c3,c4]!2 [e3,e4] a4@2 ~@2 c3 c3@2 [c4,e4]@2 c3@2 [c4,e4]@2 c5 b4@2 [e3,b3,c4,e4]@3 ~ e3 e3@2 [b3,e4]@2 e3@2 [b3,e4]@2 [g3,b3,e4,b4]@2 [e3,g3,b3,g4] [a2,e3,a3]@3 ~ a2 a2@2 [e3,a3]@2 g2@2 ~ g2 c4@2 [b3,d4]@2, [a2,c4,e4]@3 [a2,c4,e4]@3 [f3,c4]@4 ~@5 c3@3 ~@10 [c3,g3,c4,e4]@3 ~@19 [e3,a3]@2 ~@6 g3@2 [g2,g3]@4, ~@7 d4@2 ~@6 [c4,e4]@5 ~@14 [b3,e4]@2 ~@11 d4@13 ~@4, ~@17 g4@11 ~@3 g4@13 ~@20]/8", // A5 G C E C Cmaj7 E5 Em …
  M: "[g2@2 ~ g2 g2@2 [g3,c4]@2 g2@2 ~ g2 e4 ~ g2@2, d4@13 d4@2 ~, ~@2 [g3,c4]@2 ~@6 [g3,b3]@4 g3 ~, ~@6 g2 ~]/2", // C5 G
  N: "~@3 c3 c3@2 [e3,g3]@2, [c4,e4,g4,c5], c3@3 ~@5, ~ [e3,g3] ~@2", // Em C Em
  O: "~@3 f2 f2@2 [f3,a3,d4,f4]@2, f2@3 ~@5, ~ [f3,a3] ~@2", P: "~@3 f2 f2@2 [c3,e3,c4,e4]@2, f2@3 ~@5, ~ [f3,a3] ~@2",
  Q: "[[c3,c4,e4]@2 [g2,g3]!2 [c3,c4]!2 [e3,e4] [a3,a4]@2 ~@2 c3 c3@3 c3, ~@7 c3@4 ~@5, ~@9 [g3,g4]@7]/2", // C G C E A G
  R: "~@3 c3 c5 ~@2 b2, c3@3 ~ c3@3 ~, ~@2 [c4,e4]@2 ~ b4@3, ~@3 [c4,e4]", // C
  S: "g2@3 g2 ~@2 [g3,b3]@2, [d4,g4], [g3,b3]@3 ~, ~ g2", // G G5 G
  T: "[[g2,g3,g4]@3 [g2,g4]!2 [a2,a4] [b2,b4] [c3,c5]@2 ~@2 c3 ~@3 c3, d4@4 ~@3 [g3,c4]@5 c3@3 ~, ~@9 g4@7, ~@7 [c4,e4]]/2", // G A B C C5 C
})).s("gm_piano").gain(0.4).pan(0.4)

// chords · string ensemble 2 · C Am C
const string_ensemble_2_3 = note("<~@46 [[g3,c4,e4,g4,c6]] [a6 e6, [e4,a4,c5,e5]] [[g3,e4,g4,c5,c6]] ~@50>")
  .s("gm_string_ensemble_2").gain(0.26)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x ~@4]!24 [x ~@2 x ~@3 x] [x ~@2 x ~@4]!73 ~>").gain(0.32)

// drums · rim
const rim = s("rim").struct("<[~ x ~@2]!16 ~@8 [~@4 x ~@7 x!4] [~ x ~@2]!12 ~@13 [~ x ~@2]!7 ~@42>").gain(0.29)

// drums · snare
const snare = s("sd").struct("<~@16 [~ x ~@2]!8 ~@13 [~ x ~@2]!13 ~@7 [~ x ~@2]!41 ~>").gain(0.29)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B ~ A ~ B ~ A ~ A ~ A ~ B ~
  A ~ A ~ A ~ A B ~ A ~ A ~ A ~ A B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@6 x!2", B: "~@15 x",
})).gain(0.22)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@45 A ~@3 A ~@7 A ~@8 A ~@8 A ~@23>".pickRestart({
  A: "~@7 x",
})).gain(0.14)

// drums · hihat
const hihat = s("hh").struct("<A@24 B A@20 B A@3 B A@7 B A@8 B A@8 B A@22 ~>".pickRestart({
  A: "x!8", B: "x!4 ~@4",
})).gain(0.14)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~ A B A ~ A B A ~ A B A ~ A B A ~ A ~ A ~ A ~ A@2 ~ A B A ~ A B A ~ A B A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A B A ~ A ~ A
  ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@6 x!2", B: "~@5 x ~@2",
})).gain(0.22)

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

// drums · high tom
const high_tom = s("ht").struct("<A@3 ~ A@3 ~ A@3 ~ A@3 ~@9 A@4 ~ A@3 ~ A@3 ~@14 A@3 ~ A@3 ~@42>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.18)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@16 A ~ A ~ A ~ A ~@14 A ~ A ~ A ~ A ~@2 A ~ A ~@9 A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@3 x",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@24 A ~@20 A ~@3 A ~@7 A ~@8 A ~@8 A ~@23>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.22)

// drums · congas
const congas = s("conga:13").struct("<~@45 A ~@3 A ~@7 A ~@8 A ~@8 A ~@23>".pickRestart({
  A: "~@12 x!2 ~@2",
})).gain(0.69)

// drums · congas
const congas_2 = s("conga:18").struct("<~@45 A ~@3 A ~@7 A ~@8 A ~@8 A ~@23>".pickRestart({
  A: "~@14 x!2",
})).gain(0.69)

// drums · congas
const congas_3 = s("conga:33").struct("<~@45 A ~@3 A ~@7 A ~@8 A ~@8 A ~@23>".pickRestart({
  A: "~@10 x!2 ~@4",
})).gain(0.69)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A@24 B A@20 C A@3 C A@7 C A@8 C A@8 C A@22 ~>".pickRestart({
  A: "x!8", B: "x!4 ~@4", C: "x ~ x ~ x ~ x ~@7 x!2",
})).gain(0.55)

// drums · jingle bells
// … 7 more lines

More by Melissa Manchester