Strudelify

Love Is The Drug

Roxy Music

KeyA minorTempo126 bpm
0:00/0:00
// Love Is The Drug — Roxy Music
// 126 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 12 tenor sax (copy of ch 7 tenor sax)
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 29.
setcpm(126/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 · "Love Drug"
const bass = note(`<
  A B@5 C D E F C G H I C J E K L M N O P Q R S P T U O P V R W L X Y Z AA AB R AC AD AE AF AG AH AB R AI AJ AE AK AL AM
  AN@2 AO AM AN@2 AO AP M R O L AQ U AR AS V R AT AU AV AW AX AY Q R AZ BA BB U O BC V R BD L BE BF BG BH AB R BI BJ AE
  AF BK BL AB R AI AJ AE AK AL AM AN@2 AO AM AN@2 BM@2 AO ~
>`.pickRestart({
  A: "~@4 a1 ~ a1@2 a1 ~ a1@2 a1 ~ a1@2", B: "a1 ~ a1 ~ a1 ~ a1@2 a1 ~ a1@2 a1 ~ a1@2",
  C: "a1 ~ c2 ~ d2@2 ~@2 d2@4 d2 ~@3", D: "~@2 a#1@2 d2@2 ~@4 d2 ~ f1@2 ~@2", E: "f1@4 a1@2 ~@2 a1@4 a1 ~@3",
  F: "~@2 a1@2 a1 ~@5 g1 ~ a1 ~ g1 ~", G: "~@2 a#1@2 d2 ~@5 d2 ~ c2 ~@2 c2", H: "g1@2 e1 g1 a1@2 ~@2 a1@3 g1 a1 ~@3",
  I: "~@2 a1@2 a1 ~@5 a1@3 ~ g1 ~", J: "~@2 a#1@2 d2 ~@5 d2!2 f1@2 ~@2", K: "~@2 a1@3 ~@5 a1@3 ~ g1 ~",
  L: "a1 c2 ~ c2 d2@2 ~@2 d2@3 c2 d2 ~@3", M: "~@2 a1 c2 d2@2 ~@4 d2!2 f1@2 ~@2",
  N: "f1@2 f1!2 a1@2 ~@2 a1@3 g1 a1 ~@3", O: "~@2 a1 g1 a1 ~@5 a1 g1 a1 ~ g1 ~", P: "a1 ~ c2 ~ d2@2 ~@2 d2@3 c2 d2 ~@3",
  Q: "~@2 a1 c2 d2@2 ~@4 d2 ~ f1@2 ~@2", R: "f1@4 a1@2 ~@2 a1@3 g1 a1 ~@3", S: "~@2 a1 g1 a1 ~@5 g1 ~ a1 ~ g1 ~",
  T: "~@2 a1 c2 d2 ~@5 d2 ~ c2 ~@2 c2", U: "g1@2 g1!2 a1@2 ~@2 a1@3 g1 a1 ~@3", V: "~@2 f2 c2 d2@2 ~@4 d2!2 f1@2 ~@2",
  W: "~@2 a1 g1 a1 ~@5 a1 g1 a1 ~ c2 ~", X: "~@2 f2 c2 d2@2 ~@4 d2!2 c2@2 ~@2", Y: "c2@2 f1!2 a1@2 ~@2 a1@3 g1 a1 ~@3",
  Z: "~@2 a1 g1 a1 ~@5 a1 g1 a1 ~ e1 ~", AA: "g1 ~ a1 ~ d2@2 ~@2 d2@3 c2 d2 ~@3",
  AB: "~@2 d2 c2 d2@2 ~@4 d2!2 f1@2 ~@2", AC: "~@2 a1 g1 a1 ~@5 a1 g1 a1 ~ a1!2",
  AD: "d2@2 c2 a1 e1@2 ~@4 e2 d2 e2 ~@3", AE: "~@2 e2 d2 e2 ~@5 e2!2 g1@2 ~@2", AF: "g1@2 g1!2 a1@2 ~@4 a1 g1 a1 ~@3",
  AG: "~@2 a1 g1 a1 ~@7 a1 ~ g2 ~", AH: "a2 a2@2 e2 d2@2 ~@4 d2 c2 d2 ~@3", AI: "~@2 a1 g1 a1 ~@5 a1!2 d2 ~ a1!2",
  AJ: "a1!2 g1@2 e1@2 ~@4 e2 d2 e2 ~@3", AK: "g1@2 g1!2 a1@2 ~@4 a1 g1 a1 ~ g1!2", AL: "g1@2 g#1 ~ a1@2 ~@10",
  AM: "~ c2@3", AN: "[e2@2 ~ f2 g2@15 ~ f2@4 ~@2 e2@4 ~@2]/2", AO: "d2 ~ c2@6", AP: "~@4 d2@2 ~@2 d2@3 c2 d2 ~@3",
  AQ: "~@2 f2 c2 d2 ~@5 d2!2 c2 ~@2 c2", AR: "~@2 a1 g1 a1 ~@5 a1 g1 a1 ~ g1!2",
  AS: "a1 ~ g1 ~ d2@2 ~@2 d2@3 c2 d2 ~@3", AT: "~@2 a1 g1 a1@2 ~@2 a1!2 c2 a1 c2 ~ c2@2",
  AU: "a1@2 c2@2 d2@2 ~@2 d2@3 c2 d2 ~@3", AV: "~@2 a1 c2 d2 ~@5 d2!2 c2 ~@2 c2",
  AW: "g1@2 g1 ~ a1@2 ~@2 a1@3 g1 a1 ~@3", AX: "~@2 a1 g1 a1 ~@5 a1 g1 d2@2 c2 a1",
  AY: "c2@2 a1 g1 d2@2 ~@2 d2@3 c2 d2 ~@3", AZ: "~@2 a1 g1 a1 ~@3 a1!4 d2@2 c2 ~",
  BA: "a1@2 c2 ~ d2@2 ~@2 d2@3 c2 d2 ~@3", BB: "~@2 f2 c2 d2 ~@5 d2 ~ c2 ~@2 c2",
  BC: "a1 c2@2 ~ d2@2 ~@2 d2@3 c2 d2 ~@3", BD: "~@2 a1 g1 a1 ~@5 a1 g1 c2 ~ c2 ~",
  BE: "~@2 d2 c2 d2@2 ~@4 d2!2 c2@2 ~@2", BF: "g1@2 f1!2 a1@2 ~@2 a1@3 g1 a1 ~@3",
  BG: "~@2 a1 g1 a1 ~@3 a1!2 c2 a1 d2@2 e1!2", BH: "g1@2 ~@2 d2@2 ~@2 d2@3 c2 d2 ~@3",
  BI: "~@2 a1 g1 a1 ~@3 a1!2 c2 a1 d2 a1!3", BJ: "a1!2 g1 ~ e1@2 ~@4 e2 d2 e2 ~@3",
  BK: "~@2 a1 g1 a1 ~@5 a1 ~ g2 a1 g#2 g#1", BL: "a2 e2 a1 ~ d2@2 ~@4 d2 c2 d2 ~@3", BM: "d2 ~ f2@2 ~ e2@2 ~",
})).s("gm_electric_bass_finger").gain(0.25)

// chords · rock organ
const rock_organ = note(`<
  ~@6 A B@2 ~ C D E ~ A B@2 ~ C D E ~ A B@2 F C D E ~ A B@2 ~ C D E ~ A B@2 ~ G H@2 ~ A B@2 ~ G I@2 J ~@8 A B@2 K C D E
  ~ A B@2 ~ C D E ~ A B@2 ~ C D E ~ A B@2 ~ C D E ~ A B@2 ~ G H@2 ~ A B@2 ~ G I@2 J ~@11
>`.pickRestart({
  A: "~@4 [d4,f4,a4] ~@3 [d4,f4,a4]@3 ~ [d4,f4,a4] ~ [d4,f4,a4] ~", // Dm
  B: "[~@10 [c4,a4] ~ [c4,f4,a4]@7 ~ [e4,a4]@2 ~@2 [e4,a4]@2 ~ a4 [c5,e5,a5]@2 a4 ~]/2", // F A5 Am
  C: "~@4 [d4,a4] ~@3 [d4,a4]@3 ~ [d4,a4] ~ [d4,a4] ~", D: "~@10 [d4,a4] ~ [c4,g4] ~ [c4,g4] ~",
  E: "[c4,g4]@2 ~@2 [c4,e4]@8 [c4,e4] ~@3", F: "~@12 a5@2 e5 ~",
  G: "~@4 [e4,g4,b4] ~@3 [e4,g4,b4]@3 ~ [e4,g4,b4] ~ [e4,g4,b4] ~", // Em
  H: "[~@10 [d4,b4] ~ [d4,g4,b4]@7 ~ [e4,a4]@2 ~@2 [e4,a4]@2 ~ a4 [c5,e5,a5]@2 a4 ~]/2", // G A5 Am
  I: "[~@10 [d4,b4] ~ [d4,g4,b4]@7 ~ [e4,a4]@2 ~@2 [e4,a4]@2 ~@6]/2", J: "[d4,g4] ~ [e4,a4] ~@5",
  K: "~@11 a5 c6@2 a5 ~",
})).s("gm_rock_organ").gain(0.22).pan(0.4)

// chords · synth bass 1
const synth_bass_1 = note(`<
  A ~@5 B C D@2 B E D@2 B C D@2 B E D@2 B C D@2 B E D@2 B C D@2 B E D@2 B C D@2 F G D@2 B C D@2 F G D H ~@8 B C D@2 B E
  D@2 B C D@2 B E D@2 B C D@2 B E D@2 B C D@2 B E D@2 B C D@2 F G D@2 B C D@2 F G D H ~@11
>`.pickRestart({
  A: "[e5,a5] ~@7", B: "~@8 [a4,d5] ~@5 [a4,d5] ~", C: "~@8 [a4,d5] ~@5 [c5,f5] ~", D: "~@8 [e4,a4] ~@7",
  E: "~@8 [a4,d5] ~@5 [g4,c5] ~", F: "~@8 [b4,e5] ~@5 [b4,e5] ~", G: "~@8 [b4,e5] ~@5 [d5,g5] ~",
  H: "[d4,g4] ~@3 [e4,a4] ~@11", // G5 A5
})).s("gm_synth_bass_1").gain(0.14).pan(0.1)

// chords · synth bass 1 · soft notes
const synth_bass_1_soft = note(`<
  ~@6 A@2 B ~ C@2 D ~ A@2 B ~ C@2 D ~ A@2 B ~ C@2 D ~ A@2 B ~ C@2 D ~ A@2 B ~ E@2 B ~ A@2 B ~ E@2 B ~ F G H I J K@2 L
  A@2 B ~ C@2 D ~ A@2 B ~ C@2 D ~ A@2 B ~ C@2 D ~ A@2 B ~ C@2 D ~ A@2 B ~ E@2 B ~ A@2 B ~ E@2 B ~ F G H I J K@2 M@2 L ~
>`.pickRestart({
  A: "[~@4 d3@21 ~@2 f2@5]/2", B: "~@3 a2@13", C: "[~@3 d3@16 ~@8 c3@5]/2", D: "~@3 a2@11 ~@2",
  E: "[~@4 e3@21 ~@2 g2@5]/2", F: "~@4 g5@2 g4 ~ g4@2 g5@2 g4 ~ g4!2", G: "g5@2 g4 ~ g5@2 g4 ~ g4@2 g5@2 g4 g5 g4!2",
  H: "g5@2 g4@2 g5@2 g4 ~ g4@2 g5@2 g4 ~ g4@2, f5 ~@15", I: "g5@2 g4@2 g5@2 g4 ~ g4 ~ g5@2 ~@2 g5!2, ~@3 g4",
  J: "g5@2 g4@2 g5@2 g4 ~ g4@2 g5@2 g4 ~ g4!2", K: "g5@2 g4@2 g5@2 g4 ~ g4@2 g5@2 g4 ~ g4@2", L: "g5@3 ~@13",
  M: "g5@3 ~ g5@2 g4 ~ g4@2 g5@2 g4 ~ g4@2",
})).s("gm_synth_bass_1").gain(0.06).pan(0.1)

// other · overdriven guitar
const overdriven_guitar = note("<~@112 [~@5 e4@2 ~] ~@8>").s("gm_overdriven_guitar").gain(0.22).pan(0.3)

// chords · tenor sax
const tenor_sax = note("<~@2 A@2 ~@11 B C ~@2 B D ~@72 B C B C B D B D B C B D B D B E@2 ~@11>".pickRestart({
  A: "[~@2 c4 a3@13]/2", B: "~@14 [d4,a4] ~", C: "[f4,c5] ~ [a4,e5]@11 ~@3", D: "[f4,c5] ~ [g4,d5]@11 ~@3",
  E: "[[f4,c5] ~ [a4,e5]@18 ~@12]/2", // F5 A5
})).s("gm_tenor_sax").gain(0.29).pan(0.7)

// chords · clavinet
const clavinet = note(`<
  ~@6 A@6 B@8 C@8 D@8 E ~ F@8 G@6 H@5 I@4 J@4 K L@8 M@2 N@6 O@4 P@4 Q@4 R@2 S@2 T@4 U@4 V@4 W X@2 Y@3 Z AA AB AC@2
>`.pickRestart({
  A: "[~@5 [f4,a4,d5]@21 ~@3 [c5,f5]@5 ~@3 a5@29 ~@3 d5@21 ~@2 [g4,c5]@4, ~@4 d3@22 ~@2 [f3,f4]@6 ~ a3@30 ~@2 d3@22 ~@2 [c3,e4]@5, ~@36 [a4,c5]@30 ~@2 [f4,a4]@21 ~@7]/6", // Dm F5 C5 F C Am F
  B: "[~@3 a2 [e4,a4]@31 ~@2 [f4,a4,d5]@21 ~@3 [c5,f5]@5 ~@3 a5@29 ~@3 d5@21 ~@2 [g4,c5]@4, ~@3 [a3,c4]@32 ~ d3@22 ~@2 [f3,a4]@6 ~ a3@30 ~@2 d3@22 ~@2 [c3,e4]@5, ~@34 [c5,e5]@15 ~ [f4,a4]@11 ~@3]/8", // A5 Dm F5 C5 Am F C F
  C: "[~@3 a2 [e4,a4]@31 ~@2 [f4,a4,d5]@21 ~@3 [c5,f5]@5 ~@3 a5@30 ~@2 d5@21 ~@2 [g4,c5]@4, ~@3 c4@31 ~@2 d3@22 ~@2 [f3,a4]@6 ~ a3@31 ~ d3@22 ~@2 [c3,e4]@5, ~@34 [c5,e5]@15 ~ [f4,a4]@11 ~@3]/8", // A5 Dm F5 C5 F C F
  D: "[~@3 a2 [e4,a4]@32 d3 [f4,a4,d5]@21 ~@3 [c5,f5]@5 ~@3 a5@29 ~@3 d5@21 ~@2 [g4,c5]@4, ~@3 c4@32 ~@25 [f3,a4]@6 ~ a3@31 ~ d3@23 ~ [c3,e4]@5, ~@34 [c5,e5]@15 ~ [f4,a4]@11 ~@3]/8", // A5 Dm F5 C5 F C F
  E: "~@4 [e4,a4]@7 ~@5, ~@3 [a2,c4]@8 ~@5", // A5 Am
  F: "[~@5 [f4,a4,d5]@21 ~@3 [c5,f5]@6 ~@2 a5@30 ~@2 [g4,b4,e5]@22 ~@2 [d5,g5]@6 ~@2 a5@27, ~@4 d3@22 ~@2 [f3,a4]@7 a3@31 ~@2 e3@23 ~ [g3,b4]@7 a3@29, ~@36 [c5,e5]@31 ~@33 [c5,e5]@28]/8", // Dm F5 Em G5 F G C
  G: "[~@5 [f4,a4,d5]@21 ~@3 [c5,f5]@6 ~@2 a5@31 ~ [g4,b4,e5]@21 ~@3 [d5,g5]@3, ~@4 d3@22 ~@2 [f3,a4]@7 a3@32 ~ e3@21 ~@3 [g3,b4]@4, ~@36 [c5,e5]@31 ~@29]/6", // Dm F5 Em G5 F G C
  H: "[~@5 a5@30 ~ [c4,e4,g4,c5]@15 ~ [g3,d4,g4,b4]@15 ~ [a3,f4,a4,c5]@5 ~ [g3,e4,g4,c5]@5 ~, ~@3 a3@31 ~@46, ~@4 [c#5,e5]@31 ~@45]/5", // C G F C C#m
  I: "[[f3,d4,f4,c5]@3 ~ [g3,c4,e4,c5]@15 ~ [c4,e4,g4,c5]@15 ~ [g3,d4,g4,b4]@15 ~ [a3,f4,a4,c5]@4 ~@2 [g3,e4,g4,c5]@4 ~@2]/4", // Dm7 C G F C
  J: "[[f3,d4,f4,c5]@3 ~ [g3,c4,e4,c5]@14 ~@3 [f4,a4,d5]@21 ~@3 [c5,f5]@5 ~@4 c#4@7 ~ [c5,e5,a5]@2, ~@20 d3@22 ~@2 [f3,a4]@6 ~ a3@9 ~@4, ~@52 [c5,e5]@9 ~@3, ~@53 a5@8 ~@3]/4", // Dm7 C Dm F5 Am F C
  K: "~ [c5,e5,a5]@7", // Am
  L: "[~@5 d5@21 ~@2 [g4,c5]@6 ~@2 [e4,a4]@31 ~@2 [f4,a4,d5]@21 ~@3 [c5,f5]@5 ~@3 a5@27, ~@3 d3@23 ~ [c3,e4]@7 ~ [a2,c4]@32 ~ d3@21 ~@3 [f3,a4]@6 ~ a3@29, ~@2 [f4,a4]@11 ~@37 [c5,e5]@14]/8", // C5 A5 Dm F5 C Am F C
  M: "[~@5 d5@18 ~@5 [g4,c5,e5]@4, ~@3 d3@20 ~@4 c3@5, ~@4 [f4,a4]@19 ~@9]/2", // C F
  N: "[~@4 [e4,a4]@30 ~@3 [f4,a4,d5]@20 ~@4 [c5,f5]@5 ~@3 a5@26 ~, ~@3 [a2,c4]@31 ~@2 d3@21 ~@3 [f3,a4]@6 ~ a3@27 ~@2, ~@34 [c5,e5]@13 ~]/6", // A5 Dm F5 Am F C
  O: "[~@5 d5@20 ~@3 [g4,c5]@6 ~ a2 [e4,a4]@28, ~@3 d3@21 ~@3 [c3,e4]@7 ~@30, ~@4 [f4,a4]@21 ~@10 c4@28 ~]/4", // C5 A5 C F
  P: "[~@5 [f4,a4,d5]@19 ~@5 [c5,f5]@5 ~@3 a5@26 ~, ~@4 d3@20 ~@4 [f3,a4]@6 ~ a3@28 ~, ~@36 [c5,e5]@27 ~]/4", // Dm F5 F C
  Q: "[~@5 d5@20 ~@3 [g4,c5]@6 ~ a2 [e4,a4]@24 ~@4, ~@3 d3@21 ~@3 [c3,e4]@7 ~@30, ~@4 [f4,a4]@20 ~@11 c4@25 ~@4]/4", // C5 A5 C F
  R: "[~@5 [f4,d5]@17 ~@7 c5@2 ~, ~@4 d3@17 ~@7 [f3,f4,a4]@3 ~]/2", S: "[~@4 [c5,e5]@23 ~@5, ~@3 a3@23 ~@6]/2",
  T: "[~@5 [g4,e5]@17 ~@7 [d5,g5]@5 ~@3 a5@22 ~@5, ~@4 e3@17 ~@7 [g3,b4]@6 ~ a3@23 ~@6, ~@36 [c5,e5]@23 ~@5]/4", // C G5 G C
  U: "[~@5 [f4,d5]@13 ~@11 [c5,f5]@5 ~@3 a5@21 ~@6, ~@4 d3@13 ~@11 [f3,a4]@6 ~ a3@23 ~@6, ~@18 [c5,e5]@11 ~@3]/4", // Dm F5 F C
  V: "[~@5 [g4,b4,e5]@17 ~@7 [d5,g5]@5 ~@3 a5@27, ~@4 e3@18 ~@6 [g3,b4]@6 ~ a3@29, ~@9 [c#5,e5]@7]/4", // Em G5 G C#m
  W: "~@4 [c4,e4,g4,c5]@9 ~@3", X: "[~@4 [g3,d4,g4,b4]@14 ~@2 [a3,f4,a4,c5]@4 ~@2 [g3,e4,g4,c5]@3 ~@3]/2",
  Y: "[[f3,d4,f4,c5] ~ [g3,c4,e4,c5]@7 ~ [c4,e4,g4,c5]@7 ~ [g3,d4,g4,b4]@6]/3", // Dm7 C G
  Z: "~@2 [a3,f4,a4,c5]@2 ~ [g3,e4,g4,c5]@2 ~", AA: "[f3,d4,f4,c5] ~ [a3,f4,a4,c5]@2 ~ [g3,e4,g4,c5]@2 ~",
  AB: "[f3,d4,f4,c5]@3 ~ [a3,f4,a4,c5]@5 ~ [g3,e4,g4,c5]@4 ~@2", AC: "[[f3,d4,f4,c5]@2 ~@2 [g3,c4,e4,c5]@19 ~@9]/2",
})).s("gm_clavinet").gain(0.15).pan(0.8)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A ~@5 B C D@2 B E D@2 B C D@2 B E D@2 B C D@2 B E D@2 B C D F B G D@2 B C D@2 H I D@2 B C D@2 H I D J K L M N@2 O P Q
  R C D@2 B S D@2 B C D@2 B E D@2 B C D@2 B S D@2 B C D F B G D@2 B C D@2 H I D@2 B C D@2 H I D J T U V@3 W X Y@2 Z@2
>`.pickRestart({
  A: "[e5,a5,e6,a6] ~@7", B: "~@8 [a4,d5] ~@5 [a4,d5] ~", C: "~@8 [a4,d5] ~@5 [c5,f5] ~", D: "~@8 [e4,a4] ~@7",
  E: "~@8 [a4,d5] ~@5 [g4,c5] ~", F: "~@2 c5 ~@5 [e4,a4] ~@7, ~@3 e5@8 ~@5, ~@4 a5@7 ~@5",
  G: "~@2 [f4,a4,d5]@6 [a4,d5] ~ [g4,c5]@4 [g4,c5] ~, ~@5 e4@3", H: "~@8 [b4,e5] ~@5 [b4,e5] ~",
  I: "~@8 [b4,e5] ~@5 [d5,g5] ~", J: "[d4,g4] ~@3 [e4,a4] ~@11",
  K: "~@4 [g4,g5]@2 g4 ~ g4 ~ [e4,g4,c5,g5] ~ [e4,g4,c5]@2 g4 [e4,g4,c5], ~@4 [e4,c5]@5 ~@7", // G C
  L: "[e4,g4,c5,g5]@2 g4 ~ [g4,g5]@2 g4 ~ g4 ~ [d4,g4,b4,g5] ~ g4 g5 g4!2, ~@4 [d4,b4]@5 ~@3 [d4,b4]@3 ~", // C G
  M: "[f5,g5]@2 g4@2 g5@2 g4 ~ [g4,d5]@2 [g4,g5]@2 [g4,d5]@2 g4@2, ~@4 [f4,a4,c5]@5 ~ [e4,c5]@4 ~@2", // Fsus2 G5 G G5 F C
  N: "[[d4,f4,c5,g5]@2 g4@2 [g4,g5]@2 g4 ~ g4 ~ g5@2 ~@2 g5!2 g5@2 g4@2 [g4,g5]@2 g4 ~ g4 ~ [e4,g4,c5,g5] ~ [e4,g4,c5]@2 g4 [e4,g4,c5], ~@4 [e4,c5,e5]@14 ~@2 [e4,c5]@5 ~@7, ~@3 g4 ~@4]/2", // Dm7 G C
  O: "[e4,g4,c5,g5]@2 g4 ~ [g4,g5]@2 g4 ~ g4 ~ [d4,g4,b4,g5] ~ [d4,b4]@2 g4 ~, ~@4 [d4,b4]@5 ~@7", // C G
  P: "[d4,g4,b4,g5]@2 [c4,g4] c4 d#4 ~ g4 ~ g4@2 c4 d#4 [f4,g4] ~ g4@2, ~@4 [a4,c5]@5 ~@4 f4@3, ~@2 g5 ~@2 g5 ~@2, ~@5 d#4@4 ~ [e4,c5]@5 ~", // G C5 Fsus2 Am C
  Q: "[d4,f4,c5,g5]@2 c4!2 [c4,e4,g4]@12", R: "c4@3 ~@5 [a4,d5] ~@5 [a4,d5] ~",
  S: "~@2 [f4,a4,d5]@6 [a4,d5] ~@5 [g4,c5] ~", // Dm D5 C5
  T: "~@4 [g4,g5]@2 g4 ~ g4 ~ [e4,g4,c5,g5] ~ [e4,c5]@2 g4 [e4,c5], ~@4 [e4,c5]@5 ~@7", // G C
  U: "[e4,g4,c5,g5]@2 g4 ~ [g4,g5]@2 g4 ~ g4 ~ [d4,g4,b4,g5] ~@2 g5 g4!2, ~@4 [d4,b4]@5 ~@3 [d4,b4]@3 ~", // C G
  V: "[[f5,g5]@2 g4@2 g5@2 [e4,g4]@2 [g4,c5]@2 [g4,c5,g5]@2 [f4,g4]@2 g4@2 ~ f4 ~@2 g5@2 g4 ~ g4 ~ g5@2 ~@2 g5!2 g5@2 g4@2 [g4,g5]@2 g4 ~ g4 ~ [e4,g4,c5,g5] ~ [e4,g4,c5]@2 g4 [e4,c5], ~@4 [f4,a4,c5]@5 ~@5 d5@5 ~@9 g4@4 ~@16, ~@16 [d4,f4,c5,g5]@2 ~@2 [e4,c5,e5]@14 ~@2 [e4,c5]@5 ~@7]/3", // Fsus2 Em C5 Fsus2 G C F Dm7 …
  W: "[e4,g4,c5,g5]@2 g4 ~ [g4,g5]@2 g4 ~ g4 ~ [d4,g4,b4,g5] ~ [d4,g4]@2 g4 ~, ~@4 [d4,b4]@5 ~@7", // C G G5 G
  X: "[d4,g4,b4,g5]@2 g4 ~ g5@2 g4 ~ g4@2 [g4,g5]@2 g4 ~ g4@2, ~@4 [f4,a4,c5]@5 ~ [e4,c5]@5 ~", // G F C
  Y: "[d4,f4,c5,g5]@3 ~ g5@2 g4 ~ g4@2 [g4,g5]@2 g4 ~ g4@2, ~@4 [f4,a4,c5]@5 ~ [e4,c5]@5 ~", // Dm7 G F C
  Z: "[[d4,f4,c5,g5]@3 ~ [c4,e4]@4 [c4,e4,a4]@13 ~@11]/2", // Dm7 C Am
})).s("gm_electric_guitar_clean").gain(0.28).pan(0.8)

// other · electric guitar clean
const electric_guitar_clean_2 = note(`<
  ~@6 A@2 B@2 C@2 D@2 A@2 E@2 F@7 ~ C@2 G ~ A@2 H ~ C@2 G ~ A@2 H ~ I@2 H ~ A@2 H ~ I@2 H ~@9 A@2 H ~ J@2 G ~ A@2 H ~
  C@2 G ~ K@2 H ~ C@2 G ~ A@2 H ~ J@2 G ~ K@2 H ~ I@2 H ~ A@2 H ~ L@2 H ~@12
>`.pickRestart({
  A: "[~@4 d3@21 ~@2 f2@5]/2", B: "[~@3 a2@18 ~@11]/2", C: "[~@3 d3@16 ~@8 c3@5]/2", D: "[~@3 a2@27 ~@2]/2",
  E: "[~@3 a2@29]/2", F: "[~@3 d3@24 c3@8 a2@31 ~@2 d3@21 ~@2 f2@7 ~ a2@13]/7", G: "~@3 a2@11 ~@2", H: "~@3 a2@13",
  I: "[~@4 e3@21 ~@2 g2@5]/2", J: "[~@3 d3@15 ~@9 c3@5]/2", K: "[~@4 d3@20 ~@3 f2@5]/2", L: "[~@4 e3@20 ~@3 g2@5]/2",
})).s("gm_electric_guitar_clean").gain(0.13).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@6 A B A B A B A B A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A B A B@2 D@2 E F G D H E D I
  J I J I J A B I B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B K L M N B D@2 E F O P H P D@3 ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@4 x ~ x ~@5 x ~ x!2", D: "~ x ~@2", E: "~@3 x!2 ~@11", F: "x!3 ~@4 x",
  G: "~@2 x!2 ~ x ~@2", H: "x!3 ~@5", I: "~@4 x ~@7 x ~@2 x", J: "~@4 x ~@2 x ~@4 x ~ x!2", K: "~@4 x ~@4 x ~@2 x ~@3",
  L: "~ x ~@2 x ~@7 x ~ x ~", M: "~ x ~@2 x ~@7 x ~@3", N: "~@2 x!2 ~@2 x!2", O: "~@4 x ~ x ~@3 x!2 ~@4",
  P: "~ x!2 ~@5",
})).gain(0.36)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@6 A B@46 C ~@8 A B@46 C ~@11>".pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@3 x ~@2", C: "~ x ~@6",
})).gain(0.2)

// drums · rim
const rim = s("rim").struct("<~@110 [~@2 x!2 ~@12] ~@10>").gain(0.28)

// drums · snare
const snare = s("sd").struct("<~@54 A B C D A@2 E F ~@15 G H ~@31 A B C D A I C J@2 F ~>".pickRestart({
  A: "~@3 x", B: "~ x!2 ~@9 x ~@3", C: "~@5 x ~@2", D: "x ~@2 x", E: "x!3 ~@7 x ~@5", F: "x", G: "~@14 x!2",
  H: "x!4 ~@12", I: "x!3 ~@9 x ~@3", J: "x ~@4 x ~@2",
})).gain(0.24)

// drums · clap
const clap = s("cp").struct("<~@31 [~@2 x!2 ~@12]!23 ~@9 [~@2 x!2 ~@12]!47 ~@11>").gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@58 [~@3 x ~@12] ~@62>").gain(0.28)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@6 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D C B E@2 F B G H A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A D C B E@2 F B ~@5
>`.pickRestart({
  A: "~@2 x!6", B: "x!8", C: "~@3 x!5", D: "x!3 ~ x ~@3", E: "x!3 ~ x ~ x ~", F: "x!2 ~ x!5", G: "x", H: "~ x",
})).gain(0.2)

// drums · mid tom
// … 49 more lines

More by Roxy Music