Strudelify
Upside Down cover art

1980 · Diana

Upside Down

Diana Ross

KeyG minorTempo108 bpm
0:00/0:00
// Upside Down — Diana Ross
// 108 bpm, 4/4, key G minor. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 3, 4/4 at bar 4, 2/4 at bar 19, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 114 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
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 · fretless bass · "Bass"
const bass = note(`<
  ~@2 A B C D A B C D A B C D A B C E F G H I J K H L A B C D A B C E F G H I J K H L A B C D A B C E F G H I J K H L A
  B C D A B C E A B C D A B C E A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D
>`.pickRestart({
  A: "g1@2 ~@4 f1@2 g1@2 ~@2 bb1@2 ~@2 c2@2 ~@12 f1 ~", B: "f1@2 ~@10 f1@3 ~ g1@2 ~@14",
  C: "bb1@2 ~@4 g1@2 bb1@2 ~@2 b1@2 ~@2 c2@2 ~@12 f1 ~", D: "f1 ~@5 f1 ~ g1 ~@7",
  E: "f1@2 ~@10 f1@2 ~@2 g1@2 ~@12 g1 ~", F: "g1@4 ~@2 g1 ~ ab1@4 a1@3 ~ bb1@6 ~@6 bb1 ~@3",
  G: "bb1@3 ~@11 bb1 ~ bb1@5 ~@7 bb1@2 ~@2", H: "bb1@3 ~@9 bb1@2 ~@2 bb1@5 ~@7 bb1 ~@3",
  I: "bb1@3 ~@9 bb1 ~@3 bb1@4 ~@10 bb1 ~", J: "bb1@3 ~@9 bb1@2 ~@2 bb1@6 ~@6 bb1 ~@3",
  K: "bb1@3 ~@9 bb1 ~@3 bb1@5 ~@9 bb1@2", L: "bb1@3 ~@13 bb1 ~@3 bb1@2 ~@2 g1@2 bb1@2 g1@3 ~",
})).s("gm_fretless_bass").gain(0.5)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@2 A@2 B@12 C@3 D E F E F E G@3 B@4 H@3 D E F E F E G@3 B@4 H@3 D E F E F E G@3 B@44 I@4 B@4 J@2
>`.pickRestart({
  A: "[[g4,bb4,d5]@4 ~@27 [f4,a4,c5]@2 ~@2 [f4,a4,c5]@2 ~@10 [g4,bb4,d5]@2 ~@2 [g4,bb4,d5]@2 ~@10 d5]/2", // Gm F Gm
  B: "[~ d5 ~ d5@4 ~@8 [c5,e5,g5]@10 ~@6 f4@2 ~@2 [f4,c5]@2 ~@10 [g4,d5]@2 ~@2 [g4,d5]@2 ~@10 [g4,bb4,d5]@2 ~@2 [g4,bb4,d5]@3 ~@9 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@3 ~@9 [f4,a4,c5]@2 ~@2 [f4,a4,c5]@2 ~@10 [g4,bb4,d5]@2 ~@2 [g4,bb4,d5]@2 ~@10 d5, ~@31 c5 ~@96]/4", // C F5 G5 Gm C F Gm
  C: "[~ d5 ~ d5@4 ~@8 [c5,e5,g5]@10 ~@6 f4@2 ~@2 [f4,c5]@2 ~@10 [g4,d5]@2 ~@2 [g4,d5]@2 ~@10 [g4,bb4,d5]@6 ~@2 eb5@3 ~ e5@3 ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~@3 [bb4,db5,f5]@2 ~@2 [bb4,db5,f5] ~@3 [bb4,db5,f5], ~@31 c5 ~@64]/3", // C F5 G5 Gm Bbm
  D: "~@3 [bb4,db5,f5] ~@3 [bb4,db5,f5] ~@3 [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~@3 [bb4,db5,f5]@2 ~@2 [bb4,db5,f5] ~@3 [bb4,db5,f5]", // Bbm
  E: "~@3 [bb4,db5,f5] ~@3 [bb4,db5,f5] ~@3 [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5]@2 [bb4,db5,f5] ~ [bb4,db5,f5] ~@3 [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~@3 [bb4,db5,f5]", // Bbm
  F: "~ [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~@3 [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~@3 [bb4,db5,f5]@2 ~@2 [bb4,db5,f5] ~@3 [bb4,db5,f5]", // Bbm
  G: "[~ [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~@7 [bb4,db5,f5]@2 ~@10 [g4,bb4,d5]@2 ~@2 [g4,bb4,d5]@3 ~@9 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@3 ~@9 [f4,a4,c5]@2 ~@2 [f4,a4,c5]@2 ~@10 [g4,bb4,d5]@2 ~@2 [g4,bb4,d5]@2 ~@10 d5]/3", // Bbm Gm C F Gm
  H: "[~ d5 ~ d5@4 ~@8 [c5,e5,g5]@10 ~@6 f4@2 ~@2 [f4,c5]@2 ~@10 [g4,d5]@2 ~@2 [g4,d5]@2 ~@10 [g4,bb4,d5]@5 ~@3 eb5@3 ~ e5@3 ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~ [bb4,db5,f5] ~@3 [bb4,db5,f5]@2 ~@2 [bb4,db5,f5] ~@3 [bb4,db5,f5], ~@31 c5 ~@64]/3", // C F5 G5 Gm Bbm
  I: "[~ d5 ~ d5@4 ~@8 [c5,e5,g5]@10 ~@6 f4@2 ~@2 [f4,c5]@2 ~@10 [g4,d5]@2 ~@2 [g4,d5]@2 ~@10 [g4,bb4] ~@3 [g4,bb4,d5]@3 ~@9 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@3 ~@9 [f4,a4,c5]@2 ~@2 [f4,a4,c5]@2 ~@10 [g4,bb4,d5]@2 ~@2 [g4,bb4,d5]@2 ~@10 d5, ~@31 c5 ~@31 d5@2 ~@63]/4", // C F5 G5 Gm C F Gm
  J: "[~ d5 ~ d5@4 ~@8 [c5,e5,g5]@10 ~@6 f4@2 ~@2 [f4,c5]@2 ~@10 [g4,d5]@2 ~@2 [g4,d5]@2 ~@11, ~@31 c5 ~@32]/2", // C F5 G5
})).s("gm_string_ensemble_1").gain(0.4)

// chords · string ensemble 1 · "Strings" · soft notes
const string_ensemble_1_soft = note("<~@18 A B C D C D C E ~@8 A B C D C D C E ~@8 A B C D C D C E ~@56>".pickRestart({
  A: "~@21 [bb4,db5,f5] ~@3 [bb4,db5,f5] ~@3 [bb4,db5,f5] ~@2", // Bbm
  B: "~ [bb4,db5,f5]@2 ~@2 [bb4,db5,f5] ~@3 [bb4,db5,f5] ~@11 [bb4,db5,f5] ~@3 [bb4,db5,f5] ~@3 [bb4,db5,f5] ~@2", // Bbm
  C: "~ [bb4,db5,f5]@2 ~@2 [bb4,db5,f5] ~@3 [bb4,db5,f5] ~@11 [bb4,db5,f5] ~@7 [bb4,db5,f5] ~@2", // Bbm
  D: "~@13 [bb4,db5,f5] ~@7 [bb4,db5,f5] ~@3 [bb4,db5,f5] ~@3 [bb4,db5,f5] ~@2", E: "~@13 [bb4,db5,f5] ~@18",
})).s("gm_string_ensemble_1").gain(0.25)

// chords · piano
const piano = note(`<
  ~@2 A B C D A B C D A B C D A B C D E ~@4 F ~@2 A B C D A B C D G ~@4 H@2 I A B C D A B C D G ~@4 H@2 I A B C D A B C
  D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C J A B C D A B C D A B C D A B C D
>`.pickRestart({
  A: "[bb3,d4,g4]@3 ~@5 [bb3,d4] ~@3 [bb3,d4,g4] ~@3 [g3,c4,e4]@2 ~@2 c3 ~ g3@3 ~ c3 ~ g3@2 ~@2, ~@4 g4 ~@11", // Gm Bb Gm C
  B: "[f3,a3] ~@3 [f3,a3,c4]@2 ~@6 [f3,c4]@2 ~@2 [g3,bb3] ~@3 [g3,bb3,d4]@2 ~@6 [g3,bb3] ~@3, c4@2 ~@10 a3 ~@3 d4@2 ~@10 d4@2 ~@2", // F F5 Gm
  C: "[bb3,d4,f4]@3 ~@5 [bb3,d4] ~@3 [bb3,d4,f4]@2 ~@2 [c4,e4,g4]@3 ~ c3 ~ g3@3 ~ c3 ~ g3@2 ~@2, ~@4 f4 ~@11", // Bb C
  D: "[f3,c4]@2 ~@2 [f3,a3,c4]@2 ~@6 [f3,a3] ~@3 [bb3,d4]@2 ~@2 [g3,d4]@2 ~@6 [g3,bb3,d4]@2 ~@2, a3 ~@11 c4@2 ~@2 g3 ~@3 bb3 ~@11", // F5 F Bb G5 Gm
  E: "[g3,d4]@2 ~@2 [ab3,eb4] ~ [a3,e4] ~ [bb3,f4]@7 ~", F: "ab4@6 f4@6 ab4@5 ~@15",
  G: "[g3,d4]@5 ~@3 [ab3,eb4]@2 ~@2 [a3,e4]@2 ~@2 [bb3,f4]@14 ~@2", H: "[ab4@3 f4@3 ab4@2 f4@12 ~@12]/2",
  I: "[bb4,db5]@3 [ab4,bb4]@3 [f4,ab4]@2 [f4,bb4] ~ bb4@2 ~@4, ~@10 f4 ~@5", // Bbm Absus2 Fm Bb5
  J: "[f3,c4]@2 ~@2 [f3,a3,c4]@2 ~@6 [f3,a3] ~@3 [bb3,d4]@2 ~@2 [g3,d4]@2 ~@2 f3@2 g3@2 bb3 bb3@3, a3 ~@11 c4@2 ~@2 g3 ~@3 bb3 ~@7 [g3,d4]@2 ~@2", // F5 F Bb G5
})).s("gm_piano").gain(0.4)

// chords · electric guitar clean · "Clean Guit"
const electric_guitar_clean = note(`<
  ~ A B C D E B C D E B C D E B F G E H@8 B C D E B F G E H@8 B C D E B F G E H@8 B C D E B F G E B C D E B F G E B C D
  E B F G E B C D E B F G E B C D E B F G E B C D E B F G E B F G E B F G E
>`.pickRestart({
  A: "~@16 [g0,d1] ~ [g0,d1] ~ [g0,d1] ~ [g0,d1] ~ [g0,d1] ~ [g0,d1] ~ [g0,d1] ~ [g0,d1] ~", // G5
  B: "[g3,d4,g4]@3 ~@5 [g3,d4,g4] ~@3 [bb3,d4,g4] ~@3 [g3,c4,e4]@3 ~@13", // G5 Gm C
  C: "[a3,c4,f4]@2 ~@10 [a3,c4,f4] ~@3 [bb3,d4,g4]@3 ~@13", // F Gm
  D: "[bb3,f4]@6 ~@2 [bb3,f4]@2 ~@2 [b3,gb4]@2 ~@2 [c4,g4]@3 ~@13", // Bb5 B5 C5
  E: "[a3,c4,f4]@3 ~@9 [a3,c4,f4]@2 ~@2 [bb3,d4,g4]@3 ~@13", // F Gm
  F: "[a3,c4,f4]@3 ~@9 [a3,c4,f4] ~@3 [bb3,d4]@3 ~@13, ~@16 g4 ~@15", // F Bb
  G: "[f3,bb3] ~ [f3,bb3] ~ [f3,bb3]@2 ~@2 [f3,bb3]@2 ~@2 [gb3,b3]@2 ~@2 [g3,c4]@3 ~@13", // Bb5 B5 C5
  H: "[[g3,d4]@6 ~@2 [ab3,eb4]@2 ~@2 [a3,e4]@2 ~@2 [bb3,f4]@58 ~@6 [bb3,f4,bb4]@59 ~@5 [bb3,f4,bb4]@52 ~@12 [f4,bb4]@23 ~@9 [bb3,f4,bb4]@3 ~ [bb3,f4,bb4]@2 ~@2 [d4,g4] ~ [d4,g4] ~ [d4,g4] ~ [d4,g4] ~, ~@52 bb3@5 ~@7]/8", // G5 Ab5 A5 Bb5 G5
})).s("gm_electric_guitar_clean").gain(0.45)

// chords · piano · "E-Piano"
const piano_2 = note("<~@18 A@8 ~@8 A@8 ~@8 A@8 ~@56>".pickRestart({
  A: "[~@28 bb4@18 ~@3 f5@29 ~@2 [bb4,db5]@31 ~ [bb4,db5]@32 f5@15 ~@17 [ab5,bb5,db6]@31 ~@22 ab5@7 f5@2 ~@2 [ab5,bb5,db6]@3 ~ [ab5,bb5,db6]@2 ~@10, ~@16 f5@31 ~@65 f5@29 ~@3 [ab5,bb5,db6]@28 bb4@12 ~@28 db6@25 ~@19, ~@21 db5@26 ~ [bb4,db5]@30 ~@82 f5@47 ~ f5@21 ~@27, ~@165 db5@15 ~@28 db5@33 ~@15, ~@224 bb5@13 ~@19]/8", // Bbm Bbm7 Bbm
})).s("gm_piano").gain(0.31)

// chords · piano · "E-Piano" · soft notes · Absus2
const piano_soft = note("<~@24 [~@20 [ab5,bb5]@11 ~] ~@15 [~@20 [ab5,bb5]@11 ~] ~@15 [~@20 [ab5,bb5]@11 ~] ~@57>")
  .s("gm_piano").gain(0.2)

// chords · synth strings 1 · "SynStrings"
const synth_strings_1 = note(`<
  ~@2 A B C D A B C D A B C D A B C D E F G H I J K L A B C D A B C D E F G H I J K L A B C D A B C D E F G H I J K L A
  B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D
>`.pickRestart({
  A: "g3@16 c4@15 ~", B: "[f3,a3] [g3,bb3]", C: "bb3 c4", D: "[f3,a3]@15 ~ [g3,bb3]@16", E: "~@16 ab4@6 ~@2 ab4@7 ~",
  F: "ab4@7 ~ ab4@7 ~ ab4@6 ~@2 ab4@7 ~", G: "ab4@7 ~ ab4@6 ~@10 ab4@6 ~@2", H: "~@8 ab4@7 ~@17",
  I: "~@16 ab4@7 ~ ab4@7 ~", J: "ab4@6 ~@10 ab4@7 ~ ab4@7 ~", K: "ab4@7 ~ ab4@7 ~@9 ab4@6 ~@2",
  L: "ab4@7 ~ ab4@6 ~@2 [ab4,bb4]@2 ~@2 [ab4,bb4]@3 ~@9", // Absus2
})).s("gm_synth_strings_1").gain(0.35)

// chords · synth strings 1 · "SynStrings" · soft notes
const synth_strings_1_soft = note("<~@20 A B C D A ~@11 A B C D A ~@11 A B C D A ~@57>".pickRestart({
  A: "~@16 ab4@7 ~@9", B: "ab4@7 ~@9 ab4@6 ~@2 ab4@7 ~", C: "ab4@7 ~ ab4@7 ~@17", D: "~@8 ab4@7 ~@17",
})).s("gm_synth_strings_1").gain(0.2)

// bass · slap bass 1 · "Syn Bass"
const bass_2 = note(`<
  ~@2 A B C B A B C B A B C B A B C B ~@8 A B C B A B C B ~@8 A B C B A B C B ~@8 A B C B A B C B A B C B A B C B D E F
  E G E H I G E H J G E H I K E H J L M H N L O P Q L R S T U V S W X Y Z AA
>`.pickRestart({
  A: "~@8 [d4,g4]@2 ~@2 [d4,g4] ~@11 [c4,g4]@2 ~@6", B: "~@8 [c4,f4]@2 ~@2 c4@2 ~@10 [d4,g4]@3 ~@5, ~@12 f4 ~@19",
  C: "~@8 [bb3,f4]@2 ~@2 [bb3,f4] ~@11 [c4,g4]@2 ~@6", D: "f3 ~@3 f3 ~@3 f3@4 c3@2 ~@2 f3@2 ~@2 f3 ~ g3@3 ~@3 c3@2 ~@2",
  E: "f3@2 ~@2 f3 ~ g3@4 ~@2 c3@3 ~ f3@2 ~@2 f3 ~ g3@3 ~@3 c3@3 ~",
  F: "bb2 ~@3 bb2 ~@3 bb2@3 ~ b2@3 ~ c3@2 ~@2 f3 ~ g3@4 ~@2 c3@4",
  G: "f3@2 ~@2 f3 ~@3 f3@2 ~@2 c3@2 ~@2 f3 ~@3 f3 ~ g3@3 ~@3 c3@3 ~",
  H: "bb2 ~ bb2 ~ bb2@2 ~@2 bb2@3 ~ b2@3 ~ c3@2 ~@2 f3 ~ g3@3 ~@3 c3@3 ~",
  I: "f3@2 ~@2 f3 ~ g3@3 ~@3 c3@3 ~ f3@2 ~@2 f3 ~ g3@4 ~@2 c3@3 ~",
  J: "f3@2 ~@2 f3 ~ g3@3 ~@3 c3@3 ~ f3@2 ~@2 g3 ~@3 f3@2 ~@2 g3@2 ~@2",
  K: "f3@2 ~@2 f3 ~@3 f3@2 ~@2 f3@2 ~@2 f3 ~@3 f3 ~ g3@3 ~@3 c3@3 ~",
  L: "f3@2 ~@2 f3 ~@3 f3@2 ~@2 c3@2 ~@2 f3 ~ f3 ~ f3 ~ g3@3 ~@3 c3@3 ~",
  M: "f3 ~ f3 ~ f3@2 g3@4 ~@2 c3@3 ~ f3 ~ f3 ~ f3 ~ g3@3 ~@3 c3@3 ~",
  N: "f3 ~ f3 ~ f3@2 g3@3 ~@3 c3@3 ~ f3 ~ f3 ~ f3 ~ g3@4 ~@2 c3@3 ~",
  O: "f3 ~ f3 ~ f3@2 g3@4 ~@2 c3@3 ~ f3 ~ f3 ~ f3 ~ g3@3 ~@3 a2@2 ~@2",
  P: "bb2@2 ~@2 bb2@2 ~@2 bb2@3 ~ b2@3 ~ c3@2 ~@2 f3 ~ g3@3 ~@3 c3@3 ~",
  Q: "f3 ~ f3 ~ f3@2 g3@3 ~@3 c3@3 ~ f3 ~ f3 ~ g3 ~ g3@2 ~@4 f3@3 ~",
  R: "f3 ~ f3 ~ f3@2 g3@4 ~@2 c3@3 ~ f3 ~ f3 ~ f3 ~ g3@3 ~ f3 ~ f3@2 ~@2",
  S: "bb2@2 ~@2 bb2@2 ~@2 bb2@3 ~ b2@3 ~ [c3,f3]@2 ~@2 f3 ~ g3@3 ~ f3@2 c3@2 ~@2", // F5
  T: "f3 ~ f3 ~ f3 ~ g3 ~ g3@2 d3 ~ d3 ~ f3 ~ f3@2 d3 ~ d3 ~ g3 ~ g3 ~ d3 ~ f3@2 d3 ~",
  U: "c3@2 ~@2 f3 ~@3 f3@2 ~@2 f3@2 ~@2 f3 ~ f3 ~ f3 ~ g3@3 ~@3 c3@3 ~",
  V: "f3 ~ f3 ~ f3@2 g3@4 ~@2 c3@3 ~ f3@2 ~@2 g3@2 ~@2 bb3@8",
  W: "f3 ~ f3 ~ f3@2 g3@2 ~@2 f3 ~ f3@2 ~@2 bb3 ~ bb3 ~ a3@2 ~@4 c4@2 ~@2 b3 ~",
  X: "bb3 c4@2 bb3 g3 ~ d3 ~ f3@2 g3 ~ f3 ~ d3 ~ g3@2 f3 ~ d3 ~ g3@2 f3 ~ d3 ~ g3 ~ f3 ~",
  Y: "d3 ~ g3 ~ f3 ~ d3 ~ g3@2 f3 ~ d3@2 ~@2 g3 ~ g3 ~ f3@2 ~@2 g3@3 ~ a3@2 ~@2",
  Z: "bb2 ~ bb2 ~ bb2 ~@3 bb2@2 ~@2 b2@2 ~@2 c3@2 ~@2 f3 ~@2 g3@2 ~@2 c3 ~ f3 ~ g3",
  AA: "c3@2 ~@2 f3@2 g3@2 ~@2 c3 ~ f3 ~ g3 ~ bb3 ~ bb3 ~ a3@2 ~@2 g3@2 ~@2 f3@3 ~",
})).s("gm_slap_bass_1").gain(0.45)

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

// drums · rim
const rim = s("rim").struct("<[~@2 x!2] [x!2 ~@2] ~@112>").gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B@15 A B C B C B C D B@8 A B C B C B C D B@8 A B C B C B C D B@10 E A@2 B@2 F A B@6 G A B@5 E A@2 B@2 H B@7 H
  B@3 G B@3 G B@3 G
>`.pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~ x ~ x", C: "~@2 x ~@3 x!2", D: "~@2 x ~ x!3 ~", E: "x!3 ~ x ~ x ~ x ~@3 x ~@3",
  F: "~@4 x ~@7 x!2 ~@2", G: "~@4 x ~@5 x ~ x ~ x!2", H: "~@4 x ~@7 x ~ x!2",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~ A B@18 C B@3 C B@11 C B@3 C B@11 C B@3 C B@32 D B@11 E B@12>".pickRestart({
  A: "~@8 x!8", B: "x!16", C: "x!14 ~@2", D: "x!14 ~ x", E: "x!10 ~@2 x ~@2 x",
})).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@68 [x!3 ~ x ~ x ~ x ~@7] ~@4 [~@7 x] ~@40>").gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~@20 A ~@3 A ~@11 A ~@3 A ~@11 A ~@3 A ~@32 A ~@11 B ~@12>".pickRestart({
  A: "~@7 x", B: "~@10 x ~@2 x ~@2",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~ B ~@3 B ~@3 B ~@3 B ~ A ~ B ~ B ~ B ~@3 B ~@3 B ~ A ~ B ~ B ~ B ~@3 B ~@3 B ~ A ~ B ~ B ~ B ~@3 B ~@3 B ~@3 B
  ~@3 B ~ A ~ B ~@3 B ~ A ~ B ~@3 B ~@5 A ~ B ~ B@3 ~ A ~ B ~ A ~ B ~ A ~ B ~
>`.pickRestart({
  A: "x", B: "~ x",
})).gain(0.5)

stack(
  bass, string_ensemble_1, string_ensemble_1_soft, piano, electric_guitar_clean, piano_2, piano_soft, synth_strings_1,
  synth_strings_1_soft, bass_2, kick, rim, snare, hihat, mid_tom, open_hat, crash
)

More by Diana Ross