Strudelify
Physical cover art

Physical

Physical

Olivia Newton-John

KeyE minorTempo120 bpm
0:00/0:00
// Physical — Olivia Newton-John
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 7 "Guitar 4" electric guitar clean (copy of ch 6 "Guitar 3" electric guitar clean)
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · harpsichord · "Keyboard"
const harpsichord = note(`<
  ~@16 A B@2 C@2 D E F G H G H I J K L G M G N O P I Q A B@2 C@2 D E F A B@2 C@2 D E F G H G H I J K L G M G N O P I Q G
  H G H I J K L G M G N O P I Q G H G H I J K L G M G N O P I Q G H G H I J K L G M G N O P I Q G H G H I J K L G M G R
  ~
>`.pickRestart({
  A: "[e4,g4,b4]@7 ~@9", B: "[[d4,f#4,a4]@8 ~@6 [e4,g4,b4]@11 ~@7]/2", C: "[[d4,f#4,a4]@9 ~@5 [e4,g4,b4]@10 ~@8]/2",
  D: "[d4,f#4,a4]@6 ~@2 [d#4,f#4,a4]@5 ~@3", E: "~@2 [e4,g4,b4]@2 ~ [d4,f#4,a4]@2 ~",
  F: "[e4,g#4,b4]@5 ~ [d4,f#4,a4]@8 ~@2", G: "[e4,g4,b4]@3 ~ [d4,f#4,a4]@3 ~ [c4,e4,g4]@3 ~ [d4,f#4,a4]@3 ~",
  H: "[c4,e4,g4]@5 ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [d4,f#4,a4]@2 ~@2", // C D
  I: "[e4,g4,b4]@3 ~ [d4,f#4,a4]@3 ~ [b3,e4,g4]@3 ~ [d4,f#4,a4]@2 ~@2", J: "[b3,e4,g4]@3 ~@5",
  K: "[e4,g4,b4]@3 ~ [d4,f#4,a4]@3 ~ [b3,e4,g4]@3 ~ [d4,f#4,a4]@3 ~", // Em D Em D
  L: "[b3,e4,g4]@6 ~@2 [c4,e4,g4]@3 ~ [d4,f#4,a4]@3 ~", // Em C D
  M: "[c4,e4,g4]@5 ~ [e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [d4,f#4,a4]@2 ~@2, ~@3 c4 ~@4", // C Em C D
  N: "[c4,e4,g4]@5 ~ [c4,g4]@2 [c4,e4,g4] ~ [c4,e4,g4] ~ [d4,f#4,a4]@2 ~@2, ~@6 e4 ~@9", // C C5 C D
  O: "[e4,g4,b4]@3 ~ [d4,f#4,a4]@2 ~@2 [b3,e4,g4]@2 ~@2 [d4,f#4,a4]@2 ~@2", P: "[b3,e4,g4]@5 ~@11",
  Q: "[b3,e4,g4]@7 ~@9", R: "[c4,e4,g4]@5 ~ [c4,g4]@2 [c4,e4,g4] ~@7, ~@6 e4 ~@9",
})).s("gm_harpsichord").gain(0.33)

// other · electric guitar clean · "Guitar 1"
const electric_guitar_clean = note(`<
  ~ A ~ B ~ C@2 ~@2 A ~ B ~ C@2 ~@2 A ~ B ~ C@2 ~ D@3 E F G F G D@3 E F G F G ~ A ~ B ~ C@2 ~@2 A ~ B ~ C@2 ~ D@3 E F G
  F G D@3 E F G F G D@3 E F G F G D@3 E F G F G D@3 E F G F G D@3 E F G F G D@3 E F G F G D@3 E F G F G D@3 E F G F G
  D@3 H ~
>`.pickRestart({
  A: "~@6 e3 ~ g3@4 e3 ~@3", B: "~@6 e3 ~ g3@4 e3@2 ~@2", C: "[~@8 [f#3,d#4]@2 [g3,e4] ~ [a3,f#4] ~ [b3,g4]@11 ~@7]/2",
  D: "c3 ~ c3@3 ~ c3 ~ c3 ~ c3@3 ~ c3 ~", E: "c3 ~ c3@3 ~ c3 ~ c3 ~ c3@2 d3@2 d#3@2",
  F: "e2 ~ e2@3 ~ e2@2 e3@2 e2@3 ~ e2@2", G: "e3@2 e2@3 ~@11", H: "c3 ~ c3@3 ~ c3 ~@9",
})).s("gm_electric_guitar_clean").gain(0.35)

// chords · electric guitar muted · "Guitar 2"
const electric_guitar_muted = note(`<
  A@2 B@2 C@2 ~@2 A@2 B@2 C@2 ~@2 A@2 B@2 C@2 ~@18 A@2 B@2 C@2 ~@2 A@2 B@2 C@2 ~@79
>`.pickRestart({
  A: "[[a2,c3] ~ [a2,c3]@2 [b2,d3]@2 ~@2 [c3,e3]@2 ~@2 [c#3,f3]@2 [d3,f#3]@7 ~@11]/2", // Am Bm C C# D
  B: "[[a2,c3] ~ [a2,c3]@2 [b2,d3]@2 ~@2 [c3,e3]@2 ~@2 [c#3,f3]@2 f#3@8 ~@10, ~@7 d3@3 ~@6]/2", // Am Bm C C#
  C: "[[a2,c3] ~ [a2,c3]@2 [b2,d3]@3 ~ [c3,e3]@2 ~@2 [c#3,f3]@2 [d3,f#3]@7 ~@11]/2", // Am Bm C C# D
})).s("gm_electric_guitar_muted").gain(0.4)

// chords · electric guitar clean · "Guitar 3"
const electric_guitar_clean_2 = note(`<
  A B A B A C D E A B A B A C D E A B A B A C D F ~@4 G H I J ~@4 G H I J A K A K A C D F A B A B A C D F ~@4 G H I J
  ~@4 G H I J ~@4 G H I J ~@4 G H I J ~@4 G H I J ~@4 G H I J ~@4 G H I J ~@4 G H I J ~@4 G H I J ~@5
>`.pickRestart({
  A: "~@4 [e4,g4,b4] ~@5 [e4,g4,b4] ~@5", B: "~@4 [d4,f#4,a4] ~@5 [d4,f#4,a4] ~@5",
  C: "~@4 [d4,f#4,a4] ~@5 [d#4,f#4,a4]@2 ~@4", D: "~@4 [e4,g4,b4]@5 ~ [d4,f#4,a4]@5 ~",
  E: "[b3,e4,g4]@5 ~ [a3,d4,f#4]@9 ~", F: "[b3,e4,g#4]@5 ~ [a3,d4,f#4]@9 ~", G: "~@4 [d4,g4,b4]@4 ~@2 [g4,b4,e5]@3 ~@3",
  H: "[d4,g4,b4]@4 ~@2 [d4,g4,b4]@3 ~@3 [g4,b4,e5]@2 ~@2", I: "~@2 [d4,g4,b4]@2 ~ [g4,b4,e5] ~@2",
  J: "[d4,g4,b4]@2 ~ [d4,g4,b4]@2 ~ [g4,b4,e5] ~", // G Em
  K: "~@4 [d4,f#4,a4] ~@3 d4@2 [f#4,a4] ~ d3@4, ~@3 e4@5, ~@5 [a3,d4]@3", // D F#m D5
})).s("gm_electric_guitar_clean").gain(0.25).pan(0.3)

// other · guitar harmonics · "Heavy Guitar"
const guitar_harmonics = note("<~@64 A@2 B@5 ~@62>".pickRestart({
  A: "[e3@26 ~@2 e3@3 ~]/2", B: "[e3@26 ~@4 b3@23 ~ b3@5 ~ b3@18 ~@2]/5",
})).s("gm_guitar_harmonics").gain(0.57)

// other · overdriven guitar · "Solo Guitar"
const overdriven_guitar = note(`<
  ~@71 A B@2 C D E F G H I J K L M N O P Q ~@14 A B@2 C D E F G H I J K L M N O P Q ~@12
>`.pickRestart({
  A: "~@2 b2 c3 e3@2 f#3 g3 b3@2 d4@2 e4 ~ a4@2", B: "[g4@20 ~@2 a4 ~ b4@3 a4@3 g4 ~]/2", C: "f#4@4 e4@2 d4 ~ e4@5 ~@3",
  D: "~@3 b3 d4 e4 ~ f#4 ~ a4@2 b4 d5 b4 ~ d5, ~@4 g4 ~@3", E: "e5@6 d5 e5 d5@6 ~@2",
  F: "~@2 b4@3 d5@3 b4@3 a4@3 f#4@2", G: "g4@2 d5 ~ g4@4 e5@2 b4@2 f#5@2 c5@2",
  H: "g5 b4 ~ f#5 b4 g5 ~ b4 a5 d5 ~ g5 d5 a5 ~ d5", I: "b5@9 ~@7", J: "~@2 b5@2 a5@2 g5@2 f#5@2 g5@2 a5@2 g5 ~",
  K: "b5 ~", L: "~@2 b5@2 a5@2 g5@2 f#5@2 e5@2 d5@2 e5 ~", M: "g5@2 ~ g5@2 g5@2 ~ g5@2 ~ g5@2 g5@2 ~",
  N: "g5 e5 d5 e5@2 ~@3", O: "~@2 d5@2 e5@2 g5@2 f#5@3 ~ [c5,d5] ~ e5@2",
  P: "d5@3 ~ d5 e5 d5 b4 a4 b4 a4 g4 f#4 e4 ~ c4, ~@7 d4", Q: "b3@3 ~@5",
})).s("gm_overdriven_guitar").gain(0.4)

// other · tenor sax · "Tenor Sax 1"
const tenor_sax = note(`<
  ~@24 A B C D E F G H I B J K L M G M ~@16 A B C D E F G H I B J K L M G M A B C D E F G H I B J K L M G M A B C D E F
  G H I B J K L M G M A B C D E F G H I B J K L M G M A B C D E F G H I B J K ~
>`.pickRestart({
  A: "g3@2 f#3@2 e3@2 ~@4 g3@2 f#3@2 e3 ~", B: "~@2 g3@2 f#3@2 e3@2 f#3 ~ f#3@2 e3 ~@3", C: "g3 a3 b3 ~@2 b3 a3 g3",
  D: "~@2 b3@2 a3@2 g3@2 a3 ~ a3@2 g3@3 ~", E: "b3 ~ b3@2 a3@2 ~@2 a3 ~ a3@2 g3@2 ~@2",
  F: "~@6 g3@2 a3 ~ a3@2 g3@2 ~@2", G: "b3 ~ b3@2 a3@3 ~ a3 ~ a3@2 g3@2 ~@2", H: "~@6 g3@2 a3 ~ a3@2 g3 ~@3",
  I: "g3@2 f#3@2 e3 ~@5 g3@2 f#3@2 e3 ~", J: "g3@2 a3@2 b3 ~@5 b3@2 a3@2 g3@2",
  K: "~@2 b3@2 a3@2 g3@2 a3 ~ a3@2 g3@2 ~@2", L: "b3 ~ b3@2 a3@3 ~ a3 ~ a3@2 g3@3 ~", M: "~@6 g3@2 a3 ~ a3@2 g3@3 ~",
})).s("gm_tenor_sax").gain(0.25)

// other · tenor sax · "Tenor Sax 2"
const tenor_sax_2 = note(`<
  ~@24 A B C D E F G H A B C I E F E J ~@16 A B C D E F G H A B C I E F E J A B C D E F G H A B C I E F E J A B C D E F
  G H A B C I E F E J A B C D E F G H A B C I E F E J A B C D E F G H A B C K ~
>`.pickRestart({
  A: "e3@2 d3@2 c3@2 ~@4 e3@2 d3@2 c3 ~", B: "~@2 e3@2 d3@2 c3@2 d3 ~ d3@2 c3@2 ~@2",
  C: "e3@2 f#3@2 g3 ~@5 g3@2 f#3@2 e3 ~", D: "~@2 g3@2 f#3@2 e3 ~ f#3 ~ f#3@2 e3@2 ~@2",
  E: "g3 ~ g3@2 f#3@3 ~ f#3 ~ f#3@2 e3@3 ~", F: "~@6 e3@2 f#3 ~ f#3@2 e3@2 ~@2",
  G: "g3 ~ g3@2 f#3@2 ~@2 f#3 ~ f#3@2 e3@2 ~@2", H: "~@6 e3@2 f#3 ~ f#3@2 e3 ~@3",
  I: "~@2 g3@2 f#3@2 e3@2 f#3 ~ f#3@2 e3@2 ~@2", J: "~@6 e3@2 f#3 ~ f#3@2 e3@3 ~", K: "~@2 g3@2 f#3@2 e3@2 f#3 ~@7",
})).s("gm_tenor_sax").gain(0.22)

// other · tenor sax · "Tenor Sax 3"
const tenor_sax_3 = note(`<
  ~@28 A B A C ~@4 D B E C ~@20 A B A C ~@4 D B E C ~@4 A B A C ~@4 D B E C ~@4 A B A C ~@4 D B E C ~@4 A B A C ~@4 D B
  E C ~@4 A B A C ~@5
>`.pickRestart({
  A: "e3 ~ e3@2 d3@3 ~ d3 ~ d3@2 b2@3 ~", B: "~@6 b2@2 d3 ~ d3@2 b2@2 ~@2", C: "~@6 b2@2 d3 ~ d3@2 b2@3 ~",
  D: "e3 ~ e3@2 d3@3 ~ d3 ~ d3@2 b2@2 ~@2", E: "e3 ~ e3@2 d3@2 ~@2 d3 ~ d3@2 b2@3 ~",
})).s("gm_tenor_sax").gain(0.25)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D E F@3 G H I J K F@3 G H I J K A@2 B@2 C@2 D E A@2 B@2 C@2 D E F@3 G H I
  J K F@3 G H I J K F@3 G H I J K F@3 G H I J K F@3 G H I J K F@3 G H I J K F@3 G H I J K F@3 G H I J K F@3 G H I J K
  F@3 L ~
>`.pickRestart({
  A: "[a1 ~ a1@2 b1@2 ~@2 c2@2 ~@2 c#2@2 d2@6 ~@2 e2@2 g2@4 e2@4]/2",
  B: "[a1 ~ a1@2 b1@4 c2@2 ~@2 c#2@2 d2@6 ~@2 e2@2 g2@4 e2@4]/2",
  C: "[a1 ~ a1@2 b1@2 ~@2 c2@2 ~@2 c#2@2 d2@6 ~@2 d2@2 d#2@4 ~@2 d#2@2]/2", D: "e2@4 ~@2 e2 ~ e2@6 b1@2",
  E: "e1@2 ~ e1 ~ e1 g1 e1", F: "c2 ~ c2@3 ~ c2 ~ c2 ~ c2@3 ~ c2 ~", G: "c2 ~ c2@3 ~ c2 ~ c2 ~ c2@2 d2@2 d#2@2",
  H: "e1 ~ e1@2 ~@2 e1@2 e2@2 e1@2 ~@2 e1@2", I: "e2@2 e1@3 ~ [e3,a3]@8 ~@2", J: "e1 ~ e1@3 ~ e1@2 e2@2 e1@3 ~ e1@2",
  K: "e2@2 e1@3 ~ [g3,d4]@9 ~", L: "c2 ~ c2@3 ~ c2 ~ c2 ~@7",
})).s("gm_electric_bass_finger").gain(0.5)

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

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!23 [~ x ~@2] [~ x ~ x]!31 [~ x ~@2] [~ x ~ x]!75 [~ x ~@2] ~>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x ~ x ~ x]!131 [~ x ~ x ~@4] ~>").gain(0.43)

// drums · mid tom
const mid_tom = s("mt").struct("<~@23 A ~@15 B ~@15 A ~@15 B ~@15 B ~@15 B ~@15 B ~@13>".pickRestart({
  A: "~@5 x!3", B: "~@7 x",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@23 A ~@15 B ~@15 A ~@15 B ~@15 B ~@15 B ~@15 B ~@13>".pickRestart({
  A: "~@3 x!2 ~@3", B: "~@5 x ~@2",
})).gain(0.64)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!4]!131 [x!3 ~] ~>").gain(2.53)

stack(
  harpsichord, electric_guitar_clean, electric_guitar_muted, electric_guitar_clean_2, guitar_harmonics,
  overdriven_guitar, tenor_sax, tenor_sax_2, tenor_sax_3, bass, kick, snare, hihat, mid_tom, high_tom, crash, cabasa
)

More by Olivia Newton-John