Strudelify

When You Love a Woman

Journey

KeyD♭ majorTempo67 bpm
0:00/0:00
// When You Love a Woman — Journey
// 67 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: Full arrangement: all 65 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(67/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 · electric guitar clean · Db Eb Db
const electric_guitar_clean = note(`<
  ~@11
  [~@8 ab3@2 [f3,ab3,db4]!2 ab3@2 [f3,ab3,db4]!2]
  ~@9
  [~ [db4,db5] [eb4,eb5] [db4,db5]]
  [~@7 ab3 [db4,db5]@8, ~@7 ab4@9]
  ~@4
  [~@5 ab4 f4 eb4]
  ~@37
>`).s("gm_electric_guitar_clean").gain(0.2)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@12 A@2 B@5 ~@9 C@2 B@5 ~@4 D ~@3 E F G H I J@7 K@4 ~@6>".pickRestart({
  A: "[db4@27 ~ c4@4]/2", B: "[~@16 gb4@15 ~@9, db4@39 ~, bb3@31 ~@9]/5",
  C: "[db4@12 db3@2 [bb2,bb3] ab2 ~@12 c4@4, ~@12 db4@15 ~@5, ~@15 ab3@16 ~]/2", D: "ab3", E: "~@3 ab2, ab3",
  F: "db4@7 [db5,db6] [ab4,ab5,ab6] [gb4,gb5,gb6,ab6] [gb4,gb5,gb6] [f4,f5,f6] [f4,f5,f6]@2 [eb4,eb5,eb6] [db4,db5,db6], ab3, f4@11 ~@5, ~@7 db4@7 ~@2", // Db Ab Gbsus2 Gb F Eb Db
  G: "[eb4,eb5,eb6]@12 [db4,db5,db6] [eb4,eb5,eb6] [f5,f6] ~, [ab3,c4,f4]@7 f4", // Eb Db Eb F Fm
  H: "f5@2 [eb4,eb5,eb6] [db5,db6] f6@2 [eb4,eb5,eb6] [db4,db5,db6], bb3@15 ~, f4!2, [db4,f6]@3 db4@4 ~, ~@4 f5@3 ~", // Eb Db Eb Db
  I: "[ab3,c4,eb4,ab4,ab5,ab6]", // Ab
  J: "[db4@12 db3@2 [bb2,bb3] ab2 db5@11 ~ [c4,c5]@4 ~@6 f5 ~ f5@6 f5 ~ f5@8 f5@4 eb5@3 ~ bb4@13 ~ bb4 ~@9 db5@7 ~ c5@4 db5@4 c5@4 db5@3 ~, [ab4,db5,f5]@15 ab3@16 ~ bb3@62 ~@18, ~@12 db4@15 ~@5 db4@78 ~@2, ~@16 f5@22 ~@26 gb4@16 bb4@15 ~ [ab4,eb5]@16, ~@32 [bb4,db5]@24 [bb4,db5]@7 ~ db5@18 gb4@13 ~@17]/7", // Bb C Db Ab5 Bbm
  K: "[[c5,eb5]@8 ~@4 db3@2 [bb2,bb3] ab2 db5@11 ~ [c4,c5]@4 ~@6 f5 ~ f5@6 ~ f5@2 c5@14 ~, [ab4,db5,f5]@15 ab3@16 ~ [bb3,db4,bb4,db5]@18 ~@14, db4@12 db4@15 ~@37, ~@8 f5@11 ~@13]/4", // Cm Bb C Db Bbm
})).s("gm_string_ensemble_1").gain(0.19)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note(`<
  ~@12 A@4 ~ B C ~@9 D@4 ~ B C ~ E F G H I J G H ~@4 K@4 ~ B C L@4 ~@6
>`.pickRestart({
  A: "[f4@15 eb4, ab3@31 ~@33]/4", B: "gb3@7 ~", C: "[ab3,eb4]", D: "[f4@15 eb4, ab3@15 ~@49]/4",
  E: "[bb3,db4,f4]@15 ~", F: "[ab3,c4,eb4]@15 ~", G: "[bb3,db4,f4]", H: "[c4,eb4]", I: "[bb3,db4], f4@13 ~@3",
  J: "[ab3,c4,eb4]", K: "[ab3@15 ~ ab4@15 ~@29 eb4@4, f4@15 ~]/4",
  L: "[ab3@15 ~ ab4@15 ~@18 [ab4,eb5]@14 ~, f4@49 ~@15]/4", // Ab5
})).s("gm_string_ensemble_1").gain(0.1)

// bass · fretless bass
const bass = note(`<
  ~@10 A B C D E F G H I J K L M N O P Q B C D E F G H I J R S T U V J W X Y Z AA AB C D E F G H I C D AC ~@7
>`.pickRestart({
  A: "~@14 ab1 ~", B: "ab1@11 ~ ab1 gb1 f1@2", C: "db2@7 db2 db2@7 ~", D: "db2@7 ~ db2@4 c2@4", E: "bb1@7 bb1 bb1@7 ~",
  F: "bb1@7 ~ bb1@4 ab1@4", G: "gb1@6 ~ gb1 gb1@5 gb2 gb1 ~", H: "gb1@6 ~ gb1 gb1@5 ~ gb1@2", I: "ab1@6 ab1 ~ ab1@7 ~",
  J: "ab1", K: "db2@10 ~ f2 ~ ab2 f2 db2, ~@5 db2 db3 ~", L: "f2@3 ~", M: "bb1", N: "ab1@13 ~@3",
  O: "db2@9 ~ db2 db3@2 ab2 f2 db2", P: "f2@11 ~ f2@3 ~", Q: "gb1@6 gb2@4 gb1@3 ~ ab1 ~", R: "gb1@13 ~ gb1@2",
  S: "ab1@7 ab1", T: "gb1@5 ~ gb1 ~ gb1@8", U: "~@3 ab2@2 ab1@3, ab1@9 ~@7", V: "~@3 gb2@2 gb1@3, gb1@9 ~@7", W: "gb1",
  X: "ab1@6 ab1 ~ ab1@8", Y: "db2@15 ~", Z: "c2@7 ~", AA: "bb1@6 bb2@2 bb1@7 ~", AB: "ab1@9 ~ ab1@3 ~ ab1@2",
  AC: "bb1@7 bb1 bb1@8",
})).s("gm_fretless_bass").gain(0.35)

// chords · string ensemble 1
const string_ensemble_1_2 = note(`<
  A@4 ~@6 B@2 ~@6 C ~@7 B@2 ~ D@2 ~ E F@2 G@5 H@4 ~@5 D@2 ~ E F@2 ~ D@2 ~@2 I J K ~@2
>`.pickRestart({
  A: "[~@15 [f2,f3]@14 ~@3 db4@16 ~@16, db2@17 ~@14 [bb1,bb2]@15 ~@18, ~@11 eb4@49 ~@4, ~@11 ab3@34 ~@19, ~@11 c4@17 ~@36]/4", // F Bb
  B: "[~@13 [gb3,db4,gb4,db5]@9 ~ [eb3,c4]@9, ~@13 [ab3,ab4]@18 ~, ~@22 [eb4,c5]@9 ~]/2", C: "~@3 [ab3,c4,eb4]",
  D: "[~@7 db5@4 c5@3 ~ [f4,bb4,db5]@7 ~@10, ~@7 [ab4,f5]@8 ~@17]/2", E: "[bb4,db5] ~@15",
  F: "[~@2 db5@5 gb5@4 f5@3 eb5@11 ~@3 [ab3,c4,eb4]@4]/2", // Ab
  G: "[~@15 [db5,f5]@13 ~@3 c5@12 ~@4 [db5,f5]@11 ~@5 [ab4,c5,eb5]@11 ~@6]/5", // Db Ab
  H: "[[bb4,db5,f5]@11 ~@4 c5@11 ~@4 [db5,f5]@12 ~@4 c5@10 ~@8]/4", I: "~@10 [f3,ab3,db4]@5 ~",
  J: "~@4 [ab3,db4,f4]@3 ~@3 [ab3,db4,gb4]@4 ~@2", K: "[ab3,db4,f4] ~",
})).s("gm_string_ensemble_1").gain(0.15)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft_2 = note("<~@3 A ~@31 B@4 ~ C@4 ~@21>".pickRestart({
  A: "[ab2,ab3]@7 ~", B: "[~@15 bb4@13 ~@3 [ab4,eb5]@12 ~@4 bb4@11 ~@6]/4",
  C: "[~@15 [ab4,eb5]@11 ~@4 bb4@12 ~@4 [ab4,eb5]@10 ~@8]/4", // Ab5
})).s("gm_string_ensemble_1").gain(0.07)

// chords · piano
const piano = note("<A@5 B C D E B F@2 ~@8 E B C D E B F@2 ~@8 G@2 H@6 I J K L ~@17>".pickRestart({
  A: "[~@7 [ab4,db5,ab5]!2 [ab4,db5,gb5]!2 [ab4,db5,f5] [db5,f5]@2 [ab4,eb5] ab4 f2@10 f2@3 ~@10 [ab4,db5,ab5] [ab4,ab5] [ab4,gb5]!2 [ab4,db5,f5] [db5,f5]@2 ab4!2 gb2@6 gb2@4 gb2@3 gb2@3 db2@16, ~@12 ab4 ~@2 db5@23 ~@2 db5@3 ~@3 eb5@2 eb5@17 ~@15, ~@16 ab4@22 ~@6 ab4 ~@2 db5@18 ~@15, ~ eb5 bb1 ~@2, ~@29 f2@7 ~@12 ab4@15 ~@17]/5", // Db5 Dbsus4 Db Ab5 Db5 Ab Ab7 Db
  B: "f2", C: "bb1", D: "ab2", E: "db2", F: "gb1/2", G: "[~ ab1, gb2]/2",
  H: "[~@5 ab1, gb2 gb2 gb2, ~ ab1@4 ~, ~ ab2]/6", I: "db2@3 ~", J: "c2@13 ~@3", K: "bb1@15 ~", L: "ab1@3 ~",
})).s("gm_piano").gain(0.35)

// chords · piano
const piano_2 = note("<A@4 B@2 C@6 D E@7 B@2 F@6 D G@8 H I J K L M N@5 D O@6 D P@4 Q@5>".pickRestart({
  A: "[~@4 db4@3 [db4,f4] [ab3,db4,f4]@2 [ab3,db4,f4]@2 [ab3,db4,f4]@2 ~ ab3 [db4,eb4]@4 [db4,eb4]@4 [ab3,eb4]@2 ab3 ~@3 db4@2 ~@4 ab3@4 ab3@3 [ab3,db4,f4]@3 ~ ab3 [ab3,db4,eb4]@4 ~@2 ab3@2 [ab3,db4,eb4]@3 ~@3 c4@2, db2@27 ab3@5 [f3,bb3]@32, ~@3 ab3@5 ~@6 f4@18 db4@9 ~@5 f4@18, ~@14 db4@2 ab3@6 ~@2 db4@3 eb4@19 db4@2 ~@4 [db4,eb4]@4 ~@8, ~@27 c4@32 [ab3,db4,eb4]@5]/4", // Db Dbsus2 Ab5 Db Absus4 Bb5 Dbsus2 Absus4
  B: "[[db4,f4]@2 [db4,f4]@2 [db4,f4]@2 ~ ab3 [ab3,db4,eb4]@2 [db4,eb4]@2 [db4,eb4]@2 ~ c4, ab3@7 ~@5 f4@20, ~@3 db4 ~@3 [ab3,db4,eb4]]/2", // Db Absus4 Dbsus2 Absus4
  C: "[[ab3,db4,f4]@4 ~@4 [db4,f4]@4 ~@2 ab3@2 [ab3,db4,eb4]@4 ab3@2 ab3@2 [ab3,c4,eb4]@3 ab3 ~@4 [ab3,db4]@4 ~@2 ab3@2 [db4,f4]@4 ~@2 ab3@2 [ab3,db4,eb4]@4 [db4,eb4]@3 ~ [db4,eb4]@4 ~@4 [gb3,bb3,db4]@4 gb3@2 ~@2 [bb3,db4]@4 ~@2 gb3@2 [ab3,db4]@4 ~@4 [ab3,c4]@4 ~@2 eb3@2, ~@2 [db4,f4]@2 ~@2 f4@6 ~@2 eb4 eb4@9 ~@6 [db4,eb4]@2 ~@2 [bb3,db4]@2 ~@2 bb3@10, ~@6 ab3@6 db4@4 ~@4 [db4,eb4]@4 ~@4 [ab3,c4]@4 ~@12 db4@4 ~@7 ab3@5 ~@2 ab3@18 ~@4 ab3@4 eb3@4 [ab3,c4]@4, ~@29 db4@3 ~@4 [db4,f4]@4 ~@4 f4@32 db4@4 ~@4 db4@12, ~@35 gb3@4 ~ gb3 ~@2 gb3@5]/6", // Db Absus4 Ab Db5 Db Absus4 Dbsus2 Gb …
  D: "[db4,f4]@4 ~@6 ab3@2 [ab3,db4,f4]@2 ~ [db4,f4,ab4], ab3@3 ab3@2 ~@2 ab3, ~ [db4,f4]!2 ~", // Db
  E: "[ab3@2 ~@4 ab3@2 ab3@2 ~@4 bb3@2 bb3@2 ~@10 [db4,f4]@2 bb3 [db4,f4] ~@6 bb3@2 bb3@2 ~@4 bb3@2 ~@12 [bb3,db4]@2 gb3 [bb3,db4] ~@30 ab3@2 [ab3,c4,eb4]@16, [ab4,db5]@8 bb4@8 gb4@7 eb4 ~@4, [db4,f4]@4 [db4,f4]@4 db4@4 f4@4 [db4,f4]@2 bb3@2 [db4,f4]@2 bb3@2 [db4,f4]@2 bb3@4 ~ bb3 [db4,f4]@2 bb3@2 [db4,f4]@4 f4@30 gb3@4 gb3@4 gb3@32 ~@2, ~@2 ab3@4 ~@2 f4@4 c4@30 bb3@2 db4@4 [bb3,db4]@2 gb3@2 [bb3,db4]@2 gb3@2 [bb3,db4]@2 gb3@4 ~ gb3 [bb3,db4]@2 gb3@2 [bb3,db4]@4 [bb3,db4]@4 bb3@32 ~@4, ~@5 ab3@15 db4@2 eb4@16 db4@2 [db4,eb4] ab3 [db4,eb4] ab3 [db4,eb4] ab3 db4@10]/7", // Db Bbm Ab Db5 Db Bbm Dbsus2
  F: "[[ab3,db4,f4]@4 ~@4 [db4,f4]@4 ~@2 ab3@2 [ab3,db4,eb4]@4 ab3@2 ab3@2 [ab3,c4,eb4]@3 ab3 ~@4 [ab3,db4]@4 ~@2 ab3@2 [db4,f4]@4 ~@2 ab3@2 [ab3,db4,eb4]@4 [db4,eb4]@3 ~ [db4,eb4]@4 ~@4 [gb3,bb3,db4]@4 gb3@2 ~@2 [bb3,db4]@4 ~@2 gb3@2 [ab3,db4]@4 ~@4 [ab3,c4]@4 [eb4,ab4] ab4 [eb3,ab4,c5,eb5]@2, ~@4 [db4,f4]@4 ~@4 f4@12 ~@4 eb4@2 eb4@18 ~@12 [db4,eb4]@4 ~@4 [bb3,db4]@4 ~@4 bb3@16 c5 [eb4,db5]@3, ~@6 ab3@6 db4@4 ~@4 [db4,eb4]@4 ~@4 [ab3,c4]@4 ~@12 db4@4 ~@7 ab3@5 ~@2 ab3@18 ~@4 ab3@4 eb3@4 [ab3,c4]@4, ~@29 db4@3 ~@4 [db4,f4]@4 ~@4 f4@32 db4@4 ~@4 db4@12, ~@35 gb3@4 ~ gb3 ~@2 gb3@5]/6", // Db Absus4 Ab Db5 Db Absus4 Dbsus2 Gb …
  G: "[ab3@2 ~@4 ab3@2 ab3@2 ~@4 bb3@2 bb3@2 ~@10 [db4,f4]@2 bb3 [db4,f4] ~@6 bb3@2 bb3@2 ~@4 bb3@2 ~@12 [bb3,db4]@2 gb3 [bb3,db4] ~@30 ab3@2 ~@16 bb3@6 bb3@2 [bb3,db4,f4]@4 ~@2 bb3@2, [ab4,db5]@8 bb4@8 gb4@7 eb4 [ab3,c4,eb4]@8, [db4,f4]@4 [db4,f4]@4 db4@4 f4@4 [db4,f4]@2 bb3@2 [db4,f4]@2 bb3@2 [db4,f4]@2 bb3@4 ~ bb3 [db4,f4]@2 bb3@2 [db4,f4]@4 f4@30 gb3@4 gb3@4 gb3@32 ~@18, ~@2 ab3@4 ~@2 f4@4 c4@30 bb3@2 db4@4 [bb3,db4]@2 gb3@2 [bb3,db4]@2 gb3@2 [bb3,db4]@2 gb3@4 ~ gb3 [bb3,db4]@2 gb3@2 [bb3,db4]@4 [bb3,db4]@4 bb3@32 ~@20, ~@5 ab3@15 db4@2 eb4@16 db4@2 [db4,eb4] ab3 [db4,eb4] ab3 [db4,eb4] ab3 db4@10 [db4,f4]@4 ~@2 [db4,f4]@2]/8", // Db Bbm Db5 Ab Db Bbm Dbsus2 Db
  H: "[ab3,c4,eb4]@8 [c4,eb4]@3 c4@2 ~ c4@2, ~@11 eb4@5, ~@13 ab3@3", // Ab Cm
  I: "[db4,f4]@8 [bb3,db4,f4]@3 [db4,f4]@2 ~ [db4,f4]@2, bb3@6 ~@7 bb3@3", J: "[ab3,c4,eb4]@2 ~ ab3, ~ [c4,eb4]",
  K: "~@6 bb3@2 f4@3 ~@3 bb3@2, [db4,f4]@8 db4@5 db4@3, ~@11 f4@5", L: "eb4@11 ~@3 ab3@2, [ab3,c4]@13 c4@3, ~@11 eb4@5",
  M: "bb3@9 ~@5 bb3@2, db4@13 db4@3, f4@4 ~@5 bb3@5 ~@2, ~@11 f4@5",
  N: "[ab3@3 ~@5 [db4,f4]@2 ~ ab3 [ab3,db4,f4]@2 ~ ab3 [c4,f4]@2 ~ ab3 [ab3,c4,f4]@2 ab3 ~ [bb3,db4,f4]@2 ~ bb3 [bb3,db4,f4]@2 ~@2 [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 [c4,eb4]@2 [c4,eb4]@2, [c4,eb4]@4 eb4@16 ~@2 f4@2 ~@7 bb3@9, ~@3 ab3@5 ab3@3 ~@3 f4@2 ~@2 [c4,f4]@2 ~@2 c4@10 ~@8, ~@4 c4@12 ab3@3 ~@4 ab3@9 ~@8, ~@5 [db4,f4] ~ db4@5 ~ [db4,f4] ~ [db4,f4]@5]/5", // Db F5 Fm Bbm Ab Cm F5 Db
  O: "[ab3@2 ~@4 ab3@2 ab3@2 ~@4 bb3@2 bb3@2 ~@10 [db4,f4]@2 bb3 [db4,f4] ~@6 bb3@2 bb3@2 ~@4 bb3@2 ~@12 [bb3,db4]@2 gb3 [bb3,db4] ~@30 ab3@2, [ab4,db5] bb4 gb4, [db4,f4]@4 [db4,f4]@4 db4@4 f4@4 [db4,f4]@2 bb3@2 [db4,f4]@2 bb3@2 [db4,f4]@2 bb3@4 ~ bb3 [db4,f4]@2 bb3@2 [db4,f4]@4 f4@30 gb3@4 gb3@4 gb3@18, ~@2 ab3@4 ~@2 f4@4 c4@30 bb3@2 db4@4 [bb3,db4]@2 gb3@2 [bb3,db4]@2 gb3@2 [bb3,db4]@2 gb3@4 ~ gb3 [bb3,db4]@2 gb3@2 [bb3,db4]@4 [bb3,db4]@4 bb3@20, ~@5 ab3@15 db4@2 eb4@16 db4@2 [db4,eb4] ab3 [db4,eb4] ab3 [db4,eb4] ab3 [db4,eb4]@2]/6", // Db Bbm Db5 Db Bbm Dbsus2
  P: "[ab3@2 ~@4 ab3@2 ab3@2 ~@4 bb3@2 bb3@2 ~@15 [ab1,ab3,c4,eb4]@31, [ab4,db5]@7 [db4,f4]@8 ~, [db4,f4]@2 [db4,f4]@2 db4@2 f4@2 [db4,f4] bb3 [db4,f4] bb3 [db4,f4] bb3@16 ~@3, ~@2 ab3@4 ~@2 f4@4 c4@21 ~@31, ~@10 ab3@23 ~@31]/4", // Ab Db5 Db
  Q: "[~@10 ab4 [f4,ab4,db5,f5,ab5,db6] ~@7 ab4@2 ~ [db1,db2,db4]@6 ~@12 f4@32 ~@8, ~@4 [db1,db2]@8 ab4@4 c5@21 f5@32 ~@11, ~@8 db4@13 db5 f5@6 gb4@10 [db1,db2,ab3]@32 ~@10, ~@9 f4@2 ~ [ab5,db6]@24 [ab4,db5]@32 ~@12, ~@12 [f4,db5,f5]@10 f4@6 [db1,db2,ab3,db4,ab4,db5] gb5@10 db4@32 ~@9]/5", // Db Db5 Db Db5
})).s("gm_piano").gain(0.22)

// chords · piano · soft notes
const piano_soft = note("<A B C D E F G ~ H I@3 ~@8 E F G ~ H J@3 ~@8 K L M N O ~ P ~ Q ~ R S ~@13 T ~@3>".pickRestart({
  A: "~@14 ab3 ~", B: "~@3 ab3 ~@4", C: "~@9 db4@2 ~@3 ab3 ~", D: "~@2 ab3 ~@5", E: "~@7 ab3@5 ab3@2 ~@2",
  F: "~ ab3!2 ~", G: "~@2 ab3 ~@3 ab3 ~", H: "f4@4 ab3@2 ~ db4 ab3@4 ab3@2 ~@2",
  I: "[~@4 ab3@3 ~@5 ab3@2 ~@20 gb3@4 ~@10, ~@15 eb4@32 ~]/3",
  J: "[~@4 ab3@3 ~@5 ab3@2 ~@20 gb3@4 ~@10, ~@15 eb4@29 ~@4]/3", K: "~@6 bb3 ~", L: "~@7 ab3@6 ~@3",
  M: "~@6 bb3@2 ~@3 bb3@2 ~@3", N: "~@2 ab3 ~", O: "bb3@3 ~ bb3@3 ~", P: "~@4 f4@7 ~@5", Q: "~@6 ab3 ~",
  R: "~@2 bb3 ~@3 bb3 ~", S: "~@2 ab3!2", T: "~@3 ab3@3 ~@2, ~@5 ab4@6 ~@5",
})).s("gm_piano").gain(0.13)

// drums · kick
const kick = s("bd").struct(`<
  ~@12 A B A B A B A C B C B C B C B ~ A B A B A B A C B@8 A@2 B C A B A B A B A@2 B@2 ~@7
>`.pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x!2", C: "x",
})).gain(0.45)

// drums · rim
const rim = s("rim").struct("<~@20 A ~ A ~ A ~ A ~@9 B@8 ~@21>".pickRestart({
  A: "~@3 x", B: "~ x ~ x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@12 A@7 ~@2 B ~ B ~ B ~@2 A@7 ~@9 A@3 C A@9 D ~@7>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~ x!2 ~@5", D: "~@2 x ~@2 x ~@2",
})).gain(0.45)

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

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@18 A ~@15 A ~@19 A ~@2 B ~@7>".pickRestart({
  A: "~@13 x ~@2", B: "~@15 x",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@12 A B A B A@2 B ~@9 A B A B A@2 B ~ A@8 C@3 ~ A B A B A@2 B A B D ~@7>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "x!8", D: "~ x ~ x ~@4",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@11 A ~@3 B ~@2 C ~@8 D ~@3 B ~@2 C ~@12 E ~@3 B ~@2 C ~@2 F ~@7>".pickRestart({
  A: "~@2 x!2", B: "~@7 x", C: "~@3 x", D: "~@4 x!2 ~@3 x!2 ~ x ~@3", E: "~@7 x ~ x!2 ~@5", F: "~@12 x!3 ~",
})).gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~@13 A ~ A ~@2 A ~@10 A ~ A ~@2 A ~@14 A ~ A ~@2 A ~ A ~@8>".pickRestart({
  A: "~@7 x",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@27 [~@2 x ~@4 x ~@8] ~@37>").gain(0.5)

// drums · china
const china = s("cr").struct("<~@12 A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@9 A@2 ~ A@2 ~ A ~ A ~ A@2 ~ A ~@7>".pickRestart({
  A: "x",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~@20 [~ x ~@2]!7 ~@38>").gain(0.45)

stack(
  electric_guitar_clean, string_ensemble_1, string_ensemble_1_soft, bass, string_ensemble_1_2, string_ensemble_1_soft_2,
  piano, piano_2, piano_soft, kick, rim, snare, low_tom, low_tom_soft, hihat, mid_tom, open_hat, high_tom, china,
  tambourine
)

More by Journey