Strudelify
Don't Stop Believin' cover art

1981 · Escape

Don't Stop Believin'

Journey

KeyD♭ majorTempo118 bpm
0:00/0:00
// Don't Stop Believin' — Journey
// 118 bpm, 4/4, key C# major. Source: 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: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 14 "synth strings2" synth strings 1 (copy of ch 16 "choir" pad new age)
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(118/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.

// chords · piano
const piano = note(`<
  A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4 C D E F G D E H I J F K C D L@2 M N O P@7 Q@8 R S@8 H I J F K C D L@2 M N T@4
  Q@24 U@2 V@5
>`.pickRestart({
  A: "[~@10 [eb2,ab3]@2 [f2,db4,f4]@2 ab3@2 [c4,eb4]@2 ~@6 [c4,eb4]@2 [bb2,ab3]@2 [c3,c4,eb4]@2 ab3 ~@11 [c3,f3]@2 [db3,bb3]@2 gb3@2 ~@14 gb3@2, db2@12 ~@2 ab2@12 ~@4 bb2@14 ~@2 gb2@17 ~, [db4,f4]@4 [db4,f4]@4 [db4,f4]@4 ~@8 [c4,eb4]@4 ~@8 [bb3,db4]@4 [bb3,db4]@4 [bb3,db4]@4 db4 ~@3 [bb3,db4]@4 [bb3,db4]@4 [bb3,db4]@4 [db3,bb3,db4]@4, ~@2 ab3@4 ab3@4 ~@8 ab3@4 ab3@4 ~@8 f3@4 f3@4 ~@8 gb3@4 gb3@4 [c3,gb3]@5 ~]/4", // Ab5 Db Cm Bb7 Cm F5 Gb Db …
  B: "[~@8 [db2,db4,f4]@2 [eb2,ab3]@2 [f2,db4,f4]@2 ab3@2 eb4@2 ~@6 [c4,eb4]@2 [bb2,ab3]@2 [c3,c4,eb4]@2 ab3 ~@11 [db3,f3]@2 [f2,ab3,c4]@2 f3@2 ~@8 [bb3,db4]@2 [c3,gb3]@2 [db3,bb3,db4]@2 gb3@2, db2@8 ~@6 ab2@12 ~@4 f2@10 [f2,ab3,c4]@4 ~@2 gb2@13 ~@5, [db4,f4]@2 [db4,f4]@2 ~@4 c4@2 [c4,eb4]@2 ~@5 f3@2 f3@2 ~@4 gb3@2 gb3@2 ~@3, ~ ab3@2 ab3@2 ~@4 ab3@2 ab3@2 ~@3 [ab3,c4]@2 [ab3,c4]@2 ~@4 [bb3,db4]@2 [bb3,db4]@2 ~@4]/4", // Db Ab5 Db Cm Bb7 Cm Db Fm …
  C: "[gb2,gb3,bb3,eb4]@3 [gb2,gb3,bb3,db4]@5", D: "[gb2,gb3,bb3,eb4]@6 [gb2,bb3,db4,f4]@9 ~",
  E: "[db2,eb3,ab3,c4]@2 [db2,eb3,ab3,c4]@4 [db2,f3,ab3,db4]@9 ~", // Ab Db
  F: "[db2,eb3,ab3,c4] [db2,eb3,ab3,c4]@2 [db2,f3,ab3,db4]@5", G: "[gb2,gb3,bb3,eb4]@3 [gb2,gb3,bb3,db4]@4 ~",
  H: "[db2,eb3,ab3,c4]@3 [db2,f3,ab3,db4]@5", I: "[gb2,gb3,bb3,eb4]@3 ~@3 [gb2,gb3,bb3,db4]@9 ~",
  J: "[gb2,gb3,bb3,eb4]@3 ~@3 [gb2,bb3,db4,f4]@9 ~", // Ebm Gbmaj7
  K: "[db2,eb3,ab3,c4] [db2,eb3,ab3,c4]@2 db4@2 db4@3, ~@3 [db2,f3,ab3]@5", // Ab Db
  L: "[ab2@2 ab2 ab4@5 ~@2 [db2,db4] [gb2,bb3,db4,gb4]@5, [c4,eb4,ab4]@3 f4@8 ~@5, ~@3 [db2,db4]@7 ~@6, ~@8 [ab2,c4,eb4,ab4]@3 ~@5]/2", // Db Gb Ab Db Ab
  M: "~@5 [eb2,ab3] [f2,db4,f4] [ab2,ab3], db2@3 ~, [db4,f4]!3 ~, ~ ab3@2 ab3@2 ~@3", // Ab5 Db Ab Db
  N: "[c4,eb4] ~@3 [c4,eb4] [bb2,ab3] [c3,c4,eb4] bb2, ~@2 ab3@4 ab3@4 ~@4 ab3 ~, ~ [c4,eb4] ~@2", // Cm Bb7 Cm
  O: "~@5 [c3,f3] [db3,bb3] [gb2,gb3], [bb3,db4]@4 [bb3,db4]@4 [bb3,db4]@4 db4 ~@3, ~ f3@2 f3@2 ~@3", // F5 Gb Bbm
  P: "[~@12 [bb3,db4]@2 gb3@2 ~@10 [eb2,ab3]@2 [f2,db4,f4]@2 ab3@2 [c4,eb4]@2 ~@6 [c4,eb4]@2 [bb2,ab3]@2 [c3,c4,eb4]@2 ab3 ~@11 [c3,f3]@2 bb3@2 gb3@2 ~@12 [bb3,db4]@2 gb3@2 ~@8 [db2,db4,f4]@2 [eb2,ab3]@2 [f2,db4,f4]@2 ab3@2 eb4@2 ~@6 [c4,eb4]@2 [bb2,ab3]@2 [c3,c4,eb4]@2 f2@2, [bb3,db4]!3 db3@12 db3@4 db3@9, ~@2 gb3@4 gb3@4 [c3,gb3]@5 ~ db2@12 ~@2 ab2@12 ~@4 bb2@14 ~@2 gb2@17 ~ db2@8 ~@6 ab2@12 ~@6, ~@16 [db4,f4]@4 [db4,f4]@4 [db4,f4]@4 ~@8 [c4,eb4]@4 ~@8 [bb3,db4]@4 [bb3,db4]@4 [bb3,db4]@4 db4 ~@3 [bb3,db4]@4 [bb3,db4]@4 [bb3,db4]@4 ~@4 [db4,f4]@4 [db4,f4]@4 ~@8 c4@4 [c4,eb4]@4 ~@8, ~@18 ab3@4 ab3@4 ~@8 ab3@4 ab3@4 ~@8 f3@4 f3@4 ~@8 gb3@4 gb3@4 [c3,gb3]@5 ~@3 ab3@4 ab3@4 ~@8 ab3@4 ab3@4 ~@4 ab3 ~]/7", // Bbm Ab5 Db Cm Bb7 Cm F5 Bbm …
  Q: "[~@10 f3@2 [f2,ab3,c4]@2 f3@2 ~@8 [bb3,db4]@2 [c3,gb3]@2 [bb3,db4]@2 gb3@2 ~@10 [eb2,ab3]@2 [f2,db4,f4]@2 ab3@2 [c4,eb4]@2 ~@6 [c4,eb4]@2 [bb2,ab3]@2 [c3,c4,eb4]@2 ab3 ~@11 [c3,f3]@2 bb3@2 gb3@2 ~@12 [bb3,db4]@2 gb3@2 ~@8 [db2,db4,f4]@2 [eb2,ab3]@2 [f2,db4,f4]@2 ab3@2 eb4@2 ~@6 [c4,eb4]@2 [bb2,ab3]@2 [c3,c4,eb4]@2 f2@2, [ab3,c4]@4 [ab3,c4]@4 [f2,ab3,c4]@4 ~@2 gb2@13 ~@5 db2@12 ~@2 ab2@12 ~@4 bb2@14 ~@2 gb2@17 ~ db2@8 ~@6 ab2@12 ~@6, ~ f3@2 f3@2 db3@9 db3@24 db3@8 db3@18, ~@16 [bb3,db4]@4 [bb3,db4]@4 ~@8 [db4,f4]@4 [db4,f4]@4 [db4,f4]@4 ~@8 [c4,eb4]@4 ~@8 [bb3,db4]@4 [bb3,db4]@4 [bb3,db4]@4 db4 ~@3 [bb3,db4]@4 [bb3,db4]@4 [bb3,db4]@4 ~@4 [db4,f4]@4 [db4,f4]@4 ~@8 c4@4 [c4,eb4]@4 ~@8, ~@18 gb3@4 gb3@4 ~@8 ab3@4 ab3@4 ~@8 ab3@4 ab3@4 ~@8 f3@4 f3@4 ~@8 gb3@4 gb3@4 [c3,gb3]@5 ~@3 ab3@4 ab3@4 ~@8 ab3@4 ab3@4 ~@4 ab3 ~]/8", // Fm Bbm Cdim Bbm Ab5 Db Cm Bb7 …
  R: "~@5 f3 [f2,ab3,c4] [gb2,f3], [ab3,c4]!2 [f2,ab3,c4] ~, ~ f3@2 f3@2 db3@3", // Fm Gbmaj7 Ab Fm
  S: "[~@8 [bb3,db4]@2 [c3,gb3]@2 [bb3,db4]@2 gb3@2 [gb2,gb3,bb3,eb4]@6 [gb2,gb3,bb3,db4]@10 [gb2,gb3,bb3,eb4]@6 [gb2,bb3,db4,f4]@9 ~ [db2,eb3,ab3,c4]@2 [db2,eb3,ab3,c4]@4 [db2,f3,ab3,db4]@9 ~ [db2,eb3,ab3,c4]@2 [db2,eb3,ab3,c4]@4 [db2,f3,ab3,db4]@10 [gb2,gb3,bb3,eb4]@6 [gb2,gb3,bb3,db4]@8 ~@2 [gb2,gb3,bb3,eb4]@6 [gb2,bb3,db4,f4]@9 ~ [db2,eb3,ab3,c4]@2 [db2,eb3,ab3,c4]@4 [db2,f3,ab3,db4]@9 ~, [bb3,db4]!2 ~@30, ~ gb3@2 gb3@2 ~ db3@58]/8", // Bbm Cdim Bbm Ebm Gb Ebm Gbmaj7 Ab …
  T: "[~@5 [c3,f3] bb3 gb3 ~@6 [bb3,db4] gb3 ~@4 [db2,db4,f4] [eb2,ab3] [f2,db4,f4] ab3 eb4 ~@3 [c4,eb4] [bb2,ab3] [c3,c4,eb4] f2, [bb3,db4]@4 [bb3,db4]@4 [bb3,db4]@4 db4 ~ gb2@17 ~ db2@8 ~@6 ab2@12 ~@6, ~ f3@2 f3@2 ~ db3@8 db3@18, ~@4 [bb3,db4]!3 ~ [db4,f4]!2 ~@2 c4 [c4,eb4] ~@2, ~@18 gb3@4 gb3@4 [c3,gb3]@5 ~@3 ab3@4 ab3@4 ~@8 ab3@4 ab3@4 ~@4 ab3 ~]/4", // F5 Bbm Db Ab5 Db Cm Bb7 Cm …
  U: "[~@8 [f2,ab3,c4]@3 f3@2 [f2,ab3,c4]@2 f3@2 ~@10 [bb3,db4]@3 [c3,gb3]@2, [ab3,c4]@4 [ab3,c4]@4 ~@7 gb2@16 ~, ~@2 f3@4 f3@4 ~ db3@21, ~@17 [bb3,db4]@5 [bb3,db4]@5 ~@5, ~@20 gb3@5 gb3@5 ~@2]/2", // Fm Bbm Cdim Ab Bbm
  V: "[[bb3,db4]@3 gb3@2 ~@75, db3@79 ~]/5", // Bbm
})).s("gm_piano").gain(0.8)

// chords · string ensemble 1 · "synth strings"
const string_ensemble_1 = note(`<
  ~@40 A B C D E F G D H F I D J K L M ~@20 A B C D E F G D H F I D J K L M ~@37
>`.pickRestart({
  A: "[gb4,bb4,eb5]@5 ~ [gb4,bb4,db5] ~@9", B: "[gb4,bb4,eb5]@2 ~ [bb4,db5,f5]@3 ~@2",
  C: "[eb4,ab4,c5] ~ [eb4,ab4,c5] ~@3 [f4,ab4,db5]@9 ~", D: "[eb4,ab4,c5] ~ [eb4,ab4,c5] ~@3 [f4,ab4,db5]@7 ~@3",
  E: "eb5@5 ~ db5@2 ~@8, [gb4,bb4] ~", F: "[gb4,bb4,eb5]@5 ~ [bb4,db5,f5]@7 ~@3",
  G: "[eb4,c5] ~ [eb4,ab4] ~@3 [f4,ab4,db5]@8 ~@2, ab4 c5 ~@6", H: "[gb4,bb4]@3 gb4 ~@4, eb5@5 ~ db5 ~@9",
  I: "[eb4,ab4,c5] ~ [eb4,ab4,c5] ~@3 [f4,ab4,db5]@8 ~@2", J: "[gb4,bb4,eb5]@6 [gb4,bb4,db5] ~@9",
  K: "[gb4,bb4,eb5]@3 ~@3 [bb4,db5,f5]@8 ~@2", L: "[c5,eb5,ab5]@5 ~ [db5,f5,ab5]@7 ~@3",
  M: "[c5,eb5,ab5]@3 ~ [db5,f5,ab5] ~ [bb4,db5,gb5]@10", // Ab Db Gb
})).s("gm_string_ensemble_1").gain(0.24)

// other · orchestra hit · Db
const orchestra_hit = note("<~@31 [~@12 [db2,db3,db4,db5] ~ [db2,db3,db4,db5] ~] ~@97>")
  .s("gm_orchestra_hit").gain(0.41)

// bass · electric bass finger · "bass"
const bass = note(`<
  A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4 C D E F C G H F C I E J C K L M A@8 B@4 A@4 B@4 C D E F C G H F C I E J C K L
  M A@4 B@4 A@4 B@4 A@4 B@4 A@4 N@4 O ~@4
>`.pickRestart({
  A: "[db1@10 eb1@2 f1@2 ab1@11 ~ bb1@2 c2@2 bb1@12 c2@2 db2@2 ~@12 c2@2 db2@4, ~@23 gb1@7 ~@2]/4",
  B: "[db1@7 ~ db1@2 eb1@2 f1@2 ab1@10 ~@2 bb1@2 c2@2 f1@9 ~ f1@2 db2@2 f1@2 gb1@12 c2@2 db2@4]/4",
  C: "gb1 ~ gb1 ~ gb1 ~ gb1 ~ gb1 ~ gb1 ~ gb1 ~ gb1 ~", D: "gb1 ~ gb2@2 gb1@2 db2@2 gb2@2 db2@2 f2@2 db2 ~",
  E: "db1 ~ db1 ~ db1 ~ db1 ~ db1 ~ db1 ~ db1 ~ db1 ~", F: "db1 ~ db2@2 c2@2 ab1@2 db2@2 ab1@2 c2@2 db2@2",
  G: "gb1@2 gb2@2 db2@2 gb2@2 db2@2 f2@2 db2@2 gb1 ~", H: "db1@3 ~ db1 ~ db1 ~ db1 ~ db1 ~ db1 ~ db1 ~",
  I: "gb1@2 gb2@2 db2@2 gb1@2 gb2@2 gb1@2 db2@2 gb2 ~", J: "db1 db2 c2 db2 ab1 c2 db2 ab1",
  K: "gb1 gb2 db2 bb1 gb2 gb1 db2 gb2", L: "ab1@3 db1@5", M: "ab1@2 db1 gb1@5",
  N: "[db1@7 ~ db1@2 eb1@2 f1@2 ab1@10 ~@2 bb1@2 c2@2 f1@9 ~ f1@2 ~ db2@2 f1@2 gb1@15 c2@2]/4", O: "db2@5 ~@11",
})).s("gm_electric_bass_finger").gain(0.8).pan(0.7)

// other · pad new age · "choir"
const pad_new_age = note(`<
  ~@59 A ~@3 A ~@3 B ~@3 A ~@3 B ~@19 A ~@3 A ~@3 A ~@3 B ~@3 A ~@3 A ~@3 A ~@3 C ~@5
>`.pickRestart({
  A: "~@2 ab3@2 ~@2 ab4@2 ~@2 gb4@3 ~@3", B: "~ ab3 ~ ab4 ~ gb4 ~@2", C: "~@4 ab3@2 ~@3 ab4@3 ~@2 gb4@2",
})).s("gm_pad_new_age").gain(0.5).pan(0.2)

// chords · pad poly · "future pad"
const pad_poly = note(`<
  ~@56 A B C D E F G H I J K L I M N O P Q K R ~@16 S T U V W F X Y P Z AA L AB F AC Y AD J U AE AF AG AH AI AJ T AK AL
  P T K AM ~@5
>`.pickRestart({
  A: "~@2 [db6,f6] db6 ~@4, ~ ab5 ~@2, ~@6 f6 ~@9", B: "~@2 [c6,eb6]!2 ~@4, ~ ab5 ~@2",
  C: "~@4 [f5,db6] ~ [f5,bb5,db6]@2 ~@8, ~@2 bb5 ~@5", D: "~@2 [gb5,bb5,db6] [bb5,db6] ~@4, ~@6 gb5 ~@9",
  E: "~@2 [ab5,db6] [ab5,db6,f6] ~@4, ~@4 f6 ~@11", F: "~@2 [ab5,c6] [ab5,c6,eb6] ~@4, ~@4 eb6 ~@11",
  G: "~@2 [f5,bb5,db6] [f5,bb5] ~@4, ~@6 db6 ~@9", H: "~@2 [gb5,bb5] [gb5,bb5,db6] ~@4, ~@4 db6 ~@11",
  I: "~@4 [db6,f6] ~ [ab5,db6]@2 ~@8, ~@4 ab5@2 f6 ~@9", J: "~@2 [ab5,c6,eb6]!2 ~@4",
  K: "~@4 [f5,ab5,c6] ~ [f5,ab5,c6]@2 ~@8", L: "~@4 [gb5,bb5,db6] ~ [gb5,bb5,db6]@2 ~@8",
  M: "~@2 [c6,eb6] [ab5,c6,eb6] ~@4, ~@4 ab5 ~@11", N: "~@2 [f5,bb5] [f5,bb5,db6] ~@4, ~@4 db6 ~@11",
  O: "~@2 [gb5,bb5]!2 ~@4, ~ db6 ~@2", P: "~@4 [db6,f6] ~ [db6,f6]@2 ~@8, ~ ab5 ~@2",
  Q: "~@4 [ab5,eb6] ~ [ab5,eb6]@2 ~@8, ~ c6 ~@2", R: "~@4 [bb5,db6] ~ [bb5,db6]@2 ~@8, ~ gb5 ~@2",
  S: "~@2 ab5!2 ~@4, ~ db6 ~@2, ~@4 f6 ~ f6 ~@9", T: "~@4 eb6 ~ eb6@2 ~@8, ~ [ab5,c6] ~@2", U: "~@2 [f5,bb5,db6]!2 ~@4",
  V: "~@4 [bb5,db6] ~ [gb5,bb5,db6]@2 ~@8, ~@2 gb5 ~@5", W: "~@2 db6!2 ~@4, ~ ab5 ~@2, ~@4 f6 ~ f6 ~@9",
  X: "~@2 [f5,ab5,c6]!2 ~@4", Y: "~@2 [gb5,bb5] [bb5,db6] ~@4, ~@4 db6 ~@11",
  Z: "~@2 [c6,eb6] eb6 ~@4, ~ ab5 ~@2, ~@6 c6 ~@9", AA: "~@4 [bb5,db6] ~ [bb5,db6]@2 ~@8, ~@2 f5 ~@5",
  AB: "~@2 db6 [db6,f6] ~@4, ~ ab5 ~@2, ~@4 f6 ~@11", AC: "~@2 [f5,ab5] [f5,ab5,c6] ~@4, ~@4 c6 ~@11",
  AD: "~@4 [db6,f6] ~ [ab5,db6,f6]@2 ~@8, ~@2 ab5 ~@5", AE: "~@4 db6 ~ db6@2 ~@8, ~ [gb5,bb5] ~@2",
  AF: "~@2 [ab5,db6]!2 ~@4, ~@4 f6 ~ f6 ~@9", AG: "~@4 eb6@2 eb6 ~@9, ~ [ab5,c6] ~@2",
  AH: "~@4 [f5,c6] ~ [f5,ab5,c6]@2 ~@8, ~@2 ab5 ~@5", AI: "~@2 [gb5,bb5] bb5 ~@4, ~@4 db6 ~ db6 ~@9",
  AJ: "~@4 [db6,f6] ~ db6@2 ~@8, ~ ab5 ~@2, ~@6 f6 ~@9", AK: "~@2 [bb5,db6] [f5,bb5,db6] ~@4, ~@4 f5 ~@11",
  AL: "~@2 [bb5,db6]!2 ~@4, ~ gb5 ~@2", AM: "~@6 [bb5,db6]@2 ~ [bb5,db6]@2 ~@5, ~@6 gb5@3 ~@7",
})).s("gm_pad_poly").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@31 A ~@6 B@2 C@14 D E C@34 D E C@30 F G H ~@4>".pickRestart({
  A: "~@6 x!2", B: "x!8", C: "x!4", D: "x ~@2 x ~@4", E: "x ~ x!2 ~@4", F: "x ~@3 x ~@3 x ~@4 x ~@2",
  G: "~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~", H: "x ~@2 x ~@2 x ~@9",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@39 A B@14 ~ C B@19 D B@14 ~@2 B@31 E F ~@4>".pickRestart({
  A: "~ x!7", B: "~ x ~@2", C: "~@12 x!4", D: "~@2 x!6", E: "~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~", F: "x ~@2 x ~@12",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@40 A B A B A B A B A B A B A B ~@2 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 ~@2 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 E ~@4
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "~@2 x ~ x ~ x ~ x ~@2 x ~ x ~ x", D: "~ x ~@2 x ~ x ~@2 x ~ x ~@2 x ~", E: "x ~@2 x ~@12",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@38 A@2 B C B C B C B C B C B C B C ~@2 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C ~@2 B C B
  C B C B C B C B C B C B C B C B C B C B C B C B C B C D ~ E ~@4
>`.pickRestart({
  A: "x!8", B: "~@3 x", C: "~@7 x", D: "~@13 x ~@2", E: "~@3 x ~@12",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@40 A B A B A B A B A B A B A B ~@2 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 ~@2 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 D E F ~@4
>`.pickRestart({
  A: "~@3 x", B: "~@5 x ~ x", C: "~ x!7", D: "~@13 x ~@2", E: "~@7 x", F: "~@3 x ~@12",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@40 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@6
>`.pickRestart({
  A: "x",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@41 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~@5
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@7 x",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct("<~@31 A ~@22 B C ~@20 D ~@13 B C ~@32 E ~@4>".pickRestart({
  A: "~@6 x!2", B: "x ~@2 x ~@4", C: "x ~ x!2 ~@4", D: "x", E: "~@3 x ~@4",
})).gain(0.8)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@40 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~@6
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@11 x ~@4",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@41 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~@5
>`.pickRestart({
  A: "~ x ~@2", B: "~@3 x ~@4",
})).gain(0.8)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@40 A@14 ~@2 A@34 ~@2 A@30 B C D ~@4>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~@4 x ~@3 x", C: "~@4 x ~@4 x ~@4 x ~", D: "~@3 x ~@12",
})).gain(4.06)

stack(
  piano, string_ensemble_1, orchestra_hit, bass, pad_new_age, pad_poly, kick, snare, hihat, low_tom, mid_tom, open_hat,
  high_tom, crash, ride_bell, tambourine, cabasa
)

More by Journey