Strudelify

This Is It

Dannii Minogue

KeyC majorTempo124 bpm
0:00/0:00
// This Is It — Dannii Minogue
// 124 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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 · synth bass 2
const bass = note(`<
  ~ A@7 B C D E F E G B@2 H B@2 E F E G B@2 H B@2 A@7 B C I E F E G B@2 H B@2 A@7 B C I E F E G B@2 H B@2 E F E G B@2 H
  B@2 A@7 B C I E F E G B@2 H B@2 E F E G B@2 H B@2 E F E G B@2 H B J K
>`.pickRestart({
  A: "c2@3 ~ c2@2 ~ c2!2 ~ c2@2 ~@2 c2 ~", B: "g1@3 ~ g1@2 ~ g1!2 ~ g1@2 ~@2 g1 ~",
  C: "a1@3 ~ a1@2 ~ a1!2 ~ a1@2 ~@2 a1 ~", D: "g1@3 ~ g1@2 ~ g1!2 ~ g1@2 ~@2 f1 ~",
  E: "c2@3 ~ c2@2 ~ c2!2 ~ g1@2 ~@2 g1 ~", F: "f1@3 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 a1 ~",
  G: "f1@3 ~ f1@2 ~ f1!2 ~ a1@2 ~@2 a1 ~", H: "f1@3 ~ f1@2 ~ f1!2 ~ f1@2 ~@2 f1 ~",
  I: "g1@3 ~ g1@2 ~ g1!2 ~ g1@2 ~@2 f1@2", J: "g1@3 ~ g1@2 ~ g1!2 ~ g1@2 ~ g1@2 ~", K: "c2@3 ~@13",
})).s("gm_synth_bass_2").gain(0.45)

// chords · piano
const piano = note(`<
  A@3 B@4 C D@2 E F G H I J@2 I K L F G H I J@2 I K E ~@9 M F G H I J@2 I K N ~@9 M F G H I J@2 I K N O G H I J@2 I K N
  ~@9 M F G H I J@2 I K N O G H I J@2 I K N O G H I J@2 I K P Q
>`.pickRestart({
  A: "[~@14 [c4,e4]@11 ~ [d4,f4]@4 [c4,e4,g4]@9 ~ e4@2 f4@2 g4@3 ~]/3", // C Dm C
  B: "[[g4,c5]@3 ~ [g4,c5]@2 [f4,g#4]@7 ~ [c4,g4]@15 ~ [g4,c5]@4 [e4,g4]@4 [d4,f4]@4 [c4,e4]@4 [e4,g4]@7 ~@3 e4@2 f4@2 g4@2 ~@2]/4", // C5 Fm C5 Em Dm C Em
  C: "[g4,c5]@3 ~ [g4,c5]@2 [f4,g#4]@4 ~@6", // C5 Fm
  D: "[g4@3 ~ f4@3 ~ e4@2 d4@2 e4@2 c5@7 ~@7 c4@4, ~@7 g4@2 ~@2 e4@5, ~@23 d4@9, ~@23 c4@5 ~@4, ~@3 g3]/2",
  E: "~@12 [b5,c6,d6] [e5,f5,g5,a5] [a4,b4,c5,d5] [e4,f4,g4], [g3,c4,d4]@15 ~", F: "[e3,g3,c4]@15 ~", G: "[f3,a3,c4]",
  H: "[e3,g3,c4]@10 [f3,g3,c4,d4]@3 [e3,g3,b3]@3", I: "[f3,a3,c4]@15 ~", J: "[g3,b3,d4]@15 ~",
  K: "[g3,d4,e4]@8 c4@3 ~ c4@4, c4@3 ~@5 [g3,d4,e4]@8", // Em7
  L: "c4@7 ~@5 [b5,c6,d6] [e5,f5,g5,a5] [a4,b4,c5,d5] [e4,f4,g4], [g3,d4]@15 ~, ~@8 b3@7 ~", // Bm Fmaj7 D7 Em G5
  M: "~@12 [b5,c6,d6] [e5,f5,g5,a5] [a4,b4,c5,d5] [e4,f4,g4]", // Bm Fmaj7 D7 Em
  N: "[g3,c4,d4]@12 [b5,c6,d6] [e5,f5,g5,a5] [a4,b4,c5,d5] [e4,f4,g4]", O: "[e3,g3,c4]@10 d4@3 b3@3, ~@5 [e3,g3]@3",
  P: "[g3,c4,d4]@10 [f3,g3,c4,d4]@2 ~ [f3,g3,c4,d4]@2 ~", Q: "[f3,g3,c4,e4] ~@7",
})).s("gm_piano").gain(0.4)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@11 A@4 B@3 C D A@4 B@3 C E ~@7 F G H A@4 B@3 C E ~@7 F G H A@4 I@3 C J A@4 I@3 C J ~@7 F G H A@4 I@3 C J A@4 I@3 C J
  A@4 K@4 L M
>`.pickRestart({
  A: "[[g4,g5]@27 ~ [a4,a5]@7 ~ [g4,g5]@23 ~ [a4,a5]@3 ~]/4", // G A G A
  B: "[[d5,d6]@23 ~ [d5,d6]@2 [c5,c6] ~ [g5,g6]@2 [f5,f6]@17 ~]/3", C: "[e5,e6]@15 ~", D: "[d5,d6]", E: "[d5,d6]@15 ~",
  F: "~@12 [b3,b4] [c4,c5] [d4,d5] [e4,e5]", G: "[a4,a5]", H: "b3 c4 d4 e4 f4 g4 a4 b4 c5 d5 e5 f5 g5@4",
  I: "[[d5,d6]@23 ~ [d5,d6]@2 [c5,c6] ~ [g5,g6]@2 [f5,f6]@13 ~ [b3,b4] [c4,c5] [d4,d5] [e4,e5]]/3", // D C G F B C D E
  J: "b3 c4 d4 e4 f4 g4 a4 b4 c5 d5 e5 f5 g5@4, d6@15 ~, d5 ~",
  K: "[[d5,d6]@23 ~ [d5,d6]@2 [c5,c6] ~ [g5,g6]@2 [f5,f6]@13 ~ [b3,b4] [c4,c5] [d4,d5] [e5,e6]@16 ~, ~@47 e4 ~@16]/4", // D C G F B C D E
  L: "b3 c4 d4 e4 f4 g4 a4 b4 c5 d5 [a4,g5,e6]@2 ~ [g4,g5,c6]@2 ~, d6@5 ~@3, d5 ~", M: "[e4,c5,c6] ~@7",
})).s("gm_string_ensemble_1").gain(0.35)

// chords · synth bass 2
const synth_bass_2 = note("<~ A B A B A B A B A B ~@103>".pickRestart({
  A: "~@2 [c4,g4,c5]!14", B: "[c4,g4,c5]!2 ~@14",
})).s("gm_synth_bass_2").gain(0.1)

// chords · synth bass 2 · soft notes
const synth_bass_2_soft = note("<~ A B A B A B A B A B ~@103>".pickRestart({
  A: "[c4,g4,c5]!2 ~@14", B: "~@2 [c4,g4,c5]!10 ~@4",
})).s("gm_synth_bass_2").gain(0.05)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note("<~@29 A@7 B ~@11 A@7 B ~@20 A@7 B ~@30>".pickRestart({
  A: "~@10 [g3,c4]!4 [g3,c4]@2", B: "~@10 [d3,g3]!4 [d3,g3]@2",
})).s("gm_lead_2_sawtooth").gain(0.2)

// drums · kick
const kick = s("bd").struct(`<
  A B C B C B C B C B C B C B C B C B C D B C B C B C B C D B@11 C B C B C B C D B@11 C B C B C B C D B C B C B C B C D
  B@11 C B C B C B C D B C B C B C B C D B C B C B C B C E F
>`.pickRestart({
  A: "~@10 x ~ x ~ x!2", B: "x!4", C: "x ~ x ~ x ~ x!2", D: "x ~ x!4 ~ x", E: "x ~@3 x ~ x ~ x ~ x ~@2 x ~@2", F: "x",
})).gain(0.5)

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

// drums · clap
const clap = s("cp").struct("<~ A@10 ~@55 B C D C D ~@23 B C D C D ~@5 C D C D ~@6>".pickRestart({
  A: "~ x ~ x", B: "~@10 x!6", C: "~@10 x ~ x!2 ~ x", D: "x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~ [x!4]!111 [x!3 ~] ~>").gain(0.35)

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

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct(`<
  ~ A ~@2 A@2 ~@2 A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A@2 ~@11 A ~ A ~ A ~ A@2 ~@11 A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A@2
  ~@11 A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@7 x ~@8",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@112 [~@10 x ~@2 x ~@2] x>").gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct("<~@11 A@18 ~@10 A@9 ~@10 A@18 ~@10 A@26 B ~>".pickRestart({
  A: "x!16", B: "x!11 ~@2 x ~@2",
})).gain(0.25)

// drums · congas
const congas = s("conga:13").struct(`<
  ~ A@9 B ~@18 C A C A C A C A C A ~@9 C A C A C A C A C A ~@18 C A C A C A C A C A ~@28
>`.pickRestart({
  A: "~ x ~@3 x ~@2", B: "~@2 x!4 ~@4 x!4 ~@2", C: "~@2 x ~@2 x ~@2",
})).gain(1.11)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~ A@9 B ~@18 C A C A C A C A C A ~@9 C A C A C A C A C A ~@18 C A C A C A C A C A ~@28
>`.pickRestart({
  A: "~ x ~ x", B: "~@6 x!2 ~@6 x!2", C: "~@7 x!2 ~@3 x ~@3",
})).gain(1.11)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~ A@9 B ~@18 C A C A C A C A C A ~@9 C A C A C A C A C A ~@18 C A C A C A C A C A ~@28
>`.pickRestart({
  A: "x ~@6 x!2 ~@7", B: "x!2 ~@6 x!2 ~@6", C: "x!2 ~@6",
})).gain(1.11)

stack(
  bass, piano, string_ensemble_1, synth_bass_2, synth_bass_2_soft, lead_2_sawtooth, kick, snare, clap, hihat, open_hat,
  open_hat_soft, crash, tambourine, congas, congas_2, congas_3
)