Strudelify

It's My Party

Chaka Khan

KeyA majorTempo145 bpm
0:00/0:00
// It's My Party — Chaka Khan
// 145 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(145/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 · "Ac Piano"
const piano = note(`<
  ~ A B C D E F G H A I A C D E J K A B C D E F G H A I A C D E J K A B C D E F G H A I A C D E J K A B C D E F G H A B
  C D E F L
>`.pickRestart({
  A: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~", // A
  B: "[a4,c#5,f5] ~ [a4,c#5,f5] ~ [a4,c#5,f5] ~ [a4,c#5,f5] ~ [a4,c#5,f5] ~ [a4,c#5,f5] ~ [a4,c#5,f5] ~ [a4,c#5,f5] ~", // Aaug
  C: "[a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~", // D
  D: "[a4,d5,f5] ~ [a4,d5,f5] ~ [a4,d5,f5] ~ [a4,d5,f5] ~ [a4,d5,f5] ~ [a4,d5,f5] ~ [a4,d5,f5] ~ [a4,d5,f5] ~", // Dm
  E: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,f#5] ~ [a4,c#5,f#5] ~ [a4,c#5,f#5] ~ [a4,c#5,f#5] ~", // A F#m
  F: "[b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,f#5] ~ [b4,d5,e5] ~ [b4,d5,e5] ~ [b4,d5,e5] ~ [b4,d5,e5] ~", // Bm E7
  G: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,c#5,e5] ~", // A D A
  H: "[c#5,e5] ~ [g#4,d5,e5] ~ [g#4,d5,e5] ~ [g#4,d5,e5] ~ [g#4,d5,e5] ~ [g#4,d5,e5] ~ [g#4,d5,e5] ~ [g#4,d5,e5] ~", // C#m E7
  I: "[g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~", // C
  J: "[a4,d#5,f#5] ~ [a4,d#5,f#5] ~ [a4,d#5,f#5] ~ [a4,d#5,f#5] ~ [a4,d#5,f#5] ~ [a4,d#5,f#5] ~ [a4,d#5,f#5] ~ [a4,d#5,f#5] ~", // D#dim
  K: "[g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~ [g#4,b4,e5] ~", // E
  L: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,d5,f#5] ~ [c#5,e5,a5] ~", // A D A
})).s("gm_piano").gain(0.21)

// bass · acoustic bass · "El Bass"
const bass = note(`<
  ~ A B C D E F G H I J K L M E N O P B C D E F G H I J K L M E N Q P B C D E F G H I J K L M E N Q P B C D E F G H P B
  C D E F G
>`.pickRestart({
  A: "a2@4 ~@2 a2@5 ~ e2@3 ~", B: "a2@4 ~@2 a2@5 ~ c#2@3 ~", C: "d2@4 ~@2 d2@5 ~ a2@4", D: "d2@4 ~@2 d2@5 ~ f2@3 ~",
  E: "a2@5 ~ a2 ~ f#2@5 ~ f#2 ~", F: "b2@5 ~ b2 ~ e2@5 ~ e2 ~", G: "a2@5 ~ a2 ~ d2 ~ d2@2 ~@2 a2@2",
  H: "~@2 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", I: "a2@5 ~ a2 ~ a2@5 ~ e2 ~", J: "c2@4 ~@2 c2 ~ c2@5 ~ e2 ~",
  K: "a2@4 ~@2 a2 ~ a2@5 ~ c#2 ~", L: "d2@5 ~ d2 ~ d2@5 ~ a2 ~", M: "d2@5 ~ d2 ~ f2@5 ~ f2 ~",
  N: "b2@5 ~ b2 ~ b2@5 ~ b2 ~", O: "e2@3 ~ d2@3 ~ c#2@3 ~ b1@2 ~@2", P: "a1@4 ~@2 a2@5 ~ e2@3 ~",
  Q: "e2@5 ~ e2 ~ e2@3 ~ e2@3 ~",
})).s("gm_acoustic_bass").gain(0.4)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~ A B C D E F G ~@2 H I ~@3 J K A B C D E F G ~@2 H I ~@3 J K A B C D E F G ~@2 H I ~@3 J K A B C D E F G ~ A B C D E
  F G
>`.pickRestart({
  A: "[e4,a4,c#5]@5 ~ [e4,a4,c#5]@8 ~@2", B: "[f4,a4,c#5]@5 ~ [f4,a4,c#5]@9 ~", C: "[f#4,a4,d5]@5 ~ [f#4,a4,d5]@9 ~",
  D: "[f4,a4,d5]@5 ~ [f4,a4,d5]@8 ~@2", E: "[e4,a4,c#5] ~@3 a4@4 e4@3 ~ c#4@2 ~@2",
  F: "f#4@3 ~ e4 ~ e4 ~ g#4 ~ g#4 ~ b4@3 ~", G: "a4@15 ~",
  H: "~@8 [e4,g4,c5] ~@2 [g4,c5]@2 [e4,g4] ~@2, ~@11 e4 ~ c5@2 ~", I: "[e4,a4,c#5]@9 ~@7",
  J: "[d#4,a4,b4]@2 ~@2 [a4,b4] ~ [d#4,a4]@2 ~@2 [d#4,a4,b4] ~ [d#4,a4,b4]@2 ~@2, ~@4 d#4@2 b4 ~@9", // B7 Asus2 D#dim B7
  K: "[d4,g#4,b4]@7 ~", // G#dim
})).s("gm_string_ensemble_1").gain(0.3)

// other · brass section · "Brass"
const brass_section = note(`<
  ~ A B C D E ~ F G ~@8 A B C D E ~ F G ~@8 A B C D E ~ F G ~@8 A B C D E ~ F G A B C D E ~ F
>`.pickRestart({
  A: "~@6 [e4,c#5,a5] ~@9", B: "~@6 [f4,c#5,a5] ~@9", C: "~@6 [f#4,d5,a5] ~@9", D: "~@6 [f4,d5,a5] ~@9",
  E: "[e4,c#5,a5] ~@15", F: "~@4 [e4,e5] ~ [e4,e5] ~ [f#4,f#5] ~ [a4,a5] ~@3 [a4,a5] ~",
  G: "~@2 [e4,e5] ~ [d4,d5] ~ [d4,d5] ~ [c#4,c#5] ~ [c#4,c#5] ~ [b3,b4] ~ [b3,b4] ~", // E D C# B
})).s("gm_brass_section").gain(0.4)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  ~ A B C D E F G H A I A C D E J@8 G H A I A C D E J@8 G H A I A C D E J@8 G H A B C D E F G
>`.pickRestart({
  A: "~@4 [c#4,e4,a4] ~@7 [c#4,e4,a4] ~@3", B: "~@4 [c#4,f4,a4] ~@7 [c#4,f4,a4] ~@3",
  C: "~@4 [d4,f#4,a4] ~@7 [d4,f#4,a4] ~@3", D: "~@4 [d4,f4,a4] ~@7 [d4,f4,a4] ~@3",
  E: "~@4 [c#4,e4,a4] ~@7 [c#4,f#4,a4] ~@3", F: "~@4 [d4,f#4,b4] ~@7 [e4,g#4,b4] ~@3",
  G: "~@4 [c#4,e4,a4] ~@7 [d4,f#4,a4] ~@3", H: "~@4 e4 ~@7 e4 ~@3", I: "~@4 [c4,e4,g4] ~@7 [c4,e4,g4] ~@3",
  J: "[~@4 [d#4,f#4,a4] ~@7 [d#4,a4] ~@7 [d4,e4,g#4] ~@7 [d4,e4,g#4] ~@7 [c#4,e4,a4] ~@7 [c#4,e4,a4] ~@7 [c#4,f4,a4] ~@7 [c#4,f4,a4] ~@7 [d4,a4] ~@7 [d4,a4] ~@7 [d4,f4,a4] ~@7 [d4,f4,a4] ~@7 [c#4,e4,a4] ~@7 [c#4,a4] ~@7 [d4,b4] ~@7 [e4,g#4,b4] ~@3, ~@3 f#4@14 f#4@2 f#4@8 f#4@2 f#4@2 ~]/8", // D#dim E7 A C#aug D5 Dm A F#m …
})).s("gm_electric_guitar_clean").gain(0.29)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3
>`.pickRestart({
  A: "x ~@6 x", B: "x",
})).gain(0.4)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A B@2 C D B@3 A B@2 C D B@3 A B@2 C D B@3 A B@2 C D B@3 A B@2 C D B@3 A B@2 C D B@3 A B@2 C D B@3 A B@2 C D B E
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!5 ~ x ~", D: "~@2 x!6", E: "x!7 ~",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~ A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@5 B>".pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@5 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@2>".pickRestart({
  A: "x",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~ x ~ x]!63>").gain(0.4)

stack(
  piano, bass, string_ensemble_1, brass_section, electric_guitar_clean, kick, snare, open_hat, crash, ride, tambourine
)

More by Chaka Khan