Strudelify

The Dream Is Still Alive

Wilson Phillips

KeyF majorTempo106 bpm
0:00/0:00
// The Dream Is Still Alive — Wilson Phillips
// 106 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// 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.
setcpm(106/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 · "FINGERDBAS"
const bass = note(`<
  ~@2 A@2 B C D E F C D E G H I J K L M N O P Q R S T U V W X Y Z AA AB Y AC AD AE AF AG AH AI AJ AK AL H I J K L M N O
  P Q R S T U V W X Y Z AA AB Y AC AD AE AF AG AH AM AJ AN AO AP AO AQ AO AP AR AO AS@2 A@2 B C D E G X Y Z AA AB Y AC
  AD AE AF AG AH AM AJ AT ~@7
>`.pickRestart({
  A: "f1/2", B: "f1@4 ~@8 f2@3 ~", C: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ c2 ~",
  D: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", E: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ a1 ~",
  F: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 c2 d2 ~", G: "bb1@3 ~ bb1 ~ c2@3 ~ c2 ~ c2 g1 c1@2",
  H: "d1@4 ~@2 d1 ~ d1@6 ~@2", I: "bb1@2 ~ bb1@4 ~", J: "f1@4 ~@2 f1 ~ f1@6 ~@2", K: "f1@2 ~ f1@4 ~",
  L: "d1@4 ~@2 d1 ~ d1@5 ~@3", M: "bb1@4 ~@2 bb1@7 ~@3", N: "c2@4 ~@2 c2 ~ c2@5 ~@3",
  O: "c2@4 ~@2 c2@3 ~ c2@2 bb1@2 a1@2", P: "g1@3 ~@3 f1 ~ g1@5 ~@3", Q: "g1@4 ~@2 g1@2 a1@3 ~ a1@3 ~",
  R: "g1@4 ~@2 f1 ~ g1@6 ~@2", S: "g1@4 ~@2 g1@3 ~ g1@2 a1@3 ~", T: "bb1@4 ~@2 bb1 ~ bb1@7 ~", U: "d2@5 ~ d2 ~ d2@7 ~",
  V: "e2@4 ~@2 e2 ~ e2@4 d2@4", W: "c2@5 ~ c2@2 d2@2 f2@2 d2@2 c2@2", X: "f1 ~ f1@2 ~@2 f1@2 g1@2 c2@2 f2@2 c2@2",
  Y: "e2@2 e2@2 ~@2 e2 ~ e2 ~ e2@2 ~@2 e2 ~", Z: "d2@2 d2@2 ~@2 d2 ~ d2 ~ d2@2 ~@2 a1 ~",
  AA: "bb1 ~ bb1@2 ~@2 bb1@2 ~@2 bb1@2 c2@4", AB: "f1!2 ~ f1 g1 c2 f2 c2", AC: "d2@2 d2@3 ~ d2 ~ d2@2 d2@2 ~@2 a1 ~",
  AD: "bb1@5 ~ c2@5 ~ c2@3 ~", AE: "f1@2 ~ f1 g1 c2 e2 c2", AF: "e2@4 ~@2 e2 ~ e2@2 e2@2 ~@2 e2 ~",
  AG: "eb2@2 eb2@2 ~@2 eb2 ~ eb2 ~ eb2@2 ~@2 eb2 ~", AH: "d2@4 ~@2 d2 ~ d2 ~ d2@2 ~@2 d2 ~",
  AI: "db2@4 ~@2 db2 ~ db2 ~ db2@2 ~@2 db2 ~", AJ: "c2@6 ~@2 c2@3 ~ c2@4", AK: "f1@4 ~@2 f1 ~ f1@5 ~ f1 ~",
  AL: "f1@4 ~@2 f1@3 ~ f2 ~ f2 c2 f1@2", AM: "db2@5 ~ db2 ~ db2 ~ db2@2 ~@2 db2 ~", AN: "d2@15 ~", AO: "c2", AP: "bb1",
  AQ: "d2", AR: "c2@15 ~", AS: "[f1@7 ~]/2", AT: "f1 ~@3",
})).s("gm_electric_bass_finger").gain(0.36)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B C D E F G H I J@2 K@2 L M N O P Q R S T U V W X Y Z AA AB AC AD AE AB AF AG AH AI AJ AK AL AM AN AO AP L AQ AR AS
  AT AU AV S AW AX AY AZ X BA BB BC AB BD AD AE AB BE AG AH AI BF BG BH BI BJ BK@2 BL BM BN BO BP BQ BR A BS C BT BU
  BV@2 BW@2 AB BX AD AE AB BY AG BZ AI BF CA CB AM CC CD@8
>`.pickRestart({
  A: "~ a4 g4 bb4", B: "a4@4 f4@4 g4@4 c4@3 ~", C: "~ [f4,a4] [e4,g4] [g4,bb4]", D: "[f4,a4] [d4,f4] g4@2, ~@4 e4@3 ~",
  E: "[d4,bb4] ~@3", F: "[c4,f4]@5 ~ [c4,g4]@5 ~ [c4,a4]@3 ~", G: "[c4,g4]@5 ~ [c4,f4]@5 ~ [c4,g4]@2 ~@2",
  H: "[c4,f4]@5 ~ [c4,g4]@4 ~@2 [c4,a4]@3 ~", I: "[c4,g4]@6 f4@6 [c4,g4]@3 ~, ~@3 c4@2 ~@3",
  J: "[g4@3 f4@3 c4@5 ~ c4 d4 [c4,f4]@2, c4@2 ~ c4@2 ~@11]/2", // F5
  K: "[[d4,g4]@6 [c4,f4]@5 ~ [f4,a4]@7 ~ d4@2 [c4,f4]@5 ~ [d4,g4]@2 [c4,f4] ~]/2", L: "c5@8 bb4@5 ~@3, f4@13 ~@3",
  M: "a4@3 ~ a4 ~ a4@3 ~ g4@2 f4@3 ~, c4@7 ~", N: "g4@2 a4 ~ a4@10 ~@2, c4@7 ~", O: "[d4,g4]@6 [c4,f4]@7 ~@3",
  P: "d5@8 c5@4 bb4@3 ~, f4@15 ~", Q: "bb4@4 ~@2 bb4 ~ bb4@2 c5@2 d5@2 ~@2, d4@7 ~",
  R: "d5@2 [e4,c5] ~ [e4,c5]@10 ~@2, f4 ~@15", S: "[e4,c5]", T: "~@4 bb4@3 ~ bb4@6 a4@2",
  U: "bb4@3 ~ a4@2 g4@2 f4 ~ f4@2 g4@2 ~@2, d4@7 ~ c4@7 ~", V: "~@4 bb4@2 ~@2 bb4@5 ~ a4@2",
  W: "bb4 ~ a4@2 g4 ~ g4@4 f4@5 ~, d4@7 ~", X: "[e4,c5] ~ [f4,d5] ~ [f4,d5]@12", Y: "~@8 d5@2 e5@2 f5@3 ~",
  Z: "f5@2 [c5,g5]@3 ~ [c5,g5]@10", AA: "[bb4,f5]@7 ~ f5@4 d5@2 c5 ~, ~@4 bb4@3 ~", AB: "~@4 f4 ~ f4@4 g4@2 a4@2 bb4 ~",
  AC: "a4@6 f4@4 g4@2 a4@2 bb4 ~, c4", AD: "[f4,a4]@10 f4 ~ f4@4", AE: "bb4 ~ bb4 ~ bb4 ~ a4@4 g4@2 f4@3 ~, d4@15 ~",
  AF: "a4@5 ~ f4 ~ f4@2 g4@2 a4@2 bb4@2, c4", AG: "[f4,a4]@9 ~ f4 ~ f4@3 ~",
  AH: "c5@2 bb4@2 a4 ~ a4@4 g4@6, d4@2 ~ e4@5", AI: "a4@8 g4@2 f4 ~ f4@2 c4 ~", AJ: "g4@3 a4, c4@15 ~",
  AK: "f4@3 g4@2 a4@2 ~, c4@15 ~", AL: "bb4@2 bb4@3 ~ g4@2 f4@5 ~ f4 ~, f4 ~", AM: "bb4 a4, f4@15 ~",
  AN: "f4@11 ~ f4@3 ~, d4@15 ~", AO: "f4@5 ~ g4@6 a4@4", AP: "g4@3 f4@3 e4 ~",
  AQ: "a4@3 ~ a4 ~ a4@4 g4@2 f4@3 ~, c4@15 ~", AR: "g4@2 a4 ~ a4@11 ~, c4", AS: "[d4,g4]@3 [c4,f4]@4 ~",
  AT: "d5@8 c5@4 bb4@3 ~, f4@7 ~", AU: "bb4@4 ~@2 bb4 ~ bb4@2 c5@2 d5@3 ~, d4@7 ~",
  AV: "d5@2 [e4,c5] ~ [e4,c5]@11 ~, f4 ~@15", AW: "~@4 bb4@3 ~ bb4@6 a4 ~",
  AX: "bb4@3 ~ a4@2 g4@2 f4 ~ f4@2 g4@3 ~, d4@7 ~ c4@7 ~", AY: "~@4 bb4@2 ~@2 bb4@6 a4 ~",
  AZ: "bb4@2 a4@2 g4 ~ g4@4 f4@5 ~, d4@7 ~", BA: "~@6 d5 ~ d5@2 e5@2 f5@3 ~", BB: "f5@2 [c5,g5]@3 ~ [c5,g5]@9 ~",
  BC: "[bb4,f5]@7 ~ [bb4,f5]@4 d5@2 c5 ~", BD: "a4@5 ~ f4@4 g4@2 a4@2 bb4 ~, c4@15 ~",
  BE: "a4@6 f4 ~ f4@2 g4@2 a4@2 bb4 ~, c4", BF: "g4@12 a4@3 ~, c4@7 ~", BG: "f4@6 g4@4 a4@5 ~, c4@7 ~",
  BH: "bb4 ~ bb4@3 ~ g4@2 f4@5 ~ f4@2, f4@3 ~@5", BI: "bb4@8 a4@5 ~ f4@2, f4@3 ~",
  BJ: "[d4,bb4]@4 a4@2 f4@2 d4 ~ d4@2 c4@4", BK: "[[f4,a4]@24 c4@2 d4@2 [c4,f4]@3 ~]/2",
  BL: "[d4,f4]@8 c4@2 d4@2 [c4,f4]@3 ~", BM: "[f4,a4] [e4,g4]", BN: "[a4,c5] a4, ~@4 f4@3 ~",
  BO: "f4@8 c4 ~ d4@2 [c4,f4]@3 ~, g4@5 ~@3", BP: "[d4,f4]", BQ: "f4, bb3@7 ~", BR: "[bb3,e4]", BS: "a4 f4 g4 c4",
  BT: "[f4,a4] [c4,f4] [e4,g4]@2", BU: "[f4,a4]", BV: "[g4@6 f4@6 c4@11 ~ c4@2 d4@2 f4@4]/2",
  BW: "[g4@6 f4@6 c4@7 ~ c4@2 d4 ~ [c4,f4]@4 [d4,g4]@2 [c4,f4]@2]/2", BX: "a4@5 ~ f4@4 g4@2 a4@2 bb4@2, c4",
  BY: "a4@5 ~ f4 ~ f4@2 g4@2 a4@2 bb4 ~, c4", BZ: "c5@2 bb4@2 a4 ~ a4@4 g4@6, d4@5 ~ e4@10",
  CA: "f4@3 g4@2 a4@3, c4@15 ~", CB: "bb4 ~ bb4@3 ~ g4@2 f4@5 ~ f4 ~, f4@3 ~@5", CC: "f4@10 ~@2 f4@3 ~, bb3@15 ~",
  CD: "[a3,f4]/8", // Dm
})).s("gm_piano").gain(0.42)

// chords · lead 5 charang · "CHARANG"
const lead_5_charang = note(`<
  ~@5 A B C B D@2 E@2 ~@16 C B C B C B C B C B C F G H C I ~@16 J B C B C B C B C B C F G H K@2 L M N@2 L O@2 ~@5 P@2
  Q@2 J B C B C B C B C B C F G H R ~@7
>`.pickRestart({
  A: "[c4,f4] ~ c4 ~ c4 ~ g4@2 c4 ~ c4 ~ [c4,a4] ~ c4 ~, ~@6 c4 ~@9", // F5 F
  B: "[c4,g4] ~ c4 ~ c4 ~ [c4,f4] ~ c4 ~ c4 ~ [c4,g4] ~ c4 ~", // C5 F5 C5
  C: "[c4,f4] ~ c4 ~ c4 ~ [c4,g4] ~ c4 ~ c4 ~ [c4,a4] ~ c4 ~", D: "[g4@6 f4@6 c4@11 ~ c4@2 d4@2 f4@3 ~]/2",
  E: "[f4@5 ~ f4@5 ~ g4@8 d4@2 f4@6 d4@2 c4@2]/2", F: "[c4,bb4] ~ c4 ~ c4 ~ [c4,a4] ~ c4 ~ c4 ~ [c4,g4] ~ c4 ~",
  G: "[db4,f4] ~ db4 ~ db4 ~ [db4,f4] ~ db4 ~ db4 ~ [db4,f4] ~ db4 ~", // Db
  H: "[c4,f4] ~ c4 ~ c4 ~ [c4,f4] ~ c4 ~ c4 ~ [c4,f4] ~ c4 ~", // F5
  I: "[c4,g4] ~ c4 ~ c4 ~ [c4,f4] ~ c4 ~ c4 ~ [c4,e4] ~ c4 ~", // C5 F5 C
  J: "[c4,f4] ~ c4 ~ c4 ~ [c4,g4] ~ c4 ~ c4 ~ a4@2 c4 ~, ~@12 c4 ~@3", K: "[[c4,f4] ~@15 c3@15 ~, a3@31 ~, d3 ~]/2",
  L: "[bb2,f3]", M: "a3@8 g3@7 ~, c3", N: "[[d3,a3]@31 ~]/2", O: "[~@3 c4, [c3,g3]]/2",
  P: "[~@6 f4@6 c4@11 ~ [c4,c5]@2 [d4,d5]@2 [f4,f5]@2 ~@2]/2", // C D F
  Q: "[[f4,c5]@5 ~ [f4,c5]@6 [g4,eb5]@8 [d4,d5]@2 ~@6 [d4,d5]@2 [c4,c5]@2, ~@12 [f4,f5]@3 ~]/2", // F5 Cm D C F
  R: "[c4,f4] ~@15, f3 ~@7", // F5
})).s("gm_lead_5_charang").gain(0.19).pan(0.2)

// chords · lead 5 charang · "CHARANG"
const lead_5_charang_2 = note(`<
  ~@5 A B A B C D C E ~@8 F G H I J K L M N@2 O@2 N@2 P@2 Q@2 R@2 S T U@2 ~@8 H G H I J K L M V@2 W@2 V@2 X@2 Y@2 Z@2 S
  T ~@14 AA D C AB V@2 W@2 V@2 X@2 Y@2 Z@2 S T ~@8
>`.pickRestart({
  A: "[c4,f4] ~ c4 ~ c4 ~ [c4,g4] ~ c4 ~ c4 ~ [c4,a4] ~ c4 ~", // F5 C5 F
  B: "[c4,g4] ~ c4 ~ c4 ~ [c4,f4] ~ c4 ~ c4 ~ [c4,g4] ~ c4 ~", // C5 F5 C5
  C: "[c4,g4] ~ c4 ~ c4 ~ [c4,f4] ~ c4 ~ c4 ~ [c4,a4] ~ c4 ~", // C5 F5 F
  D: "[c4,g4]@2 c4 ~ c4 ~ [c4,g4] ~ c4 ~ c4 ~ [c4,g4] ~ c4 ~", E: "c4@2 c4 ~ c4 ~ [c4,g4]@10, g4 ~@15",
  F: "[d3,g3,bb3]@2 ~@4 [c3,f3,a3] ~ [d3,bb3]@2 [d3,g3,bb3] ~@5, ~@8 g3 ~@7", G: "~@6 c3 ~ [c3,f3,a3]@7 ~",
  H: "[d3,g3,bb3]@2 ~@4 [c3,f3,a3] ~ [g3,bb3] ~ [d3,g3,bb3] ~@5, ~@4 d3 ~@3", I: "~@12 [c3,f3,a3]@3 ~",
  J: "[f3,bb3,d4]@15 ~", K: "[f3,a3,d4]@15 ~", L: "[e3,g3,c4]@15 ~", M: "[f3,g3,c4]@7 ~ [e3,g3,c4]@8",
  N: "[c3@6 c4@25 ~, f3@31 ~]/2", O: "[c3@3 ~@3 f4@10, f3@3 ~@5, ~@3 c4@13]/2",
  P: "[c3@3 ~@3 f4@9 ~, f3@3 ~@5, ~@3 c4@12 ~]/2", Q: "[~@6 c4@25 ~, [c3,f3]@31 ~]/2",
  R: "[c3@6 ~@6 f4@19 ~, f3@3 ~@5, ~@6 c4@25 ~]/2", S: "[db4,f4]@15 ~", T: "[c4,f4]@15 ~", U: "[c3,f3,c4]/2",
  V: "[f3@31 ~, c3@3 ~@13]/2", W: "[f3@3 f4@5, c3@3 ~@13]/2", X: "[f3@6 f4@9 ~, c3@3 ~@13]/2", Y: "[[c3,f3]@31 ~]/2",
  Z: "[f3@12 f4@19 ~, c3@3 ~@13]/2", AA: "[c4,g4]@2 c4 ~ c4 ~ [c4,f4] ~ c4 ~ c4 ~ [c4,a4] ~ c4 ~",
  AB: "[c4,g4]@2 c4 ~ c4 ~@3 g4@8, ~@3 c4@5", // C5
})).s("gm_lead_5_charang").gain(0.12).pan(0.6)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@5 A@6 B@2 ~@8 C@2 D@3 E F@2 ~@8 G H I J K L@3 ~@8 C@2 D@3 E F@2 ~@8 G H I J K M ~@14 N@2 B@2 ~@8 G H I J K M O ~@7
>`.pickRestart({
  A: "[f5@19 g5@5]/6", B: "f5/2", C: "[g3 g4@2 [a3,c4,f4], [bb3,d4]@3 ~]/2",
  D: "[bb3@8 ~@24 f4@15 ~, d4, g4@2 ~, ~@8 bb4@39 ~]/3", E: "[f4,a4,d5]", F: "[e4@4 f5@3 e5, [g4,c5]]/2", G: "[f5,a5]",
  H: "[e5,g5]", I: "[eb5,f5]", J: "[d5,f5]", K: "[db5,f5]", L: "[c5,f5]/3", M: "[c5,f5]", N: "[f5@3 g5@5]/2",
  O: "[f4,f5]@3 ~@13", // F
})).s("gm_string_ensemble_1").gain(0.18)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note("<~@17 A B C@2 ~@28 A B C@2 ~@62>".pickRestart({
  A: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,a3] ~", // D5
  B: "[bb2,f3] ~ f3 ~ [bb2,f3] ~ f3 ~ f3 ~ [bb2,f3] ~ [bb2,f3] ~ f3 ~", // Bb5
  C: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~", // C5
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.7)

// chords · pad halo · "HALO PAD"
const pad_halo = note("<~@13 A B@2 C A D E@2 ~@24 A B@2 C A D E@2 ~@62>".pickRestart({
  A: "~@4 [f4,a4,d5]@11 ~", B: "[~@4 f4@12 [f4,a4,c5]@15 ~, ~@4 [bb4,d5]@15 ~@13]/2",
  C: "[g4,bb4,c5]@5 ~ [f4,a4,c5]@10", D: "~@4 [f4,bb4,d5]@11 ~", E: "[[f4,bb4,d5]@3 ~ [e4,g4,c5]@28]/2",
})).s("gm_pad_halo").gain(0.16)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@5 A ~ A ~@3 A ~@5 A B A ~@2 C ~@26 A B A ~@2 C ~@23 A ~ A@3 ~@8 A ~@23
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@7 x", C: "~@5 x ~@2",
})).gain(0.26)

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

// drums · low tom
const low_tom = s("lt").struct("<~@12 A ~@7 B ~@15 B ~@15 B ~@15 B ~@5 C ~@8 D ~@16 B ~@5 C ~@8>".pickRestart({
  A: "~@15 x", B: "~@7 x", C: "~@5 x ~ x", D: "~@3 x",
})).gain(0.36)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A@3 B ~ C D@3 E D@3 A F A G A G H A F A I A I@2 J A ~@16 A F A G A G H A F A I A I@2 J A ~@14 A@12 B ~ E D@2 K ~@22
>`.pickRestart({
  A: "x!4", B: "x ~ x!3 ~ x!2", C: "~ x!2 ~ x!4", D: "x!8", E: "~ x!7", F: "x ~ x ~ x!3 ~", G: "x!7 ~",
  H: "x!3 ~ x ~ x ~", I: "x ~ x!3 ~ x ~", J: "x!5 ~ x ~", K: "x!6 ~@2",
})).gain(0.31)

// drums · pedal hat · soft notes
const pedal_hat_soft = s("hh").struct(`<
  A@3 B ~ C ~@7 D C D ~ B ~ E F G A B A D@2 E H ~@16 D C D ~ B ~ E F G A B A D@2 E H ~@14 A@7 F I A@3 B ~@27
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~@3 x ~@2", C: "~@3 x ~@4", D: "~ x ~@3 x ~ x", E: "~@5 x ~ x", F: "~ x ~ x ~@4",
  G: "~ x ~ x ~@3 x", H: "~ x ~@6", I: "~@3 x ~ x ~ x",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct("<~@12 [~@7 x] ~@3 [~@7 x] ~@31 [~@7 x] ~@66>").gain(0.31)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A ~@9 B ~ B@3 ~ C ~@25 B ~ B@3 ~ C ~@35 A ~@26>".pickRestart({
  A: "x", B: "~@7 x", C: "~@5 x ~ x",
})).gain(0.26)

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

// drums · ride
const ride = s("rd").struct("<~@29 A B@7 A B@3 A B C D ~@16 A B@7 A B@3 A B ~@18 A E B@6 A B@3 A B ~@8>".pickRestart({
  A: "~ x!7", B: "x!8", C: "~ x ~ x!5", D: "x!4 ~ x ~@2", E: "x!7 ~",
})).gain(0.15)

// … 4 more lines

More by Wilson Phillips