Strudelify

Lovin' Touchin' Squeezin'

Journey

KeyA majorTempo120 bpm
0:00/0:00
// Lovin' Touchin' Squeezin' — Journey
// 120 bpm, 12/8, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 68 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/6)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · shakuhachi
const shakuhachi = note("<~@44 A B A C A B A C A B A C A B A C A B A C A B A C>".pickRestart({
  A: "[a4,d5]@3 [a4,c#5]@2 [f#4,a4] [a4,d5]@3 [a4,c#5]@2 [a4,d5]", // D5 A F#m D5 A D5
  B: "~@2 [a4,d5] [a4,c#5]@2 [f#4,a4] [b4,d5]@3 [a4,c#5]@3", // D5 A F#m Bm A
  C: "[f#4,a4] [c#4,f#4]@3 [c#4,f#4]@2 [c#4,f#4]@4 [c#4,a4]@2 [d4,g4]@6 ~@6", // F#m F#5 F#m G5
})).s("gm_shakuhachi").gain(0.49).pan(0.9)

// chords · shakuhachi
const shakuhachi_2 = note("<~@48 A B A C A B A C A B A C D B A C A B A C>".pickRestart({
  A: "[a5,d6]@3 [a5,c#6]@2 [f#5,a5] [a5,d6]@3 [a5,c#6]@2 [a5,d6]", // D5 A F#m D5 A D5
  B: "~@2 [a5,d6] [a5,c#6]@2 [f#5,a5] [b5,d6]@3 [a5,c#6] ~@2", C: "[f#5,a5]@3 [f#5,a5]@2 [a5,c#6] [g5,b5]@2 ~@4",
  D: "~@3 [a5,c#6]@2 [f#5,a5] [a5,d6]@3 [a5,c#6]@2 [a5,d6]", // A F#m D5 A D5
})).s("gm_shakuhachi").gain(0.53).pan(0.2)

// chords · piano
const piano = note(`<
  ~ A B C D@2 E F G H I J@2 K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AL AM AN AO AL
  AM AN AP AQ@3 AR AQ@3 AS AT AU AN AV AQ@2 ~@2
>`.pickRestart({
  A: "~@14 e6 [a5,c6] e5@2 [d#5,a5]@2 [d5,a5]@2 [a4,e5]@2", // Am D#dim D5 A5
  B: "[a4,c#5,e5] [a4,c#5,e5,g5]@4 [a4,c#5,e5] [a4,c#5,e5]@2 ~@4", C: "~@2 [d4,d5] [c4,c5]",
  D: "[[e4,a4,c#5]@21 [e4,a4,c#5] [f#4,b4,d5] [g#4,c#5,e5]]/2", E: "[a4,d5,f#5]@9 [a4,d5,g#5] [a4,d5,f#5] e5",
  F: "[a4,d5,f#5]@9 [a4,d5,f#5] [g#4,c#5,e5] [f#4,b4,d5]", G: "[e4,a4,c#5]@4 [a4,b4] c#5 [e4,g#4,b4]@4 [e4,g#4,b4]@2",
  H: "[g4,b4,e5]@3 [g4,b4,d5]@8 [b4,d5,g5]", // Em G
  I: "[b4,d5,g5]@4 [c#5,e5,a5]@2 [c#5,e5,a5]@2 [c#5,e5,a5]@4 [c#5,e5,a5]@2 e6 [a5,c#6] c#5@2 [d#5,a5]@2 [d5,a5]@2 [b4,e5]@2", // G A D#dim D5 E5
  J: "[[e4,a4,c#5]@23 [f#4,a4,d5]]/2", K: "[e4,a4,c#5]@10 [f#4,b4,d5] [g#4,c#5,e5]",
  L: "[a4,d5,f#5]@7 [a4,d5,g#5]@2 [a4,d5,g#5] [g#4,d5,f#5] e5", M: "[a4,d5,f#5]@9 [a4,d5,g#5] c#5 a4",
  N: "[e4,a4,c#5]@4 [a4,b4] c#5 [e4,g#4,b4]@4 [e4,b4] [f#4,c#5]", O: "[g4,b4,e5]@3 [g4,b4,d5]@8 [g4,b4,g5]",
  P: "[b4,d5,g5]@2 [c#5,e5,a5] [c#5,e5,a5]@3 [c#5,e5,a5]!4 [c5,d#5,g5] [b4,d5,g5]", Q: "[a4,c#5,f#5]@11 [b4,d5,g5]",
  R: "[c#5,e5,a5]@3 [a5,d6] [a5,c#6] e5 [e5,a5,c#6]@3 [c#5,e5,a5] [c5,d#5,g#5] [b4,d5,g5]", // A D5 A G# G
  S: "[a4,c#5,f#5]@2 [a4,c#5,f#5]@2 [a4,c#5,f#5]@2 [a4,c#5,f#5]@2 [a4,c#5,f#5]@3 [b4,d5,g5]", // F#m G
  T: "[c#5,e5,a5]@3 [c#5,e5,a5] [e4,a4,d5]@2 [e4,a4,c#5]@3 [e4,a4,c#5] [d#4,g#4,c5] [d4,g4,b4]", // A Dsus2 A G# G
  U: "[f#4,a4,c#5]@3 [f#4,a4,c#5] [f#4,a4,c#5]@2", // F#m
  V: "[b4,g#5] [c#5,a5] [d5,b5] [e5,c6] [f5,d6] [g5,e6] [a5,f6] [b5,g6]!2 [b5,g6]@3", // E F#m G C Dm C Dm Em
  W: "~ [g#4,b4,e5]!6 ~@2 [a4,d5,f#5] a4 c5", X: "[a4,c#5,e5]@9 [a4,c#5,e5]@2 [d5,e5,a5]",
  Y: "[c#5,e5,a5]@9 [f#4,a4,c#5] [g#4,b4,d5] [a4,c#5,e5]", Z: "[a4,d5,f#5]@9 d5 [a4,d5,f#5] d5",
  AA: "[a4,d5,f#5]@9 [a4,d5,f#5] [a4,c#5,e5] [f#4,b4,d5]", // D A Bm
  AB: "[e4,a4,c#5]@2 [e4,a4,c#5] [e4,a4,c#5]@2 [b4,e5] [b4,e5,g#5]@2 [b4,e5,g#5]@4", // A E5 E
  AC: "[g4,b4,d5]@3 [b4,g5] [c5,a5] [d5,b5] [c5,a5] [g4,g5]!2 [b4,d5,g5]!3", // G Em F G F G
  AD: "[b4,d5,g5]@2 [c#5,e5,a5]!8 [c5,d#5,g5] [b4,d5,g5]", // G A Cm G
  AE: "[a4,c#5,f#5]@2 [a4,c#5,f#5]@4 [a4,c#5,f#5]@2 [a4,c#5,f#5]@2 [a4,c#5,f#5] [b4,d5,g5]", // F#m G
  AF: "[e5,a5,c#6]!10 [d#5,g#5,c6] [d5,g#5,b5]", // A G# G#dim
  AG: "[f#5,a5,c#6]@2 [f#5,a5,c#6]@2 [f#5,a5,c#6]@2 [f#5,a5,c#6]@2 [f#5,a5,c#6]@2 c#6 b5", // F#m
  AH: "[f#5,a5,c#6]@2 [f#5,a5,c#6]@2 [f#5,a5,c#6]@2 [f#5,a5,c#6]!4 [d#5,g#5,c6] [d5,g#5,b5]", // F#m G# G#dim
  AI: "[c#5,f#5,a5]!3 [d5,g5,b5]!3", AJ: "[e5,a5,c#6]@2 [e5,a5,c#6]!2 [e5,b5]!3 [e5,c#6]!2 [e5,b5] a5 [e5,b5]",
  AK: "[a4,c#5,f#5]@2 [a4,c#5,f#5]@2 [a4,c#5,f#5]@2 [b4,d5,g5] ~@5", // F#m G
  AL: "[a4,d5,f#5]@3 [a4,c#5,e5]@3 [a4,d5,f#5]@3 [a4,c#5,e5]@2 [a4,d5,f#5]", // D A D A D
  AM: "~@2 [a4,d5,f#5] [a4,c#5,e5]@3 [a4,c#5,e5]@3 [a4,c#5,e5]@3", // D A
  AN: "[a4,d5,f#5] [a4,c#5,e5] [a4,d5,f#5] [a4,c#5,e5]", AO: "[f#4,a4,c#5]@6 [g4,b4,d5]@3 c5 b4 g4",
  AP: "[c#5,f#5,a5]@2 [c#5,f#5,a5]!2 [c#5,f#5,a5]@2 [d5,g5,b5] f5 e5 d5 c5 b4", AQ: "[c#5,e5,a5]!12",
  AR: "~@5 [c#5,f#5,a5] [d5,g5,b5] [f5,a5] [e5,g5] [d5,f5] [c5,e5] [b4,d5]", // F#m G F Em Dm C Bm
  AS: "[f#5,a5,c#6]!2 [f#5,a5,c#6]@2 [f#5,a5,c#6]@2 [b5,g6] [a5,f6] [g5,e6] [f5,d6] [e5,c6] [d5,b5]", // F#m Em Dm C Dm C G
  AT: "[a4,d5,f#5]@3 [a4,c#5,e5] [a4,c#5,e5]@2 [a4,d5,f#5]@3 [a4,c#5,e5]@2 [a4,d5,f#5]", // D A D A D
  AU: "~@2 [a4,d5,f#5] [a4,c#5,e5]@3 [a4,d5,f#5]@3 [a4,c#5,e5]@3", // D A D A
  AV: "[c#5,f#5,a5]@2 [c#5,f#5,a5]!2 [c#5,f#5,a5]@2 [d5,g5,b5] [f5,a5] [e5,g5] [d5,f5] [c5,e5] [b4,d5]", // F#m G F Em Dm C Bm
})).s("gm_piano").gain(0.22)

// other · piano
const piano_2 = note(`<
  ~@4 A B C D E F G A@2 B H D I J K L M L M N O P A B H D Q J R L M L M S M T U@3 V U@3 V U@3 W U@3 S U@3 W U@3 X U@2
  ~@2
>`.pickRestart({
  A: "a3@2 a3 a3@2 a3 a3@2 a3 a3@2 a3", B: "a3@2 a3 a3@2 a3 a3@2 a3!2 b3 c#4", C: "d4@2 d4 d4@2 d4 d4@2 d4 d4@3",
  D: "d4@2 d4 d4@2 d4 d4@2 d4!2 c#4 b3", E: "a3@2 a3 f#3@2 f#3", F: "g3@3 g3@8 g3", G: "e3@2 f#3 f#3@9",
  H: "d4@2 d4 d4@2 d4 d4@2 d4 d4@2 d4", I: "a3@2 a3 e3@2 e3", J: "g3@2 g3 g3@2 g3 g3@2 g3 g3@2 g3",
  K: "g3@2 a3 a3@3 a3!4 g#3 g3", L: "f#3@2 f#3 f#3@2 f#3 f#3@2 f#3 f#3@2 g3", M: "a3@2 a3 a3@2 a3 a3@2 a3!2 g#3 g3",
  N: "f#3@2 f#3 f#3@2 f#3 f#3@2 f#3 f#3@2 f#3", O: "b3!10 a3!2", P: "~ e3!6 ~@2 d4 a3 c4",
  Q: "a3@2 a3 a3@3 e3@2 e3 e3@3", R: "g3@2 a3 a3@2 a3!5 g#3 g3", S: "f#3!3 g3!3", T: "f#3@2 f#3@2 f#3@2 g3 ~@5",
  U: "a3!12", V: "f#3 g3", W: "f#3!3 g#3@3", X: "f#3@2 f#3!2 f#3@2 g3!6",
})).s("gm_piano").gain(0.22)

// bass · electric bass finger
const bass = note(`<
  A B C A@2 D E F G H I A@2 D E F G H J K L M L N O P A D E F G H Q K L K R S L T A B L S B U L S V@2 L W X Y Z AA X AB
  Z AC Y AD Z AE X@2 ~@2
>`.pickRestart({
  A: "a1 ~ a1!2 ~ a1!2 ~ a1!2 ~ a1", B: "a1 ~ a1!2 ~ a1!2 ~ a1 d2 a1 c2", C: "a1 ~ a1!2 ~ a1!2 ~ a1!3 c2",
  D: "a1 ~ a1!2 ~ a1!2 ~ a1!2 b1 c#2", E: "d2 ~ d2!2 ~ d2!2 ~ d2 f#2 a2 b2", F: "d2 ~ d2!2 ~ d2!2 ~ d2 f#2 a2 f#2",
  G: "a1 ~ a1!2 ~ a1 e2 ~ e2!2 ~ e2", H: "g1 ~ g1!2 ~ g1!2 ~ g1!2 ~ g1", I: "g1@2 a1!2 ~ a1!2 ~ a1 d2 a1 c2",
  J: "g1@2 a1!2 ~ a1!2 ~ a1!2 g#1 g1", K: "f#1 ~ f#1!2 ~ f#1!2 ~ f#1!2 ~ g1", L: "a1 ~ a1!2 ~ a1!2 ~ a1!2 g#1 g1",
  M: "f#1 ~ f#1!2 ~ f#1!2 ~ f#1!2 g1 g#1", N: "f#1 ~ f#1!2 ~ f#1!2 ~ f#1!2 ~ f#1", O: "g1!10 f#1 f1",
  P: "e1!7 ~@2 d2 c2 a1", Q: "g1@2 a1!2 ~ a1!5 g#1 g1", R: "a1 ~ a1!2 ~ a1!2 ~ a1!2 ~ g1",
  S: "f#1 ~ f#1!2 ~ f#1 g1 ~ g1!2 ~ g1", T: "f#1@2 f#1 f#1@2 f#1 g1 ~@5", U: "a1 ~ a1!2 ~ a1 d2 a1 c2 a1 d2 c2",
  V: "a1 ~ a1!2 ~ a1!2 g2 f#2 e2 c2 c#2", W: "f#1!4 f#1@2 g1!4 g1@2", X: "a1@2 a1 a1@2 a1 a1@2 a1 a1@2 a1",
  Y: "a1@2 a1 a1@2 a1 a1@2 a1 d2 a1 c2", Z: "a1@2 a1 a1@2 a1 a1@2 a1!2 g#1 g1",
  AA: "f#1@2 f#1 f#1@2 f#1 g1@2 g1 g1@2 g1", AB: "a1@2 a1 a1@2 a1 a1@2 a1!2 c2 a1", AC: "f#1@2 f#1!2 f#1@2 g1@2 g1!4",
  AD: "a1@2 a1 a1@2 a1 d2 a1 c2 a1 d2 c2", AE: "f#1@2 f#1 f#1@2 f#1 g1!6",
})).s("gm_electric_bass_finger").gain(0.52)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@2 A@2 B@2 C D E F G H@2 I J K L F M N O N O P Q R S T J D U F V N O N O W O X Y@2 Z AA Y@2 Z AA Y@2 Z AB AC@2 AD AE
  AC@2 AD AB AC@2 AD AB AC@2 ~@2
>`.pickRestart({
  A: "[a2@3 [a2,g3,c4] ~@2 a2 ~ a2 a3@2 g3@7 d3@3 c3@3]/2", B: "[[a2,e3]@21 a2 b2 c#3]/2",
  C: "[d3,a3] ~ [d3,a3]!2 ~ [d3,a3]!2 ~ [d3,a3] f#3 [a3,d4] [b3,d4]", // D5 Bm
  D: "[d3,a3] ~ [d3,a3]!2 ~ [d3,a3]!2 ~ [d3,a3] f#3 [a3,d4] f#3", // D5
  E: "[a2,e3] ~ [a2,e3] [e3,a3,d4] [e3,a3,c#4] a2 [e3,b3] ~ e2 [e3,b3]@2 e2", // A5 Dsus2 A E5
  F: "[g2,d3] ~ [g2,d3]!2 ~ [g2,d3]!2 ~ [g2,d3]!2 ~ [g2,d3]", // G5
  G: "[g2,d3]@2 [a2,e3] [a2,e3]@3 g#3 [e4,a4] ~ [g4,c5] ~ [a2,e3]", H: "[[a2,e3]@21 [a2,e3,a3,c#4]!2 [a2,e3,a3,d4]]/2",
  I: "[a2,e3,a3,c#4]@3 a2 ~ a2!2 ~@5", J: "[d3,a3] ~ [d3,a3]!2 ~ [d3,a3]!2 ~ [d3,a3] f#3 [a3,d4,f#4] b3",
  K: "[d3,a3] ~ [d3,a3]!2 ~ [d3,a3] f#3 [a3,d4,f#4] f#3 [b3,d4,g#4] [a3,d4,f#4] f#3", // D5 D G#dim D
  L: "[a2,e3]@2 [a2,e3] [e3,a3,d4] [e3,a3,c#4] a2 [e3,b3] ~ e2 [e3,b3]@3", M: "[g2,d3]@2 [a2,e3]@7 [a2,e3] [a2,d#3]!2",
  N: "[f#2,c#3] ~ [f#2,c#3] [f#2,c#3]@2 [f#2,c#3]!2 ~ [f#2,c#3] [f#2,c#3]@2 [g2,d3]", // F#5 G5
  O: "[a2,e3] ~ [a2,e3]!2 ~ [a2,e3]!2 ~ [a2,e3]!2 [g#2,d#3] [g2,d3]", // A5 G#5 G5
  P: "[f#2,c#3] ~ [f#2,c#3] [f#2,c#3]@2 [f#2,c#3]!2 ~ [f#2,c#3] [f#2,c#3]@2 [f#2,c#3]", // F#5
  Q: "[g2,d3]!10 [f#2,c#3] [f2,c3]", R: "[e2,e3,b3]!7 ~ a2 [d3,a3] a2 [c3,g3]",
  S: "[a2,e3]@10 [a2,f#3,a3,d4] [a2,e3,a3,c#4]", T: "[a2,e3,a3,c#4]@3 a2 ~ a2!2 ~ a2!2 b2 c#3",
  U: "[a2,e3] ~ [a2,e3] [e3,a3,d4] [e3,a3,c#4] a2 [e3,b3] ~ [e3,b3] [e3,b3]@3", // A5 Dsus2 A E5
  V: "[g2,d3]@2 [a2,e3] [a2,e3]@6 [a2,e3] [g#2,d#3] [g2,d3]", // G5 A5 G#5 G5
  W: "[f#2,c#3] ~ [f#2,c#3]!2 ~ [f#2,c#3] [g2,d3] ~ [g2,d3] ~ [g2,d3]!2", // F#5 G5
  X: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3]!2 [g2,d3] ~@5", Y: "[a2,e3]@3 [a2,e3]@2 [a2,e3] [a2,e3]@3 [a2,e3]@2 [a2,e3]",
  Z: "[a2,e3]@3 [a2,e3]@2 [a2,e3] [a2,e3]@3 [a2,e3] [g#2,d#3] [g2,d3]", AA: "[f#2,c#3] [g2,d3]",
  AB: "[f#2,c#3] ~ [f#2,c#3] ~ [f#2,c#3]@2 [g2,d3] ~ [g2,d3] ~ [g2,d3]@2", // F#5 G5
  AC: "[a2,e3]@2 [a2,e3] [a2,e3]@2 [a2,e3] [a2,e3]@2 [a2,e3] [a2,e3]@2 [a2,e3]", // A5
  AD: "[a2,e3]@2 [a2,e3] [a2,e3]@2 [a2,e3] [a2,e3]@2 [a2,e3]!2 [g#2,d#3] [g2,d3]", // A5 G#5 G5
  AE: "~@4 [f#2,c#3]@2 [g2,d3] ~ [g2,d3] ~ [g2,d3]@2", // F#5 G5
})).s("gm_overdriven_guitar").gain(0.23).pan(0.8)

// other · distortion guitar
const distortion_guitar = note("<~@51 A B@2 C D E@2 F G H I J K L M ~@2>".pickRestart({
  A: "~@3 [e3,a3,c#4]", B: "[[e4,a4,c#5]@6 [e4,a4,c#5]@6 [e4,a4,c#5]@6 a4@2 g4@2 a4@8 a4@12 c#5 b4 c#5 b4 a4@2]/2",
  C: "a4@6 a4@6 a4@6 c#5 a4 c#5 a4 a4@2", D: "a4 a4@3 a4 g4@3 e4@4 d4@8 b3@4",
  E: "[[a2,e3,a3]@6 [a2,e3,a3]@6 c4@4 c4@2 b3@4 a3@14 c#4@4 c#4@2 c#4@2 b3 a3 f#3@2]/2", // A5
  F: "a3@6 f#4@6 c#4 c#4@3 b3@2 a3@6", G: "c#4 b3 a3 f#3 f3 e3 d3@6", H: "~@6 a4@2 a4 a4@3",
  I: "g4 e4 g4 e4 g4 e4 g4 e4 g4 e4 g4 e4", J: "g4@2 e4 g4@2 e4 g4@2 e4 g4 e4 g4 e4 g4 g4@2 g4@2 d4@2 c4@2 a3@2",
  K: "d4 c4 a3 g3 a3 d4 d4@3 g3@2 f#3", L: "a2@3 a2@2 a2 a2@3 a2@2 a2", M: "[e4,a4,c#5]!3 [e4,a4,c#5]@2 a2@3 ~ a2@2 a2",
})).s("gm_distortion_guitar").gain(0.47)

// other · guitar harmonics
const guitar_harmonics = note("<A@2 ~@66>".pickRestart({
  A: "[~@14 e3@2 a3@2 d4@2 g4@21 ~ d3@2 a2@2 a2@2]/2",
})).s("gm_guitar_harmonics").gain(0.52).pan(0.8)

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

// drums · snare
const snare = s("sd").struct("<A@17 B C ~ D E A D A F A@4 G A C A@6 C A@9 C ~ A@15 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x ~ x", C: "~ x ~@2", D: "~ x!2 ~@3 x ~", E: "~@2 x ~@2 x!2 ~", F: "~ x!2 ~",
  G: "~ x ~@3 x ~@2",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<A@9 B C A@5 D@2 E ~@7 F A@3 G F H ~@35>".pickRestart({
  A: "x!12", B: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", C: "~ x!11",
  D: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~", E: "~ x!3 ~@8", F: "~@2 x!10", G: "x!4 ~@2 x!4 ~@2",
  H: "~@2 x!2 ~@8",
})).gain(0.36)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@18 [~@5 x] ~@13 [~@5 x] ~@35>").gain(0.36)

// drums · high tom
const high_tom = s("ht").struct("<~@18 [~@3 x!2 ~] ~@13 [~@3 x!2 ~] ~@35>").gain(0.36)

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

// drums · ride
const ride = s("rd").struct("<~@19 A B@4 C D ~@7 A@2 E A E A F A B A@5 E G H I J@15 ~@2>".pickRestart({
  A: "~@2 x!10", B: "x!12", C: "~ x!5 ~ x!5", D: "~ x!5 ~@6", E: "~@2 x!4 ~@2 x!4", F: "~@2 x!2 ~@8",
  G: "~@2 x ~ x!5 ~ x!2", H: "x!3 ~ x!5 ~ x!2", I: "x ~ x ~ x!5 ~ x!2", J: "~ x!2 ~ x!2 ~ x!2 ~ x!2",
})).gain(0.36)

stack(
  shakuhachi, shakuhachi_2, piano, piano_2, bass, overdriven_guitar, distortion_guitar, guitar_harmonics, kick, snare,
  hihat, low_tom, mid_tom, high_tom, crash, ride
)

More by Journey