Strudelify

Some Guys Have All the Luck

Rod Stewart

KeyD majorTempo127 bpm
0:00/0:00
// Some Guys Have All the Luck — Stewart Rod
// 127 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 12 "OVERDRIVE" overdriven guitar (copy of ch 9 "MUSIC BOX" music box); ch 14 "SYN STR 1" synth strings 1 (copy of ch 9 "MUSIC BOX" music box)
// note: Full arrangement: all 149 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(127/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.

// other · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~ A@2 B@2 C@2 D@2 ~@8 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 ~@7 E F E F ~ A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 ~@7 E F E F E F E
  G H@2 I@4 J@4 K@4 L@2 M A@2 B@2 C@2 N@2 A@2 B@2 C@2 D@2 ~@15 E F E F E F E G E F E F E F E G E F E F E F E G ~
>`.pickRestart({
  A: "[[a3,d4,f#4]@23 ~ [a3,d4,f#4]@4 [a3,c#4,e4]@4]/2", B: "[[b3,d4,f#4]@15 ~]/2",
  C: "[[b3,e4,g4]@15 ~ [c4,e4,g4]@15 ~, g3@31 ~]/2", D: "[d4@4 c#4@11 ~, [a3,e4]@31 ~]/2",
  E: "~ f#5 d5 a4 f#5 d5 b4 a4", F: "f#5@2 d5@3 ~@11", G: "f#5@3 ~ g5@2 e5@3 ~@7",
  H: "[~@6 d4@2 c#4@2 a3@2 f#3 ~ b3@12 f#3@2 b3@2 d4@2]/2",
  I: "[e4@6 b3@3 ~@3 a3@23 ~@3 d4@2 c#4@2 a3@2 f#3@2 b3@12 f#3@2 b3@2 d4@2]/4",
  J: "[e4@6 b3@3 ~@3 a3@24 ~@2 d4@2 c#4@2 a3@2 f#3 ~ b3@12 f#3@2 b3@2 d4@2]/4",
  K: "[e4@6 b3@3 ~@3 a3@24 ~@2 d4@2 c#4@2 a3@2 f#3 ~ b3@9 ~@3 f#3@2 a3@2 d4@2]/4", L: "[e4@6 b3@3 ~@3 a3@20]/2",
  M: "g3@15 ~", N: "[d4@2 ~@5 a3, [a3,e4]@13 e4@3, ~@4 c#4@11 ~, ~@6 a4 ~]/2",
})).s("gm_synth_brass_1").gain(0.31).pan(0.6)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~ A@2 B C D E F G A@2 B C D H F G A@2 B C D E F G A@2 B C D E F G A@2 B C D H F G A@2 B I A@2 B C D E F G A@2 B C D E
  F G A@2 B C D H F G A@2 B@2 J@2 F@2 K@2 L M N@2 L M K@2 L M N@2 O P A@2 B C D E F G A@2 B C D E F G A@2 B C D H F G
  A@2 B@2 Q@2 F R A@2 B@2 J S F I A T B@2 J@2 F I A T B C J S F U
>`.pickRestart({
  A: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", B: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  C: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1@2", D: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2",
  E: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", F: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  G: "a1 ~ a1 ~ a1 ~ a1@3 ~ a1 ~ a1 ~ c#2@2", H: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  I: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ c#2@2", J: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  K: "[b1 ~@3 b1@2 a1@2 b1 ~@3 b2@6 ~@2 b1@2 a1@2 b1@2 a1@2 f#1@2 ~@2]/2", L: "a1 ~ a1 f#1 a1 ~ a2@2",
  M: "~@2 a2 ~ a2@2 f#2@2 a2@2 f#2@2 e2@2 a1@2", N: "[b1@2 ~@2 b1@2 a1@2 b1@2 ~@2 b2@7 ~ b2@2 a2@2 b2@2 a2@2 f#2@4]/2",
  O: "a1 ~ a1 f#1 a1 f#1 e1 f#1", P: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ a1@4 b1@2", Q: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  R: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ c#2 ~", S: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1@2",
  T: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2", U: "a1 ~@15",
})).s("gm_electric_bass_finger").gain(0.49)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~ A B C D E F G H ~@36 A B C D E F G H A B C D E F G H ~@15 I J K L@2 M N O P Q R S@2 T U@3 ~@8 A B C D E F G H ~@16
  V@2 W@2 X@2 V@2 Y@2 Z@2 AA@2 Y@2 AB@2 Z@2 AA@2 AC@2
>`.pickRestart({
  A: "~@4 f3@2 a3@2 ~@2 f3 ~ [a#3,d#4]@4", B: "[a3,d4]@7 ~", C: "~@4 f3@2 a3 ~@3 f#3 ~ [c#4,f#4]@4",
  D: "[d4,f#4]@13 ~@3", E: "~@2 a#3 d4 ~@2 [d#4,g#4]@2", F: "c4 ~@3 a#3@2 d4 ~@3 b3 ~ [d#4,g#4]@3 c4",
  G: "~@2 [e4,a4] ~@5 [e4,a4]@2 ~@2 [a2,e3]@2 [a2,e3] ~", H: "~@2 [e4,a4] ~@5 [e4,a4]@2 ~@6",
  I: "~@10 c#4 [d4,e4] [f#4,g4] a4 [b4,c5] [d5,e5]", J: "f#5@11 ~ d#5@2 d5 ~",
  K: "d#5@3 ~ d#5@2 d5 ~ d#5@3 ~ d#5@2 ~@2", L: "[~@6 a#4@8 a4 ~]/2", M: "g4@6 ~ e4 ~ d4@6 b3",
  N: "~@10 a4 ~ b4 ~ d5 e5", O: "g5 ~@2 e5@3 d5@2 ~@2 a#4 ~ [e4,g4] ~@3", P: "~ a4 ~@2 b4@3 a4@4 ~@5",
  Q: "~@10 f#4@2 b4@2 c#5 ~", R: "f5 ~ a5 ~ b5 ~ d6@9 ~", S: "[c#6@11 ~ a#5@2 ~ a5@4 ~ g5@4 d5 ~ d5 ~ d5@2 b4 ~]/2",
  T: "d5@3 b4@7 ~@3 f#4 b4 d5", U: "[e5@2 d5 b4 d#5@2 d5 b4 d5@2 e5 ~ b4@3 a4@5 a4 b4 d5 ~ f5 ~ a5 ~ b5 ~ d6@18]/3",
  V: "[a2@6 d3@6 e3@6 a2@5 ~ d3@4 e3@4]/2", W: "[b2@6 d3@6 e3@6 b2@5 ~ d3@4 e3@4]/2",
  X: "[g2@6 d3@6 e3@6 g2@5 ~ d3@4 e3@4]/2", Y: "[a2@3 d3@3 e3@3 a2@3 d3@2 e3@2]/2",
  Z: "[b2@3 d3@3 e3@3 b2@3 d3@2 e3@2]/2", AA: "[g2@3 d3@3 e3@3 g2@3 d3@2 e3@2]/2",
  AB: "[a2@6 d3@5 ~ e3@6 a2@5 ~ d3@4 e3@4]/2", AC: "[a2@3 d3@3 e3@3 ~@7]/2",
})).s("gm_overdriven_guitar").gain(0.32).pan(0.4)

// other · flute
const flute = note(`<
  ~@8 A B@2 C@2 D@2 E@2 F G H@2 I J K@2 L M N@2 I J O@2 P@2 Q@2 R@2 S@2 T U T ~ F V W ~ X J Y Z AA AB AC@2 I AD@3 P@2
  Q@2 R@2 AE@2 T U T U T AF AG ~@17 L G AH ~ AI AJ Y Z AK AL AM AN AO AI AP@2 P@2 Q@2 R@2 AQ@2 AR@2 AS@2 AT@2 S@2 T U T
  U T AF AG U T U T U T AF AG U T U T U T AF AU ~
>`.pickRestart({
  A: "~ a4 g4 f#4", B: "[e4@2 d4 d4@7 a4 g4@3 f#4@2]/2", C: "[e4 d4!2 f#4@7 a4@2 g4@2 f#4@2]/2",
  D: "[f#4@2 g4 g4@7 a4 g4@3 f#4 e4]/2", E: "[f#4 e4 f#4 e4 g4@8 ~@3 a3]/2", F: "e4 f#4!2 f#4@3 e4 d4",
  G: "e4 f#4!2 f#4@2 f#4 e4 d4", H: "[e4@2 b3 b3@7 ~@5 b3]/2", I: "g4!3 g4@3 f#4 e4", J: "g4!3 g4@2 g4 f#4 e4",
  K: "[f#4@6 f#4@17 ~@9]/2", L: "a4 f#4!2 f#4@3 e4 d4", M: "e4@3 f#4@2 f#4@3 f#4@3 e4@2 d4@3",
  N: "[f#4 e4 d4 b3@9 ~@4]/2", O: "[f#4@2 f#4 e4@7 [a4,d5]@2 [g4,b4]@2 [f#4,a4]@2]/2",
  P: "[[e4,g4]@2 [d4,f#4] [d4,f#4]@7 [a4,d5] [g4,b4]@3 [f#4,a4]@2]/2", // Em D D5 G F#m
  Q: "[[e4,g4] [d4,f#4]!2 [f#4,a4]@7 [a4,d5]@2 [g4,b4]@2 [f#4,a4]@2]/2", // Em D F#m D5 G F#m
  R: "[[f#4,a4]@2 [g4,b4] [g4,b4]@7 [a4,d5] [g4,b4]@3 [f#4,a4] [e4,g4]]/2", // F#m G D5 G F#m Em
  S: "[[f#4,a4] [e4,g4] [f#4,a4] [e4,g4] [g4,b4]@5 [f#4,f#5] [d4,d5] [a3,a4] [f#4,f#5] [d4,d5] [b3,b4] [a3,a4]]/2", // F#m Em F#m Em G F# D A …
  T: "[f#4,f#5]@2 [d4,d5]@7 ~@7", U: "~ [f#4,f#5] [d4,d5] [a3,a4] [f#4,f#5] [d4,d5] [b3,b4] [a3,a4]",
  V: "e4@3 f#4@2 f#4@3 f#4@4 a4@4", W: "[e4,g4] [d4,f#4]!2 [b3,d4]@5", X: "g4!3 g4@5", Y: "[f#4,a4]@3 [f#4,a4]@5",
  Z: "~@7 [a3,d4]", AA: "[a4,d5] [f#4,a4]!2 [f#4,a4]@3 [e4,g4] [d4,f#4]",
  AB: "[e4,g4] [f#4,a4] [f#4,a4]@2 [f#4,a4]@2 e4 d4", AC: "[e4 e4@2 d4@6 ~@7]/2",
  AD: "[g4!3 g4@2 g4 f#4 e4@2 f#4@2 e4@7 [a4,d5]@2 [g4,b4]@2 [f#4,a4]@2]/3", // D5 G F#m
  AE: "[[f#4,a4] [e4,g4] [f#4,a4] [e4,g4] [a3,c#4]@5 [f#4,f#5] [d4,d5] [a3,a4] [f#4,f#5] [d4,d5] [b3,b4] [a3,a4]]/2", // F#m Em F#m Em A F# D A …
  AF: "~ [f#4,f#5] [d4,d5] a3 [f#4,f#5] [d4,d5] [b3,b4] [a3,a4]", AG: "[f#4,f#5]@2 [g4,g5] [e4,e5]@5",
  AH: "[e4,g4]@6 [b3,d4]@7 ~@3", AI: "g4!3 g4@2 g4 f#4@2", AJ: "g4 g4@2 g4@2 [g4,b4] [f#4,a4]@2",
  AK: "[a4,d5] [f#4,a4]!2 [f#4,a4]@2 [f#4,a4]@2 [a3,d4]", AL: "[a4,d5] [f#4,a4]!2 [f#4,a4]@2 [f#4,a4] [e4,g4]@2",
  AM: "[e4,g4]@3 [e4,g4]@2 [e4,g4]@3 [d4,f#4]@8", AN: "~@7 b3", AO: "g4!3 g4@4 b3",
  AP: "[[f#4,a4]@3 [f#4,a4]@2 [f#4,a4]@3 [e4,g4]@12 [a4,d5]@4 [g4,b4]@4 [f#4,a4]@4]/2", // F#m Em D5 G F#m
  AQ: "[[f#4,a4] [e4,g4] [f#4,a4] [e4,g4] [g4,b4]@6 [a4,d5]@2 [g4,b4]@2 [f#4,a4]@2]/2", // F#m Em F#m Em G D5 G F#m
  AR: "[[e4,g4]@2 [d4,f#4] [d4,f#4]@7 [a4,d5]@2 [g4,b4]@2 [f#4,a4]@2]/2", // Em D D5 G F#m
  AS: "[[e4,g4] [d4,f#4] [e4,g4] [d4,f#4] [f#4,a4]@6 [a4,d5]@2 [g4,b4]@2 [f#4,a4]@2]/2", // Em D Em D F#m D5 G F#m
  AT: "[[f#4,a4]@2 [g4,b4] [g4,b4]@7 [a4,d5]@2 [g4,b4]@2 [f#4,a4]@2]/2", AU: "[f#4,f#5]@2 [g4,g5] [e4,e5]@3 ~@2",
})).s("gm_flute").gain(0.17)

// other · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  ~ A B A B A B A ~ C D E D E D E D A B A B A B A ~ A B A B A B A ~ C D E D E D E D ~@4 A B A B A B A ~ A B A B A B A ~
  C D E D E D E D ~@8 F@2 G@2 F@2 G@2 F@2 G@2 F@2 G H A B A B A B A ~ A B A B A B A ~ C D E D E D E D C D E D E D E D
  ~@24
>`.pickRestart({
  A: "~@4 [e3,e5] ~ [e3,e5] ~ [e3,e5] ~ [f#3,f#5] ~ [d3,d5] ~@3", B: "~@2 [e3,e5] ~ [e3,e5] ~ [f#3,f#5] ~ [d3,d5] ~@7",
  C: "~@2 [a3,a4] ~ [f#4,f#5] ~ [a3,a4] ~@3 [a3,a4] ~ [d4,d5] ~ [a3,a4] ~", // A F# A D A
  D: "~@2 [a3,a4] ~ [f#4,f#5] ~ [a3,a4] ~ [e4,e5] ~ [a3,a4] ~ [d4,d5] ~ [a3,a4] ~", // A F# A E A D A
  E: "~@2 [a3,a4] ~ [d4,d5] ~ [a3,a4] ~@3 [a3,a4] ~ [d4,d5] ~ [a3,a4] ~", // A D A D A
  F: "[b4,d5] f#4 [b4,d5] f#4 [b4,d5] f#4 [b4,d5] f#4 [b4,d5] f#4 [b4,d5] f#4 [b4,d5] f#4 [b4,d5] f#4", // Bm
  G: "[a4,c#5] e4 [a4,c#5] e4 [a4,c#5] e4 [a4,c#5] e4 [a4,c#5] e4 [a4,c#5] e4 [a4,c#5] e4 [a4,c#5] e4", // A
  H: "[g4,b4] d4 [g4,b4] d4 [g4,b4] d4 [g4,b4] d4 [g4,b4] d4 [g4,b4] d4 [g4,b4] d4 [g4,b4] d4", // G
})).s("gm_pizzicato_strings").gain(0.22)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@9 A B C D E D F G H I J I H I H ~ K I H L H L H ~ A B C D E D F G ~@4 H I J I H I H ~ K I H L H L H ~ A B C D E D F
  G ~@24 H I J I H I H ~ K I H L H L H ~ A B C D E D F G A B C D E D F G ~@24
>`.pickRestart({
  A: "~@2 a3 ~ f#4@2 a3 ~@3 a3 ~ d4@2 a3 ~", B: "~@4 f#4@2 a3 ~ e4@2 a3 ~ d4@2 a3 ~", C: "~@4 d4@2 ~@6 d4@2 a3 ~",
  D: "~@2 a3 ~ f#4@2 ~@2 e4@2 ~@2 d4 ~ a3 ~", E: "~@4 d4 ~ a3 ~@3 a3@2 d4 ~@3",
  F: "~@2 a3 ~ d4 ~ a3 ~@3 a3 ~ d4@2 a3 ~", G: "~@2 a3@2 f#4@2 ~@2 e4@2 ~@2 d4@2 a3 ~",
  H: "~@4 e3@2 e3@2 e3@2 f#3 ~ d3 ~@3", I: "~@2 e3@2 e3@2 f#3 ~ d3 ~@7", J: "~@4 e3@2 e3@2 e3 ~ f#3 ~ d3 ~@3",
  K: "~@6 e3@2 e3@2 f#3 ~ d3 ~@3", L: "~@2 e3@2 e3@2 f#3@2 d3 ~@7",
})).s("gm_electric_guitar_muted").gain(0.28)

// other · electric guitar muted · "MUTED GTR" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@10 A B C D C ~ C ~@17 A B C D C ~ C ~@21 A B C D C ~ C ~@41 A B C D C ~ C ~ A B C D C ~ C ~@24
>`.pickRestart({
  A: "~@2 a3 ~@13", B: "~@2 a3 ~@3 a3 ~@3 a3 ~@5", C: "~@6 a3 ~@3 a3 ~@5", D: "~@2 a3@2 ~@10 a3 ~",
})).s("gm_electric_guitar_muted").gain(0.16)

// other · music box
const music_box = note(`<
  ~@8 A B A C D E D F ~@16 A B A C D E D F ~@16 G H ~@2 A B A C D E D F ~@36 G I ~@2 A B A C D E D F A B A C D E D F
  ~@25
>`.pickRestart({
  A: "~ a4 g4 f#4", B: "e4@3 d4@5", C: "e4@3 f#4@5", D: "~@2 a4@2 g4@2 f#4 ~", E: "f#4@3 g4@5", F: "f#4@6 g4@9 ~",
  G: "b4 c#5 d5 f#5", H: "g5", I: "g5@7 ~@9",
})).s("gm_music_box").gain(0.29).pan(0.6)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@9 A@2 B A C B D@2 ~@16 A@2 B A C B D@2 E@4 ~@16 A@2 B A C B D@2 F@8 G H I J K L J M N O J@2 P Q R S ~@16 A@2 B A C B
  D@2 A@2 B A C B D@2 F@16 T@7 ~
>`.pickRestart({
  A: "~@2 [d4,f#4] ~@3 [d4,g4] ~", B: "~@2 [d4,f#4] ~@3 [d4,f#4] ~", C: "~@2 [d4,f#4] ~@3 [e4,g4] ~",
  D: "~@2 [f#4,a4] ~@3 [e4,a4] ~", // F#m A5
  E: "[~@14 a3@3 ~@29 a3@3 ~@11 d4@3 ~, a3@8 a3@6 ~@4 a3@6 a3@8 a3@7 ~ a3@5 ~@5 a3@6 a3@7 ~, ~@4 e4@6 e4@9 ~ e4@6 e4@9 ~ e4@6 e4@10 e4@6 e4@6, ~@6 d4@6 d4@9 ~ d4@5 ~ d4@10 d4@5 ~ d4@10 d4@6 ~@4]/4",
  F: "[~@46 e4@3 ~@11 a3@5 ~@59 g3@4, ~@2 e4@4 a3@4 d4@10 d4@6 d4@9 ~ d4@5 ~ d4@9 ~ d4@6 d4@9 ~ d4@6 d4@9 ~ d4@5 ~ d4@6 ~@4 c#4@5 ~ c#4@10 c#4@6 c#4@5 ~, ~@4 d4@4 e4@9 ~ e4@6 e4@9 ~ e4@5 ~ e4@6 ~@4 e4@6 e4@9 ~ e4@6 e4@9 ~ e4@6 e4@8 ~@2 e4@6 e4@9 ~ e4@6 e4@8, ~@12 a3@10 a3@5 ~ a3@9 ~ a3@6 a3@9 ~ a3@6 ~@10 g3@6 g3@9 ~ g3@6 g3@10 g3@5 ~ g3@10 g3@5 ~@5]/8",
  G: "~@3 a4 [b3,d4,a4]@2 [b3,d4,a4] ~@4 a4 [b3,d4,a4]@2 [b3,d4,a4]@2, ~ [b3,d4,a4] ~@3 [d4,a4] ~@2", // Bm7 D5
  H: "~@3 a4 [d4,a4]@2 [d4,a4]@2 ~@2 a4!2 [d4,a4]@2 [b3,d4,a4]@2, ~ [b3,d4,a4] b3@2 ~ b3@2 ~, ~@5 d4 ~@2", // D5 Bm7
  I: "~@3 a4 [c#4,e4,a4]@2 [c#4,e4,a4]@2 ~@3 a4 [c#4,e4,a4]@2 [c#4,e4,a4] ~, ~ [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@2", // A
  J: "~@3 a4 [c#4,e4,a4]@2 [c#4,e4,a4] ~@4 a4 [c#4,e4,a4]@2 [c#4,e4,a4] ~, ~ [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@2", // A
  K: "~@3 a4 [b3,d4,a4]@2 [b3,d4,a4]@2 ~@3 a4 [b3,d4,a4]@2 [b3,d4,a4]@2, ~ [b3,d4,a4] ~@3 [b3,d4,a4] ~@2", // Bm7
  L: "~@3 a4 [b3,d4,a4]@2 [d4,a4,a5] ~@3 a4!2 [d4,a4]@2 [b3,d4,a4] ~, ~ [b3,d4,a4] ~@3 b3@2 ~, ~@5 d4 ~@2", // Bm7 D5 Bm7
  M: "~@2 [c#4,e4,a4] [e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4] ~@4 a4 [e4,a4]@2 [c#4,e4,a4] ~, ~@5 [c#4,e4,a4] ~@2", // A A5 A A5 A
  N: "~@3 a4 [b3,d4,a4]@2 [b3,d4,a4]@2 ~@3 a4 [b3,d4,a4]@2 [b3,d4,a4] ~, ~ [b3,d4,a4] ~@3 [b3,d4,a4] ~@2", // Bm7
  O: "~@3 a4 [b3,d4,a4]@2 [b3,d4,a4] ~@4 a4 [b3,d4,a4]@2 [b3,d4,a4] ~, ~ [b3,d4,a4] ~@3 [b3,d4,a4] ~@2", // Bm7
  P: "~@3 a4 [b3,d4,a4]@2 [b3,d4,a4] ~@4 a4 [d4,a4]@2 [d4,a4] ~, ~ [d4,a4] ~@3 [b3,d4,a4] b3@2", // Bm7 D5 Bm7
  Q: "~@2 a4!2 [d4,a4]@2 [b3,d4,a4] ~@4 a4 [d4,a4]@2 [b3,d4,a4] ~, ~ b3@2 ~@2 [b3,d4,a4] ~@2, ~ d4 ~@6", // D5 Bm7 D5 Bm7
  R: "~@2 [e4,a4]@2 [e4,a4]@2 [c#4,e4,a4] ~@3 [c#4,e4,a4] [e4,a4] [c#4,e4,a4]@2 [c#4,e4,a4] ~, ~ c#4@2 ~@5", // A5 A A5 A
  S: "~@2 [b3,d4,g4] g4 ~ g4 [b3,d4,g4] ~@3 [b3,d4,g4] g4 [b3,d4,g4]@2 [b3,d4,g4]@2, ~@2 [b3,d4,g4] ~@5", // G
  T: "[~@46 e4@3 ~@11 a3@5 ~@43 g3@4, ~@2 e4@4 a3@4 d4@10 d4@6 d4@9 ~ d4@5 ~ d4@9 ~ d4@6 d4@9 ~ d4@6 d4@9 ~ d4@5 ~ d4@6 ~@4 c#4@5 ~ c#4@6, ~@4 d4@4 e4@9 ~ e4@6 e4@9 ~ e4@5 ~ e4@6 ~@4 e4@6 e4@9 ~ e4@6 e4@9 ~ e4@6 e4@8 ~@2 e4@6 e4@8, ~@12 a3@10 a3@5 ~ a3@9 ~ a3@6 a3@9 ~ a3@6 ~@10 g3@6 g3@9 ~ g3@6 g3@10 g3@5 ~@5]/7",
})).s("gm_electric_guitar_clean").gain(0.33)

// other · synth drum
const synth_drum = note(`<
  ~@13 A ~@21 A ~@16 B ~@18 C ~ B ~@5 D ~@8 E ~@34 F ~@2 D G F H F H I J D G K L ~@2 I J F H ~@5
>`.pickRestart({
  A: "~@14 c4 ~", B: "~@10 a3 ~@3 a3 ~", C: "~@10 g#3 ~@3 g#3 ~", D: "~@14 g#3 ~", E: "~@2 g#3 ~@3 g#3 ~@9",
  F: "~@14 a3 ~", G: "~@2 g#3 ~@13", H: "~@2 a3 ~@13", I: "~@6 d4 ~ d4 ~ g3 ~ g3 ~ b2 ~", J: "b2 ~@15",
  K: "~@10 g#3 ~ d#3 ~ d#3 ~", L: "a2 ~@15",
})).s("gm_synth_drum").gain(0.49)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!76 [x ~@3 x!2 ~@2]!7 [x!4] [x ~@3 x!2 ~@2]!8 [x!2]!55 ~>").gain(0.44)

// drums · snare
const snare = s("sd").struct("<[~@5 x!3] [~ x ~ x]!43 [~@2 x ~@2 x!3] [~ x ~ x]!39 [~ x!7] [~ x ~ x]!63 ~>").gain(0.38)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~@2 A ~@10 A ~@6 A ~@4 A ~@13 A ~@8 A ~@6 A ~@25 B ~ A ~@5 A ~@7 A ~@48
>`.pickRestart({
  A: "~@7 x", B: "~ x ~@6",
})).gain(0.33)

// drums · crash
const crash = s("cr").struct(`<
  ~@41 A ~@19 A ~@7 A ~@7 A ~ A ~ A ~ A ~ A ~@3 A ~ A ~@17 A ~@7 A ~@7 A ~@7 A ~@5 A ~@9
>`.pickRestart({
  A: "x",
})).gain(0.33)

// … 40 more lines

More by Rod Stewart