Strudelify
If I Could Turn Back Time cover art

1989 · Heart Of Stone

If I Could Turn Back Time

Cher

KeyB majorTempo108 bpm
0:00/0:00
// If I Could Turn Back Time — Cher
// 108 bpm, 4/4, key B major. Source: mcgill + 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: duplicate parts dropped: ch 6 "Mute Gtr" electric guitar muted (copy of ch 5 "Dist Gtr" distortion guitar)
// note: Full arrangement: all 115 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 31.
setcpm(108/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 · "Bass Gtr"
const bass = note(`<
  ~@11 A B A C A B A D E@4 F@2 G@2 H I J@2 K G@2 H I J@2 L M N O N O N P Q@2 E@4 R@2 G@2 H I J@2 K G@2 H I J@2 S ~@4 T U
  N O V W E@2 X Y Z@2 G@2 H I J@2 AA@2 AB AC AD@2 AE AF AA@2 AB AC AD@2 AG AA@2 AB AC AD@2 AH AI@3
>`.pickRestart({
  A: "f#2@6 b2@9 ~", B: "e2@6 f#2@9 ~", C: "e2@3 f#2@3 e3 g#2", D: "e2 f#2",
  E: "[e1@6 g#1@6 f#1@6 f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~]/2", F: "[g#1@7 a#1@3 a#2@4 a#2@2]/2",
  G: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", H: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  I: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ g#1@4 b1@2", J: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~",
  K: "f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ a#1 ~", L: "f#2@3 b2@5", M: "e2@5 ~ f#2@10", N: "f#1@3 b1@5",
  O: "e1@6 f#1@9 ~", P: "e1@6 f#1@5 ~@2 c#2 d#2 e2, ~@6 b1 ~", Q: "f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2 ~",
  R: "[g#1@14 a#1@7 ~ a#2 ~ a#2 ~ a#2 ~ a#2@2 f#2@2]/2", S: "f#1", T: "f#3@6 b2@9 ~", U: "e3@5 ~ f#3@9 ~",
  V: "f#1@4 ~@2 b1@7 ~ e1 ~", W: "e1@3 ~ f#1 ~ f#1@10", X: "e1@3 g#1@3 f#1@2",
  Y: "~@2 f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~", Z: "[g#1@6 g#1 ~ g#1 ~ g#1 ~ g#1 ~ a#1@6 a#2@8 a#2@4]/2",
  AA: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", AB: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  AC: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ b1@4 d2@2", AD: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  AE: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2", AF: "a2 ~ a2 ~ a2 ~ e2@2 a2 g2 f#2 e2 d2 c#2 b1 a1",
  AG: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", AH: "a2@2 ~@4 d3@7 ~ g2@2", AI: "[g2@2 ~@2 d3@2 d2@29 ~@13]/3",
})).s("gm_electric_bass_finger").gain(0.49)

// chords · distortion guitar · "Lead Gtr"
const distortion_guitar = note(`<
  ~@10 A ~@9 B ~@2 C@2 ~@6 D ~@8 E F G H I H J K ~ B ~@2 L@2 ~@6 M ~@15 N O P@2 Q@2 R@2 ~@12 S T ~@13 U V@2 ~
>`.pickRestart({
  A: "a#3@3 b3@5", B: "~ b4 a#4 f#4 [b4,d#5] [a#4,c#5] [f#4,a#4] [c#4,f#4]",
  C: "[[f#3,g#3,b3]@13 ~ [f#3,a#3,c#4]@17 ~]/2", // G#m7 F#
  D: "~@2 [a#3,c#4,f#4]!2 [a#3,c#4,f#4]@4 [a#3,c#4,f#4] ~ [a#3,c#4,f#4]@6", E: "~@4 b3@2 ~@2 b3 ~ b3 ~@3 b3 ~",
  F: "b3@2 ~@2 b3 ~@3 b3@2 c#4 ~@3 b3 ~", G: "~@4 b3 ~@3 b3 ~ b3 ~@3 b3 ~", H: "b3 ~@3 b3 ~@3 b3@2 c#4 ~@3 b3 ~",
  I: "~@2 b3 ~ b3 ~@3 b3 ~ b3 ~@3 b3 ~", J: "c#4@3 ~ c#4@3 ~ c#4@3 ~ c#4@3 ~",
  K: "c#4@2 b3@2 c#4@3 ~ c#4@3 ~ c#4@2 b3@2", L: "[[b3,g#4,b4]@13 ~ [f#4,c#5,f#5]@18]/2",
  M: "~@2 [a#3,c#4,f#4]!2 [a#3,c#4,f#4]@3 ~ [a#3,c#4,f#4] ~ [a#3,c#4,f#4]@5 ~", // F#
  N: "[f#4,c#5,f#5]@2 ~@4 [b3,f#4,b4]@6 ~@2 [e3,b3,e4] ~", O: "[e3,b3,e4]@4 [f#3,c#4,f#4] ~ [f#3,c#4,f#4]@9 ~",
  P: "[g#5@12 f#5@15 ~@5]/2", Q: "[e4@6 g#4@6 f#5@19 ~]/2", R: "[[g#3,e4]@7 ~ [g#3,e4]@5 ~ [f#3,c#4]@17 ~]/2",
  S: "c#4!2 b3!2 a3!2 b3 a3", T: "b3 a3!3 b3 a3 b3 c#4", U: "[a4,e5,a5]@2 ~@4 [d4,a4,d5]@6 ~@2 [g3,d4,g4] ~",
  V: "[[g3,d4,g4]@4 [a3,d4,a4] ~ [a3,d4,a4]@25 ~]/2", // G5 D5
})).s("gm_distortion_guitar").gain(0.35)

// chords · overdriven guitar · "O/D Gtr"
const overdriven_guitar = note(`<
  A B A B A B A C D E F ~@7 G H@4 I@2 ~ B ~ B J K L ~ B ~ B J M ~@5 N ~@4 H@2 O@2 P@2 ~ B ~ B J M Q ~ B ~ B J M ~ R S R
  S R T U V W X Y@2 O@2 Z@2 ~ B ~ B J ~@2 AA ~ AA AB AC ~@3 AA ~ AA AB AD ~@2 AA ~ AA AB AD AE AF@2 ~
>`.pickRestart({
  A: "[f#3,b3,d#4] ~@7", B: "[g#3,b3,e4]@2 [f#3,b3,d#4] ~@13", C: "[g#3,b3,e4]@2 [f#3,b3,d#4] ~@9 [f#3,b3,d#4]@2 ~@2",
  D: "[e3,g#3,c#4] ~@3 [e3,g#3,c#4] ~@3", E: "[e3,g#3,c#4] ~@7", F: "a#3@3 b3@5", G: "~@8 [c#3,f#3,a#3]@7 ~",
  H: "[[e3,b3,e4]@5 ~ [g#3,d#4,g#4]@5 ~ [f#3,c#4,f#4]@19 ~]/2", I: "[[f#3,g#3,b3,e4]@13 ~ [f#3,a#3,c#4,f#4]@18]/2",
  J: "[c#3,g#3,c#4]@3 ~@5 [d#3,g#3,d#4]@3 ~@5", K: "[c#3,g#3,c#4]@3 ~@13",
  L: "~@2 [a#3,c#4,f#4]!2 [a#3,c#4,f#4]@3 ~ [a#3,c#4,f#4] ~ [a#3,c#4,f#4]@6", M: "[e3,b3,e4]@3 ~@13",
  N: "~@8 f#5 ~ f#5@6", O: "[[g#3,e4,g#4]@5 ~ [b3,g#4,b4]@5 ~ [a#3,f#4,a#4]@19 ~]/2",
  P: "[[b3,g#4,b4]@13 ~ [f#4,c#5,f#5]@18]/2", // E F#5
  Q: "~@2 [a#3,c#4,f#4]!2 [a#3,c#4,f#4]@3 ~ [a#3,c#4,f#4] ~ [a#3,c#4,f#4]@5 ~", R: "f#4@3 b3@5", S: "e4@3 f#4@4 e4",
  T: "e4@3 f#4@5", U: "f#3@3 b3@5", V: "e3@3 f#3@5", W: "[f#4,c#5,f#5]@2 ~@4 [b3,f#4,b4]@6 ~@2 [e3,b3,e4] ~",
  X: "[e3,b3,e4]@4 [f#3,c#4,f#4] ~ [f#3,c#4,f#4]@9 ~", // E5 F#5
  Y: "[[e3,b3,e4]@5 ~ [g#3,d#4,g#4]@5 ~@7 b4@2 a#4@2 f#4@2 [b4,d#5]@2 [a#4,c#5]@2 [f#4,a#4]@2 [c#4,f#4] ~, ~@12 [f#3,c#4]@19 ~, ~@6 f#4@5 ~@5]/2", // E5 G#5 B A#m F# F#5
  Z: "[[g#3,e4,g#4]@6 ~@2 [g#3,e4,g#4]@5 ~ [f#3,c#4,f#4]@17 ~]/2", AA: "[b3,d4,g4]@2 [a3,d4,f#4] ~@13",
  AB: "[e3,b3,e4]@3 ~@5 [f#3,b3,f#4]@3 ~@5", AC: "[g4,b4,g5]@3 ~@5 [a4,e5,a5]@3 ~@5", AD: "[g3,d4,g4]@3 ~@13",
  AE: "[a4,e5,a5]@2 ~@4 [d4,a4,d5]@6 ~@2 [g3,d4,g4] ~", AF: "[[g3,d4,g4]@4 [a3,d4,a4] ~ [a3,d4,a4]@25 ~]/2",
})).s("gm_overdriven_guitar").gain(0.35)

// chords · distortion guitar · "Dist Gtr"
const distortion_guitar_2 = note(`<
  A@3 B A B C D E@2 F G H G H G H G I ~@6 J@2 K@2 L@2 M J@2 K@2 L@2 N O N O N O N O P@2 ~@6 J@2 K@2 L@2 M J@2 K@2 L@2 Q
  R S R S R S R T ~@4 U@2 ~@2 J@2 K@2 L@2 V@2 W@2 X@2 Y@2 V@2 W@2 X@2 Z V@2 W@2 X@2 AA AB@2 ~
>`.pickRestart({
  A: "[b2,f#3] ~ [b2,f#3]!3 ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~", // B5
  B: "[b2,f#3] ~ [b2,f#3]!5 ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~", // B5
  C: "[b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~", // E5
  D: "[b2,e3] ~ [b2,e3]!5 ~ [b2,d#3] ~ [b2,d#3] ~ [g#2,c#3] ~ [g#2,c#3] ~", // E5 B C#5
  E: "[g#2,c#3] ~ [g#2,c#3] ~ [g#2,c#3] ~ [g#2,c#3] ~ [g#2,c#3] ~ [g#2,c#3] ~ [g#2,c#3] ~ [g#2,c#3] ~", F: "f#2",
  G: "[c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~", // F#5 B5
  H: "[b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [b2,f#3] ~", // E5 F#5 B5
  I: "[b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [c#3,f#3]@8", J: "[[b2,f#3,b3]@31 ~]/2", K: "[[b2,e3,b3]@31 ~]/2",
  L: "[[c#3,g#3,c#4]@31 ~]/2", M: "[c#3,f#3,c#4]@15 ~",
  N: "[c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~ [b2,f#3] ~", // F#5 B5
  O: "[b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~ [c#3,f#3] ~", // E5 F#5
  P: "[[f#2,c#3,f#3]@31 ~]/2", Q: "[f#2,c#3,f#3]@15 ~",
  R: "[c#4,e4] ~ [c#4,e4] ~ [c#4,e4] ~ [b3,d#4] ~ [b3,d#4] ~ [b3,d#4] ~ [b3,d#4] ~ [b3,d#4] ~", // C#m B
  S: "[g#3,b3] ~ [g#3,b3] ~ [g#3,b3] ~ [a#3,c#4] ~ [a#3,c#4] ~ [a#3,c#4] ~ [a#3,c#4] ~ [g#3,b3] ~", // G#m A#m G#m
  T: "[g#3,b3] ~ [g#3,b3] ~ [g#3,b3] ~ [a#3,c#4] ~ [a#3,c#4] ~ [a#3,c#4] ~ [a#3,c#4] ~@3", // G#m A#m
  U: "[b4 a#4 g#4 g#4@3 f#4@10]/2", V: "[[d3,a3,d4]@31 ~]/2", W: "[[d3,g3,d4]@31 ~]/2", X: "[[e3,b3,e4]@31 ~]/2",
  Y: "[[e3,a3,e4]@31 ~]/2", Z: "[e3,a3,e4]@15 ~", AA: "[a3,c#4,e4]@2 ~@4 [f#3,a3,d4]@6 ~@2 [g3,b3,d4] ~",
  AB: "[[g3,b3,d4]@4 [d3,f#3,d4] ~ [d3,f#3,d4]@25 ~]/2", // G D
})).s("gm_distortion_guitar").gain(0.25).pan(0.7)

// other · string ensemble 2 · "Syn Stgs"
const string_ensemble_2 = note("<~@2 A@6 B@4 ~@103>".pickRestart({
  A: "[f#5@19 g#5@4 ~]/6", B: "c#5/4",
})).s("gm_string_ensemble_2").gain(0.35)

// chords · synth strings 1 · "Synth 1"
const synth_strings_1 = note(`<
  A@8 B@2 C ~@7 D E@2 F@2 G@2 H@2 I@2 J@2 K H@2 I@2 J@2 L M N M N M O P Q@2 E@2 F@2 G@2 H@2 I@2 J@2 K H@2 I@2 J@2 R S T
  S U V W V W X Y E@2 F@2 G@2 H@2 I@2 J@2 Z@2 AA@2 AB@2 AC@2 Z@2 AA@2 AB@2 AD Z@2 AA@2 AB@2 AE AF@2 ~
>`.pickRestart({
  A: "[b2@93 ~ f#2@2 e2@30 c#3@2, [b3,d#4,f#4]]/8", B: "[[c#3,c#4,f#4,g#4]@31 ~]/2", C: "a#4@3 b4@5, [f#2,c#4,f#4]",
  D: "~@8 [f#4,a#4,c#5]@7 ~", E: "[[g#3,b3,e4]@5 ~ [g#3,b3,d#4]@5 ~ [f#3,a#3,c#4]@19 ~]/2",
  F: "[[b3,e4,g#4]@5 ~ [d#4,g#4,b4]@5 ~ [c#4,f#4,a#4]@19 ~]/2", G: "[[e4,f#4,g#4,b4]@13 ~ [c#4,f#4,a#4,c#5]@17 ~]/2",
  H: "[[b3,d#4,f#4]@31 ~]/2", I: "[[g#3,b3,e4]@31 ~]/2", J: "[c#4@14 d#4@4 c#4@13 ~, [e3,g#3]@31 ~]/2",
  K: "[a#3,c#4,f#4]@15 ~", L: "[c#3,f#3,a#3]@5 ~ [d#3,f#3,b3]@10", M: "[e3,g#3,b3]@3 [f#3,a#3,c#4]@5",
  N: "[c#3,f#3,a#3]@3 [d#3,f#3,b3]@5", O: "[a#3,e4] [b3,d#4], f#3", P: "[f#3,b3,d#4] [f#3,a#3,c#4]",
  Q: "[f#3,a#3,c#4]/2", R: "[f#3,a#3,c#4]", S: "e5@3 d#5@5", T: "b4@3 ~", U: "b4@3 c#5@4 ~", V: "e4@3 d#4@5",
  W: "b3@3 c#4@5", X: "~@14 [e4,g#4,b4] ~", Y: "[e4,g#4,b4]@3 ~ [f#4,a#4,c#5] ~ [f#4,a#4,c#5]@9 ~",
  Z: "[[d4,f#4,a4]@31 ~]/2", AA: "[[b3,d4,g4]@31 ~]/2", AB: "[e4@14 f#4@4 e4@13 ~, [g3,b3]@31 ~]/2",
  AC: "[[c#4,e4,a4]@31 ~]/2", AD: "[c#4,e4,a4]@15 ~", AE: "~@14 [g4,b4,d5] ~",
  AF: "[[g4,b4,d5]@3 ~ [a4,d5,f#5] ~ [a4,d5,f#5]@25 ~]/2", // G D
})).s("gm_synth_strings_1").gain(0.4)

// other · lead 8 bass lead · "Synth 2"
const lead_8_bass_lead = note(`<
  ~@23 A@2 B C B D ~@3 B C B D ~@2 E F ~@12 G@2 B C B D ~@3 B C B D ~@11 H I ~@4 A@2 B C B D ~@2 J K J L ~@4 J K J L ~@3
  J K J L ~@2 M N@2 ~
>`.pickRestart({
  A: "[f#4@13 ~ f#5@10 f#5@8]/2", B: "~@12 [c#5,c#6]@2 [d#5,d#6] ~", C: "[e5,e6] ~ [d#5,d#6] ~@13",
  D: "[e5,e6] ~ [d#5,d#6] ~@5 [d#5,d#6]@2 [c#5,c#6] ~@5", E: "e5@5 ~ d#5@9 ~", F: "b4@5 ~ c#5@9 ~",
  G: "[f#4@13 ~ f#5@9 ~ f#5@8]/2", H: "[f#4,c#5,f#5]@2 ~@4 [b3,f#4,b4]@6 ~@2 [e3,b3,e4] ~",
  I: "[e3,b3,e4]@4 [f#3,c#4,f#4] ~ [f#3,c#4,f#4]@10", J: "~@12 [e5,e6]@2 [f#5,f#6] ~", K: "[g5,g6] ~ [f#5,f#6] ~@13",
  L: "[g5,g6] ~ [f#5,f#6] ~@5 [f#5,f#6]@2 [e5,e6] ~@5", M: "~@14 d6 ~", N: "[d6@4 a5 ~ a5@25 ~]/2",
})).s("gm_lead_8_bass_lead").gain(0.25).pan(0.3)

// other · guitar harmonics
const guitar_harmonics = note("<~@52 A@2 ~@24 B ~@36>".pickRestart({
  A: "f#6/2", B: "g#6@3 ~",
})).s("gm_guitar_harmonics").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  ~@19 A B A B C A D E D E D E F E@2 D E D@2 ~@2 G H G H G@2 I@2 J K J K L M D E D E D E@2 D E D E D E C@9 N O P Q R Q S
  ~ T E D E@3 D S D E@3 D J E@13 N U ~@2
>`.pickRestart({
  A: "x ~ x!2", B: "~ x!3", C: "x", D: "x!2", E: "x ~@3 x!2 ~@2", F: "x ~@3 x!4", G: "x ~@2 x ~@4", H: "x ~@2 x ~ x!3",
  I: "x!2 ~ x!3 ~ x", J: "x ~@2 x ~@2 x ~", K: "~ x", L: "x ~@3 x ~@2 x", M: "~@4 x ~@2 x", N: "x ~@2 x ~@3 x",
  O: "x ~ x!2 ~ x ~@2", P: "x ~@2 x ~ x ~@2", Q: "~@4 x!2 ~@2", R: "x ~@2 x ~ x!2 ~", S: "x ~@3 x!2 ~ x", T: "x!3 ~",
  U: "x ~ x!2 ~@4",
})).gain(0.45)

// drums · rim
const rim = s("rim").struct("<~@68 [~ x!3] [x!4]!3 ~@43>").gain(0.45)

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

// drums · low tom
const low_tom = s("lt").struct("<~@111 [~@7 x] ~@3>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A ~@5 B@7 C ~ D E F G H I D I@4 D I D I D I D I@7 D J@2 I@2 E K I@15 L ~@4 I@4 B@2 I@4 B ~ I@13 C I@13 ~@4
>`.pickRestart({
  A: "~@6 x!2", B: "x!4", C: "x!4 ~@4", D: "x!7 ~", E: "x!5 ~ x!2", F: "x!5 ~ x ~", G: "~@2 x!6", H: "~@2 x!5 ~",
  I: "x!8", J: "~ x ~ x ~ x ~ x", K: "x!6 ~@2", L: "x!5 ~@3",
})).gain(0.3)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@10 A B C ~ C ~ C ~ C ~ C D C ~ C ~ C ~@4 C ~ C ~ C ~@9 C ~@4 D E ~@63
>`.pickRestart({
  A: "~@14 x!2", B: "x", C: "~@7 x", D: "~@5 x ~@2", E: "~@3 x",
})).gain(0.45)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@10 [~@11 x!3 ~@2] ~@104>").gain(0.25)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@12 A ~ A ~ A@2 ~@2 B ~ B C D ~@20 E ~@6 E@2 ~@28 E F ~@13 E ~@3 G ~@2 D ~@3 G ~@2 E ~@3
>`.pickRestart({
  A: "~@3 x", B: "~@4 x!2 ~ x", C: "~@4 x!2 ~@2", D: "~@5 x ~ x", E: "~@5 x!2 ~", F: "~@3 x ~ x!2 ~", G: "~@7 x",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A B ~@5 B ~@7 C D ~ D ~ E F B ~@3 B ~ B@2 F ~@2 B G B ~@8 H D ~ D ~ E C B ~@3 B ~ I B ~@3 B ~ J B ~@5 B ~ K L D ~
  D ~ E H B ~@2 G ~@2 B ~@3 B ~@3 B ~@3 B ~@2 B ~@3 B ~ K L ~@2
>`.pickRestart({
  A: "~@14 x!2", B: "x", C: "~ x", D: "x ~@2 x ~@2 x ~", E: "x ~@6 x", F: "~@7 x", G: "~@3 x", H: "~ x!3", I: "x ~@2 x",
  J: "x ~@13 x!2", K: "x ~@2 x ~@3 x", L: "x ~ x!2 ~@4",
})).gain(0.45)
// … 20 more lines

More by Cher