Strudelify

Careless Whisper

Liam Coggon

KeyG majorTempo100 bpm
0:00/0:00
// Careless Whisper — Liam Coggon
// 100 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (1/8 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5936449; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 37 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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.

// other · soprano sax · "Soprano Saxophone"
const soprano_sax = note("<A@2 B@7 C@3 D@2 E F G H I J K L M N O L P Q K L M N O L P Q R>".pickRestart({
  A: "[~@9 a4@23]/2", B: "[f4@46 f4@45 g4@23 c4@23 a4@46 f4@41]/7", C: "[~@5 f4@45 g4@23 c4@23]/3",
  D: "[a5@2 a5@2 ~@2 g5@4 f5@4 d5@6 ~@10 d5!2]/2", E: "a5@2 a#5 g5@2 d5 f5 d5", F: "a5 g5 f5 e5",
  G: "~@2 d5 e5 f5@2 g5 a5@5 ~@4", H: "~@2 d5 e5 f5@2 d5 c6@3 a#5@4 ~@2", I: "a5@2 a#5@2 a5@2 a#5@2 a5@2 a#5 a5@4 f5",
  J: "a5@4 g5@4 f5@4 e5@3 d5", K: "a4 d5 f5@2", L: "a#4!2 d5 c5", M: "~ d5@3 a#4@3 a4", N: "c5@8 g4@4 ~@3 a4",
  O: "d5!2 a4@2", P: "d5@2 d5@2 a#4@3 a4", Q: "c5", R: "a4",
})).s("gm_soprano_sax").gain(0.45)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<A@2 B@7 C@3 ~@7 D E F G H I J I K E F G H I J I K L>".pickRestart({
  A: "[~@9 f3@23]/2", B: "[d3@46 d3@45 e3@23 g3@23 f3@46 d3@41]/7", C: "[~@5 d3@45 e3@23 g3@23]/3", D: "~ c4 a3 g3",
  E: "a4@3 a4!2 g4!3 g4@2 f4 f4@5", F: "a4@2 f4@2 a4 f4@2 a#4@3 a4@2 g4@2 f4@2",
  G: "~@2 f4 a4 a4@2 g4@2 g4@2 f4 f4@4 f4", H: "g4 g4@2 g4@2 e4 f4@2 e4@4 ~@3 e4", I: "a4@2 a4!3 g4!3 g4@2 f4 f4@4 f4",
  J: "a4@2 f4@2 a4@2 f4 a#4@3 a4@2 g4@2 f4@2", K: "g4 g4@2 f4@2 g4@3 a4@4 g4@4", L: "a4",
})).s("gm_tenor_sax").gain(0.45)

// other · tenor sax · "Tenor Saxophone" · soft notes
const tenor_sax_soft = note("<~@12 A B C D E F G H ~@17>".pickRestart({
  A: "a3", B: "f3", C: "d3", D: "c4!2 a3 g3", E: "f3 a3 d4@2", F: "f3 g3 d4 c4", G: "d4", H: "c4 ~@3",
})).s("gm_tenor_sax").gain(0.25)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note("<A@2 B C@4 D@5 ~@7 E F G H I J G H K F G H I J G H K L>".pickRestart({
  A: "[~@18 d2@17 d2@6 d2@23]/2", B: "g2@17 g2@6 g2@9",
  C: "[~@2 a2@11 ~ a#2@17 a#2@6 a#2@22 a2@17 ~ a2@5 a2@23 d2@17 d2@6]/4",
  D: "[d2@23 g2@17 g2@6 g2@11 a2@11 ~ a#2@17 a#2@5 a#2@23 a2@17 a2@6 a2@23]/5", E: "~@3 a2 a2@4", F: "d2@3 d2 d2@3 d2",
  G: "g2@3 g2 g2@2 a2@2", H: "a#2@3 a#2 a#2@4", I: "a2@3 a2 a2@2 a2@2", J: "d2@3 d2 d2@4", K: "a2@3 a2 a2@4", L: "d2",
})).s("gm_baritone_sax").gain(0.45)

// other · baritone sax · "Baritone Saxophone" · soft notes
const baritone_sax_soft = note("<~@12 A B C D A B C E ~@17>".pickRestart({
  A: "d2@3 d2 d2@4", B: "g2@3 g2 g2@2 a2@2", C: "a#2@3 a#2 a#2@4", D: "a2@3 a2 a2@4", E: "a2@3 ~@5",
})).s("gm_baritone_sax").gain(0.25)

stack(soprano_sax, tenor_sax, tenor_sax_soft, baritone_sax, baritone_sax_soft)