Strudelify

Queen of the Night

Whitney Houston

KeyA minorTempo119 bpm
0:00/0:00
// Queen of the Night — Whitney Houston
// 119 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 101 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(119/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 · electric bass finger
const bass = note(`<
  ~@20 A B@2 C@2 B@2 D@2 B@2 C@2 E@2 F G H@2 I A B@2 C@2 B@2 D@2 B@2 C@2 E@2 F G H@2 I A B@2 C@2 B@2 D@2 B@2 C@2 B@2 C@2
  B@2 C@2 J@2 K@2 J@2 L A B@2 C@2 J@2 K@2 J@2 L A
>`.pickRestart({
  A: "~@4 g1@3 ~@5 g1@3 ~@5 g2@2 ~@2 d2@6 ~@2",
  B: "[a1@6 ~@2 a1@4 e1 ~ e1 ~ g1@4 g#1@3 ~ a1@4 d2@8 d3@4 d2 ~@3 e2@7 ~ b2@3 ~ a2@6 ~@2]/2",
  C: "[a1@6 ~@2 a1@4 e1 ~ e1 ~ g1@4 g#1@4 a1@4 d2@7 ~ c2@3 ~ b1@2 ~@2 g1@6 ~@2 g1@3 ~ g2@4 g1@3 ~]/2",
  D: "[a1@6 ~@2 a1@4 e1 ~ e1 ~ g1@4 g#1@4 a1@4 d2@7 ~ c2@3 ~ b1@2 ~@2 g1 ~@3 g1@3 ~ g2@4 g1@3 ~ g2@3 ~]/2",
  E: "[d2@6 ~@2 d2@6 c2 ~ c2@3 ~ c2@4 d2@4 e2@8 d2@4 e2@4 g2@4 e2@4 g2@4 g#2@4 a2@3 ~]/2",
  F: "a1@6 ~@2 a1@5 ~ a1 ~ a1@4 e2@4 a2@3 ~ g1@4", G: "~@4 g1@4 g2@4 g1@2 ~@2 g1@3 ~ g1@4 g2@4 g1@3 ~",
  H: "[d2@6 ~@2 d2@4 ~@2 d2 ~ c2@2 ~@2 c2@4 d2@2 ~@2 e2@8 g2@4 g#2@4 a2@4 e2@4 d2@4 e2@3 ~ e2@3 ~]/2",
  I: "a1@6 ~@2 a1@4 ~@2 a1 ~ g1@3 ~ g1@3 ~ a1@3 ~@5",
  J: "[d2@6 ~@2 d2@6 c2 ~ c2@3 ~ c2@4 d2@4 e2@8 d2@4 e2@4 g2@4 a2@3 ~ a2@4 e2@7 ~]/2",
  K: "[a1@6 ~@2 a1@5 ~ a1@5 ~ a2@3 ~ g#2@4 g2@8 d2@4 g1@5 ~ g1 ~ g1@2 ~@2 g1@4 g2@4 g1@3 ~]/2",
  L: "a1@6 ~@2 a1@4 ~@2 a1 ~ a1@3 ~ a2@4 a1@3 ~ a2@3 ~",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · epiano1
const epiano1 = note("<~ A B A B C D E F ~@12 G@12 H@2 I@2 H@2 J ~@21 G@14 K ~@25>".pickRestart({
  A: "[a2,g#3,c#4,e4]", B: "[f2,f3,a3,c4]@3 [g2,g3,b3,d4]@5", C: "[f2,f3,a3,c4]", D: "[g2,g3,b3,d4]",
  E: "[a2,g#3,c#4,e4]@28 [f2,f3,a3,c4]@3 ~", // Amaj7 F
  F: "~@4 [f2,f4,a4,c5,e5]@3 ~@5 [g2,g4,a4,c5,e5]@2 ~@6 g4@4 b4 [e4,f4,g4] [c4,d4] [a3,b3] [f3,g3] ~@3, ~@20 [g2,a4,c5,e5]@7 ~@5", // Fmaj7 Am7 Em Csus2 Asus2 Fsus2 Am7
  G: "[[g#3,c#4,e4]@7 [f3,c4,f4]@9]/2", H: "[[d3,f3,a3,c4]@7 [e3,g3,b3,d4]@9]/2",
  I: "[[g#3,a3,c#4,e4]@28 [f3,a3,c4,e4]@29 ~@7]/2", J: "[g#3,a3,c#4,e4]@7 ~", K: "[g#3,c#4,e4]@7 ~",
})).s("gm_epiano1").gain(0.47).pan(0.4)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@13 A@2 B@2 C D E ~@29 F@2 G@2 H I J@2 C D K L ~@16 F@2 G@2 H I J@2 C D K L F@2 G@2 H I J@2 C D K L
>`.pickRestart({
  A: "[[e4,e5]@3 [d4,d5]]/2", B: "[[e4,e5]@48 [d4,d5]@15 ~]/2", C: "[a4,a5] [b4,b5]", D: "[c5,c6] [d5,d6]",
  E: "[c#5,a5]", F: "[e4@3 d4]/2", G: "[e4@48 d4@15 ~]/2", H: "a4 b4", I: "c5 d5", J: "[c#5@28 c5@35 ~, e5]/2",
  K: "[c#5,e6]", L: "~@4 [g2,e6]@2 ~@6 [g2,e6]@2 ~@6 [g2,e6]@4 b5 [e5,f5,g5] [c5,d5] [a4,b4] [f4,g4] ~@3",
})).s("gm_string_ensemble_1").gain(0.24).pan(0.6)

// chords · piano
const piano = note(`<
  ~@9 A@4 B@4 C@2 D E ~@8 F@2 G@2 H@4 C@2 D E I@2 J@2 I@2 K@2 F@2 G@2 H@4 C@2 D E ~@8 F@2 G@2 F@2 G@2 F@2 G@2 H@4 C@2 D
  E F@2 G@2 H@4 C@2 D E
>`.pickRestart({
  A: "[[a2,g#3,c#4]@7 [d2,f3,c4]@9]/2", B: "[[a2,g#3,c#4]@6 ~ [d2,f3,c4]@4 ~@5]/2",
  C: "[[d2,f3,c4]@13 ~ [e2,g3,d4]@17 ~]/2", D: "[a2,g#3,c#4]",
  E: "~@4 [g2,g3,e4]@4 ~@4 [g2,g3,e4]@2 ~@6 [g2,g3,e4]@7 ~@5", // C
  F: "[[g#3,c#4,e4]@18 ~@2 [c#4,e4]@4 g#3@2 ~@2 [d2,f3,a3,e4]@13 ~@3 e2@10 ~@2 e2@4 g2@4, a2@7 ~@9, ~@20 g#3@3 ~@21 [g3,b3,d4,e4]@18 ~@2]/2", // C#m Dm Em7
  G: "[[g#3,c#4,e4]@19 ~ [c#4,e4]@4 a2@2 ~@2 [d2,f3,a3,e4]@14 ~@2 e2@9 ~@3 e2@4 g2@3 ~, a2@23 ~@41, ~@20 g#3@2 ~@2 g#3 ~@19 [g3,b3,d4,e4]@19 ~]/2", // C#m Dm Em7
  H: "[[d2,d3,f3,a3,c4]@20 [d3,f3,a3,c4]@2 ~@2 d2@2 ~@2 [e2,e3,g3,b3,d4]@24 [e3,g3,d4]@2 ~@2 e2@4 g2@4 a2@20 [g#3,c#4,e4]@3 ~ a2 ~@3 [g2,f3,a3,c4,e4]@34 ~@2, ~@52 b3 ~@7 [g#3,a3,c#4,e4]@22 ~@46]/4", // Dm7 Em7 C#m Fmaj7 Amaj7
  I: "[[a2,g#3,c#4]@13 ~ [f2,f3,c4]@17 ~]/2", // Amaj7 F5
  J: "[[a2,g#3,c#4]@26 ~@2 [f3,c4]@22 ~@2 [f3,c4] ~@3 f2@2 [f3,c4]@4 f2 ~, ~@7 f2@6 ~@3]/2", // Amaj7 F5
  K: "[[a2,g#3,c#4]@26 ~@2 [f3,c4]@21 ~@3 [f3,c4] ~@3 f2@2 [f3,c4]@4 f2 ~, ~@7 f2@6 ~@3]/2", // Amaj7 F5
})).s("gm_piano").gain(0.37).pan(0.4)

// other · pad new age
const pad_new_age = note(`<
  ~@17 A B C ~@29 D@2 E ~ A B F@2 A B C ~@17 D@2 E ~ A B F@2 A B C ~ D@2 E ~ A B F@2 A B C ~
>`.pickRestart({
  A: "a5 b5", B: "c6 d6", C: "c#6", D: "[~@10 a5 ~ c6 ~ d6@4 ~@14]/2", E: "~@10 a5 ~ c6 ~ d6@2",
  F: "[~@24 a5@3 ~ c6@19 ~@17, c#6@33 ~@31]/2",
})).s("gm_pad_new_age").gain(0.4).pan(0.4)

// chords · epiano1
const epiano1_2 = note("<~@65 A@2 B@2 A@2 B@2 A@2 B@2 ~@24>".pickRestart({
  A: "[~@8 [g#4,b4] ~@3 e4 ~ [g#4,b4] ~@5 [g#4,b4] ~@7 [c4,e4,g4]@26 ~@2 [e4,a4,c5]@5 ~@3]/2", // G#m C Am
  B: "[[g#4,b4]@4 ~@4 b4@2 ~@2 e4 ~ [g#4,b4] ~@5 [g#4,b4] ~@7 [c4,e4,g4]@27 ~@9, ~@8 g#4 ~@55]/2", // G#m C
})).s("gm_epiano1").gain(0.26)

// chords · epiano2
const epiano2 = note(`<
  ~@12 A B@2 C@2 D@3 E ~@19 E F@12 G@2 H@2 G@2 I E ~@16 F@4 G@2 H@2 G@2 I E F@4 G@2 H@2 G@2 I E
>`.pickRestart({
  A: "~@20 [f3,a3,d4] ~@5 [a3,d4]@4 f3 ~, ~@13 f3 ~@2", // Dm D5
  B: "[[g#3,c#4,e4]@18 ~@2 [c#4,e4]@4 g#3@2 ~@2 [d2,f3,a3,c4,e4]@13 ~@3 e2@10 ~@2 e2@4 g2@4, a2@7 ~@9, ~@20 g#3@3 ~@21 [g3,b3,d4,e4]@18 ~@2]/2", // C#m Dm7 Em7
  C: "[[g#3,c#4,e4]@19 ~ [c#4,e4]@4 a2@2 ~@2 [d2,f3,a3,c4,e4]@14 ~@2 e2@9 ~@3 e2@4 g2@3 ~, a2@23 ~@41, ~@20 g#3@2 ~@2 g#3 ~@19 [g3,b3,d4,e4]@19 ~]/2", // C#m Dm7 Em7
  D: "[[d2,d3,f3,a3,c4]@10 [d3,f3,a3,c4] ~ d2 ~ [e3,g3,b3,d4]@11 ~ [e3,g3,d4] ~ e2@2 g2@2 a2@15 ~, ~@28 e2@24 b3 ~@7 [g#3,a3,c#4,e4]@34 ~@2]/3", // Dm7 Em7 Amaj7
  E: "~@4 [g2,g4,a4,c5,e5]@3 ~@5 [g2,g4,a4,c5,e5]@2 ~@6 [g2,g4,a4,c5,e5]@4 b4 [e4,f4,g4] [c4,d4] [a3,b3] [f3,g3] ~@3", // Am7 Em Csus2 Asus2 Fsus2
  F: "[[g#3,c#4,e4]@7 [f3,c4,f4]@9]/2", G: "[[d3,f3,a3,c4]@7 [e3,g3,b3,d4]@9]/2",
  H: "[[g#3,a3,c#4,e4]@28 [f3,a3,c4,e4]@29 ~@7]/2", I: "[g#3,a3,c#4,e4]",
})).s("gm_epiano2").gain(0.42).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@9 [x!4]!59 [x!3 ~] [x!4]!32>").gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@21 A@19 ~ B@4 A@15 ~ B@4 A@3 C A@19 ~ A@11 ~>".pickRestart({
  A: "~@8 x ~@10 x ~@4 x ~@6 x", B: "~@19 x ~@4 x ~@6 x", C: "~ x ~@2",
})).gain(0.25)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@21 A@19 ~ A@19 ~ A@7 ~ A@19 ~ A@11 ~>".pickRestart({
  A: "~@7 x",
})).gain(0.15)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@9
  [~ x ~@7 x ~@7 x ~@7 x ~@6]!59
  [~ x ~@7 x ~@7 x ~@14]
  [~ x ~@7 x ~@7 x ~@7 x ~@6]!32
>`).gain(0.05)

// drums · open hat
const open_hat = s("oh").struct("<~@9 [~ x ~ x ~ x ~ x]!59 [~ x ~ x ~@4] [~ x ~ x ~ x ~ x]!32>").gain(0.35)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@3 A ~@3 A ~@3 A ~@19 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "x",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@9 [x!8]!59 [x!5 ~@3] [x!8]!32>").gain(0.25)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@9
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!59
  [~ x ~ x ~ x ~ x ~@8]
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!32
>`).gain(0.15)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  ~@21
  [~@4 x ~@7 x ~@2 x ~@4 x ~@7 x ~@2 x]!47
  [~@4 x ~@7 x ~@2 x ~@16]
  [~@4 x ~@7 x ~@2 x ~@4 x ~@7 x ~@2 x]!32
>`).gain(3.02)

stack(
  bass, epiano1, string_ensemble_1, piano, pad_new_age, epiano1_2, epiano2, kick, snare, snare_soft, hihat, open_hat,
  crash, tambourine, tambourine_soft, triangle
)

More by Whitney Houston