Strudelify

Love Is Everywhere

Caught in the Act

KeyA♭ majorTempo134 bpm
0:00/0:00
// Love Is Everywhere — Caught in the Act
// 134 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(134/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
const bass = note(`<
  ~@16 A@8 B@2 C@2 A@4 B@2 C@2 D E F G A H F E H I C J K H F E H I C@2 I C A L I C A L A@6 B@2 C@2 A@4 B@2 C@2 D E F G A
  H F E H I C J K H F E H I C@2 I C A L I C A M
>`.pickRestart({
  A: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~", B: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~",
  C: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~", D: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~",
  E: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", F: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~",
  G: "c3@2 ~@2 c3@3 ~@9", H: "db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~",
  I: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", J: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ e3 ~ e3 ~ e3 ~ e3 ~",
  K: "f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~", L: "db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~",
  M: "db2 ~ db2 ~ db2 ~ db2 ~@9",
})).s("gm_electric_bass_finger").gain(0.39)

// chords · piano
const piano = note(`<
  ~@16 A B C D E@2 F@2 G@2 H I E@2 F@2 G@2 H I J K L M N O P Q O R S T N O P Q O R S U V P W O V P W O C X Y@2 Z@2 G@2 H
  I Y@2 Z@2 G@2 H I J K L M N O P Q O R S T N O P Q O R S U V P W O V P W AA
>`.pickRestart({
  A: "[f4,c5]@2 c4@2 [f4,bb4]@2 c4 ~ [f4,ab4]@4 c4@2 [f4,bb4]@2", B: "~@2 [f4,c5]@3 ~ bb4 ~ ab4@5 ~ f4@2, ~@6 f4@7 ~@3",
  C: "[f4,c5] c4 [f4,bb4] c4 [f4,ab4]@2 c4 [f4,bb4]", D: "~@2 c5@3 ~ bb4@2 ab4@6 [c4,bb4]@2, ~@3 f4@4 ~",
  E: "[[c4,eb4,f4,ab4]@15 ~]/2", F: "[[bb3,c4,eb4,g4]@31 ~]/2", G: "[[f3,bb3,d4]@29 ~@3]/2", H: "[ab3,db4,f4]@15 ~",
  I: "[bb3,eb4,g4]", J: "[f3,bb3]@3 ~ [f3,bb3,f4] ~ [f3,bb3,ab4]@3 ~ f4@2 [f3,bb3]@2 ~@2, ~@10 bb3 ~@5",
  K: "[g3,c4]@3 ~ [c4,eb4] ~ [g3,c4,ab4]@4 eb4 ~ c4@2 ~@2, ~@12 g3 ~@3", // C5 Cm Abmaj7
  L: "[bb3,eb4]@3 ~ [bb3,eb4] ~ [eb4,ab4]@4 eb4 ~ [bb3,eb4] ~ eb4 ~, ~@3 bb3 ~@4", M: "[c4,f4] ~ [c4,e4]@2 ~@4",
  N: "~@2 [c4,f4,ab4] ~@2 [c4,f4,ab4] ~@2 [c4,f4,ab4] ~ [f4,g4] [c4,f4,ab4] ~ [f4,g4] [c4,f4,ab4] ~", // Fm Fsus2 Fm Fsus2 Fm
  O: "~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~ [f4,g4] [db4,f4,ab4] ~@2 [db4,f4,ab4] ~", // Db Fsus2 Db
  P: "~@2 [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~ [eb4,f4] [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~", // Eb Ebsus2 Eb
  Q: "~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] ~ [eb4,f4] [c4,eb4,g4] ~@2 [c4,eb4,g4] ~", // Cm Ebsus2 Cm
  R: "~@2 [c4,eb4,ab4] ~@2 [c4,eb4,ab4] ~@2 [c4,eb4,ab4] ~ [eb4,g4] [c4,eb4,ab4] ~@2 [c4,eb4,ab4] ~", // Ab Eb Ab
  S: "~@2 [bb3,eb4,ab4] ~@2 [bb3,eb4,ab4] ~@2 [bb3,eb4,ab4] ~ [eb4,g4] [bb3,eb4,ab4] ~@2 [bb3,eb4,ab4] ~", // Ebsus4 Eb Ebsus4
  T: "~@2 [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~@2 [c4,e4,g4] ~ [e4,f4] [c4,e4,g4] ~@2 [c4,e4,g4] ~", // Eb C Fmaj7 C
  U: "~@2 [bb3,eb4,ab4] ~@2 [bb3,eb4,ab4] ~@2 [bb3,eb4,g4] ~ [eb4,f4] [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~", // Ebsus4 Eb Ebsus2 Eb
  V: "~@2 [c4,eb4,ab4] ~@2 [c4,eb4,ab4] ~@2 [c4,eb4,ab4] ~ [eb4,g4] [c4,eb4,ab4] ~ [eb4,g4] [c4,eb4,ab4] ~", // Ab Eb Ab Eb Ab
  W: "~@2 [c4,f4,ab4] ~@2 [c4,f4,ab4] ~@2 [c4,f4,ab4] ~ [f4,g4] [c4,f4,ab4] ~@2 [c4,f4,ab4] ~", // Fm Fsus2 Fm
  X: "~@2 c5@3 ~ bb4@2 ab4@6 [c4,bb4]@2, ~ c4@2 ~@2 c4@2 ~@9, ~@3 f4@4 ~", Y: "[[c4,eb4,f4,ab4]@13 ~@3]/2",
  Z: "[[bb3,c4,eb4,g4]@7 ~]/2", AA: "~@2 [db4,f4,ab4] ~@2 [db4,f4,ab4] ~@10",
})).s("gm_piano").gain(0.35)

// chords · piano · soft notes
const piano_soft = note(`<
  ~@17 A ~ B ~@16 C D E ~@2 F G@2 F H@2 I ~ F G@2 F H@2 G ~ G F@2 ~ G F@2 ~ J ~@16 C D E ~@2 F G@2 F H@2 I ~ F G@2 F H@2
  G ~ G F@2 ~ G F ~
>`.pickRestart({
  A: "~ c4@2 ~@2 c4@2 ~@7 c4@2", B: "~@2 f4@3 c4@2 ~@9, ~ c4@2 ~@13", C: "~@10 f3 ~@3 [f3,bb3] ~",
  D: "~@4 g3 ~@5 [g3,c4] ~@5", E: "~@10 bb3@2 ~@2 bb3 ~", F: "~@13 [f4,g4] ~@2", G: "~@13 [eb4,f4] ~@2",
  H: "~@13 [eb4,g4] ~@2", I: "~@13 [e4,f4] ~@2", J: "~@2 f4@3 ~@11",
})).s("gm_piano").gain(0.2)

// chords · pad warm
const pad_warm = note(`<
  A@4 B@4 A@4 B@4 C@8 D@3 E F@7 E G@8 H@8 I@6 J K@8 ~ L@8 ~ M@4 E N@8 O@3 P@5 O@3 Q R@2 S@3 T U@2
>`.pickRestart({
  A: "[c5@16 db5@15 ~@16 c5@16 ~, [f4,ab4]@31 g4@32 ~, ~@31 bb4@16 ~@17, ~ eb4]/4", // Fm
  B: "[[db4,f4] c4 c5 [g4,bb4], ab4@3 ~, ~ eb4@3]/4", C: "[f4@96 eb4@31 bb3, c4]/8", D: "[d4@2 [db4,ab4], f4]/3",
  E: "[eb4,g4,bb4]", F: "[f4@2 ~@2 d4@2 [db4,ab4], c4@63 bb3@32 ~@17, ~@2 eb4@5, ~@4 f4@3]/7",
  G: "[[bb3,db4,f4]@15 [c4,ab4]@16 [bb3,g4]@16 ~@17 c5@16 db5@15 ~@16 c5@16 ~, ~@15 eb4@80 g4@32 ~, ~@64 [f4,ab4]@31 bb4@16 ~@17, ~@3 eb4]/8", // Bbm Fm Eb Fm
  H: "[[db4,f4]@16 c4@16 c5@16 bb4@8 e4@8 ~@16 db5@15 ~@16 c5@16 ~, ab4@48 g4@16 [f4,ab4]@31 bb4@16 ~@17, ~ eb4@5 eb4@2, ~@56 c5@24 ~@15 g4@32 ~]/8", // Db Fm
  I: "[[db4,f4] c4 c5 [g4,bb4] [ab4,c5] [g4,bb4,eb5], ab4 ~, ~ eb4@5]/6", J: "[ab4,c5,f5]@15 [f4,db5]",
  K: "[~@15 c5@16 ~ bb4@16 [c5,f5]@16 db5@16 c4@48, ~@15 eb4@113, ~@31 [g4,eb5]@16 ~ ab4@32 ~@48, ~ f4]/8", // F5 Cm
  L: "[~@2 d4@2 [db4,ab4] [g4,bb4] [c4,f4]@2, eb4, ~@31 bb3@32 ~@65, ~@2 f4@3 ~@3]/8", // Db5 Gm F5
  M: "[~ d4@2 [db4,ab4], ~@15 bb3@32 ~@17, ~ f4@3]/4", // Db5
  N: "[[bb3,db4,f4]@15 [c4,ab4]@16 [bb3,g4]@16 ~@17 c5@16 db5@15 bb4@16 c5@16 ~, ~@15 eb4@113, ~@64 [f4,ab4]@31 g4@32 ~]/8", // Bbm Fm Eb Fm
  O: "[[db4,f4] c4 c5, ab4]/3", // Db
  P: "[bb4@8 e4@8 ~@16 db5@15 bb4@16 c5@16 ~, g4 [f4,ab4]@2 ~@2, ~@8 c5@24 ~@15 g4@32 ~]/5", Q: "[g4,bb4]",
  R: "[~ bb4, ~@15 [g4,eb5]@16 ~]/2", S: "[[c5,f5] [f4,db5] c5, ab4]/3", T: "[g4,bb4,eb5]",
  U: "[[c5,f5]@15 f4@16 ~, ab4]/2", // F5
})).s("gm_pad_warm").gain(0.21).pan(0.4)

// other · alto sax
const alto_sax = note(`<
  A B C D E@2 F G H B C D I@2 F J ~@11 K@3 ~@2 L@2 M@2 N O P Q A B C D E@2 F G H B C D I@2 F R@2 S T ~ U V W ~@4 X Y@2
  ~@3 Z AA@2 ~@2 AB AC AD@2 N O P AE A B C D E@2 F G H B C D I@2 F AF U AG W ~ U S T ~
>`.pickRestart({
  A: "[ab3,ab4]@3 [ab3,ab4]", B: "[bb3,bb4] [ab3,ab4]", C: "[g3,g4]@11 ~ [g3,g4]@4", D: "[ab3,ab4] [g3,g4]",
  E: "[[f3,f4]@4 ~ [f3,f4]!2 [eb3,eb4]@3 ~@6]/2", F: "[ab3,ab4]@7 [g3,g4]", G: "[g3,g4]@13 ~@3",
  H: "[ab3,ab4]@11 ~ [ab3,ab4]@4", I: "[[f3,f4]@4 ~ [f3,f4]!2 [eb3,eb4]@3 ~ [ab3,ab4]!3 [ab3,ab4]@2]/2",
  J: "~@2 [g3,g4]@13 ~", // G
  K: "[[g3,g4]@4 [g3,g4]@4 [g3,g4]@4 [eb3,eb4]@2 [f3,f4]@4 ~@4 f3@2 ab3@2 ab3@2 f3@2 g3@4 ab3@5 ~@9]/3", // G Eb F
  L: "[~@4 d4@2 d4@2 d4@3 ~ d4@2 eb4@4 d4@4 d4@3 ~ c4@2 d4@3 ~]/2", M: "[eb4@2 eb4@2 eb4@2 c4 eb4@2 f4@2 ~@5]/2",
  N: "[f3,f4]", O: "[ab3,ab4]", P: "[bb3,bb4]", Q: "~@2 c4@2 c4@2 bb3@2 c4@5 ~@3",
  R: "[~@6 ab3 ab3@2 ~@3 ab3 bb3 c4 db4, ~@2 [g3,g4]@13 ~@17]/2", S: "eb4@6 c4 ab3", T: "~@6 bb3 ab3",
  U: "~@4 ab3 bb3 c4 db4", V: "~@6 f4 ab3", W: "~@6 c4 ab3", X: "~@6 eb3@4 f3@3 ~@3",
  Y: "[~@14 ab3@4 f3@3 ~ ab3@4 f3@4 ~@2]/2", Z: "[g3,g4]@2 [g3,g4]@2 [g3,g4]@2 [eb3,eb4] [f3,f4]",
  AA: "[~@8 ab3@2 ab3@2 f3@2 g3@4 ab3@5 ~@9]/2", AB: "~@4 d4@2 d4@2 d4@3 ~ d4@4", AC: "eb4@2 d4@4 d4@3 ~ c4@2 d4@3 ~",
  AD: "[eb4@2 eb4@2 eb4@2 c4 eb4@2 f4@3 ~@4]/2",
  AE: "[c4,c5] [c4,c5]@2 [c4,c5] [c4,c5]@2 [c4,c5] [c4,c5]@2 [c4,c5] [c4,c5]@2 [c4,c5]@3 ~", // C
  AF: "~@6 ab3!2, ~@2 [g3,g4]@13 ~", AG: "eb4@6 f4 ab3",
})).s("gm_alto_sax").gain(0.3)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  A@2 B@2 C@2 D E F G H I J@2 K@2 L M@2 N@8 O@8 P@3 Q@8 R S T U V W X@2 Y@2 Z AA@4 AB@3 AC N@8 AD@8 AE@4 AF T U V W X@2
  R AG T U V W X@2 Y@2 AH AI@3 Z AI@3
>`.pickRestart({
  A: "c7/2", B: "bb6/2", C: "ab6/2", D: "c7", E: "bb6", F: "c6@3 eb6, f3", G: "db6 c6, db3", H: "bb5@3 eb6, eb3",
  I: "c6 bb5, c3", J: "[db3@8 ~@4 ab5 bb5 c6@2, ab5@3 ~, ~ ab2]/2", K: "[c6@14 bb5 ab5 bb5@16, eb3]/2",
  L: "[f4,f5] ~@3 [f4,f5] ~@3 [f4,f5] ~@5 [f4,f5] ~", // F
  M: "[~@2 [f4,f5] ~@3 [f4,f5] ~@5 [bb4,bb5] ab4 [f4,f5] eb5 f5@2 ~@2 [f4,f5] ~@3 [f4,f5] ~@5 [f4,f5] ~, ~@13 ab5@2 eb4@17, ~@16 f4 ~@15]/2", // F Bb F
  N: "[~@2 [f4,f5] ~@3 [f4,f5] ~@2 [f4,f5] [g4,g5] [ab4,ab5] [bb4,bb5] ab4 f5 eb5 f4@2 ~@110, ~@13 ab5@2 eb4@113, ~@14 f4@2 f5 ~@111]/8", // F G Ab Bb
  O: "[~@9 [f4,f5] [g4,g5] [ab4,ab5] [bb4,bb5] ab4 f5 eb5 [f4,f5] ~@111, ~@13 ab5@2 eb4@113, ~@7 f4 c7@16 ~@40]/8", // F G Ab Bb F
  P: "[~@8 [ab3,ab4] [bb3,bb4] [c4,c5] ~ eb5 [f4,f5] [g4,g5] [ab4,ab5] bb3@16 c4@16, ~@11 [db4,db5]@2 ~@35, ~ eb4@3]/3", // Ab Bb C F G Ab Db
  Q: "[~@16 f4 ~@3 e4 ~@11 [c5,c6]@12 [eb5,eb6]@4 [db5,db6]@8 [c5,c6]@8 [bb4,bb5]@12 [eb5,eb6]@4 [c5,c6]@8 [bb4,bb5]@8 [ab4,ab5]@10 [f4,f5]@2 [g4,g5]@2 [ab4,ab5]@10 [ab4,ab5]@2 [bb4,bb5]@2 [c5,c6]@4, eb4]/8", // C Eb Db C Bb Eb C Bb …
  R: "[c5,c6]@14 [bb4,bb5] [ab4,ab5]", // C Bb Ab
  S: "[bb4,bb5]@8 c5@2 [c4,c5] [e4,e5] [f4,f5] ~ [ab4,ab5] [bb4,bb5], ~@8 c6@4 ~ [g4,g5]@2 ~", T: "[c5,c6]@3 [eb5,eb6]",
  U: "[db5,db6] [c5,c6]", V: "[bb4,bb5]@3 [eb5,eb6]", W: "[c5,c6] [bb4,bb5]",
  X: "[[ab4,ab5]@5 [f4,f5] [g4,g5] [ab4,ab5]@5 [ab4,ab5] [bb4,bb5] [c5,c6]@2]/2", Y: "[[c5,c6]@7 [bb4,bb5]@9]/2",
  Z: "[ab4,ab5]@4 [ab4,ab5] [bb4,bb5] [c5,c6] [db5,db6]", // Ab Bb C Db
  AA: "[[eb5,eb6]@6 [c5,c6] [ab4,ab5]@7 [bb4,bb5] [ab4,ab5]@13 [ab4,ab5] [bb4,bb5] [c5,c6] [db5,db6]]/4", // Eb C Ab Bb Ab Bb C Db
  AB: "[[eb5,eb6]@12 [c5,c6]@2 [ab4,ab5]@14 [bb4,bb5]@2 [ab4,ab5]@17 ~]/3", // Eb C Ab Bb Ab
  AC: "f5@2 ~@2 [f4,f5] ~@3 [f4,f5] ~@5 [f4,f5] ~, f4 ~@15", // F
  AD: "[~@9 [f4,f5] [g4,g5] [ab4,ab5] [bb4,bb5] ab4 f5 eb5 c7@32 ~@80, ~@13 ab5@2 eb4@113, ~@7 f4 f4 ~@55, ~@16 f5 ~@111]/8", // F G Ab Bb
  AE: "[~@8 [ab3,ab4] [bb3,bb4] [c4,c5] ~ eb5 [f4,f5] [g4,g5] [ab4,ab5] bb3@16 c4@16 ~@16, ~@11 [db4,db5]@2 ~@51, ~@3 eb4@13]/4", // Ab Bb C F G Ab Db
  AF: "f4 ~@3 e4 ~@11", AG: "[bb4,bb5]@8 c5@2 c5 [e4,e5] [f4,f5] ~ [ab4,ab5] [bb4,bb5], ~@8 c6@4 ~ [g4,g5]@2 ~",
  AH: "~@4 [ab4,ab5] [bb4,bb5] [c5,c6] [db5,db6]", AI: "[[eb5,eb6]@6 [c5,c6] [ab4,ab5]@7 [bb4,bb5] [ab4,ab5]@9]/3",
})).s("gm_string_ensemble_1").gain(0.25)

// other · glockenspiel
const glockenspiel = note(`<
  A B C D E F G H A B C I E F G J K L M N O ~@6 P ~@7 Q R S T Q A B C D E F G H A B C D E F G J U V W ~ U V W ~ K X O
  ~@6 P ~@7 Q R S T Q A B C D E F G H A B C D E F G J U V W ~ U V W ~
>`.pickRestart({
  A: "c6 ~@11 eb6 ~@3", B: "db6 ~@7 c6 ~@7", C: "bb5 ~@11 eb6 ~@3", D: "c6 ~@3 bb5 ~@3", E: "ab5 ~@9 f5 ~ g5 ~ ab5 ~",
  F: "~@8 ab5 ~ bb5 ~ c6 ~@3", G: "c6 ~@13 bb5 ~", H: "bb5 ~@7", I: "c6 ~@7 bb5 ~@7", J: "~@2 bb5 ~@13",
  K: "f5 ~@3 f5 ~@3 f5 ~@5 f5 ~", L: "~@2 f5 ~@3 f5 ~@5 bb5 ab5 f5 eb5", M: "f5@2 ~@2 f5 ~@3 f5 ~@5 f5 ~",
  N: "~@2 f5 ~@3 f5 ~@2 f5 g5 ab5 bb5 ab5 f5 eb5", O: "f5 ~@15", P: "~@9 f5 g5 ab5 bb5 ab5 f5 eb5",
  Q: "~@8 ab4 bb4 c5 db5 eb5 f5 g5 ab5", R: "bb4 ~ bb4 ~ f5 ~ ab5@4 f5 ~ bb4@2 ~@2",
  S: "c5 ~ c5 ~ eb5 ~ ab5@3 ~ eb5@2 c5@2 ~@2", T: "bb4 ~ bb4 ~ eb5 ~ ab5@4 eb5@2 bb4@2 ~@2",
  U: "~@8 ab5 ~ bb5 ~ c6 ~ db6 ~", V: "eb6 ~@11 c6 ~ ab5 ~", W: "~@12 bb5 ~ ab5 ~",
  X: "~@2 f5 ~@3 f5 ~@2 f5 ~ ab5 bb5 ab5 f5 eb5",
})).s("gm_glockenspiel").gain(0.2)

// other · electric bass pick
const electric_bass_pick = note(`<
  A@2 B@2 A C D@2 A@2 B@2 A C D@2 ~@4 A@2 B@2 A@2 D B A@2 B@2 A@2 D B ~@30 A@2 B@2 A@2 D B A@2 B@2 A@2 D B ~@20 C B A@2
  C B A E
>`.pickRestart({
  A: "ab4 ~ f4 ~ ab4 ~ f4 ~ ab4 ~ f4 ~ ab4 ~ f4 ~", B: "g4 ~ f4 ~ g4 ~ f4 ~ g4 ~ f4 ~ g4 ~ f4 ~",
  C: "ab4 ~ eb4 ~ ab4 ~ eb4 ~ ab4 ~ eb4 ~ ab4 ~ eb4 ~", D: "ab4 ~ g4 ~ ab4 ~ g4 ~ ab4 ~ g4 ~ ab4 ~ g4 ~",
  E: "ab4 ~ f4 ~ ab4 ~ f4 ~@9",
})).s("gm_lead_8_bass_lead").gain(0.15).pan(0.4)

// other · timpani · F
const timpani = note(`<
  ~@39
  [~@9 a2 [f2,a2]!2 a2 [f2,a2] a2 [f2,a2]]
  ~@45
  [~@9 a2 [f2,a2]!2 a2 [f2,a2] a2 [f2,a2]]
  ~@24
>`).s("gm_timpani").gain(0.25).pan(0.4)

// other · timpani · soft notes
const timpani_soft = note("<~@39 [~@8 a2 f2 ~@6] ~@45 [~@8 a2 f2 ~@6] ~@24>").s("gm_timpani").gain(0.15).pan(0.4)

// other · piano
const piano_2 = note("<~@73 A@3 B@6 ~@28>".pickRestart({
  A: "eb4/3", B: "eb4/6",
})).s("gm_piano").gain(0.26)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@16
  [~@7 x ~@3 x ~@3 x]
  [~@3 x ~@3 x ~@3 x ~@3 x]
  [~@7 x ~@3 x ~@3 x]
  ~@45
  [~@7 x ~@3 x ~@3 x]
  [~@3 x ~@3 x ~@3 x ~@3 x]
  ~@44
>`).gain(0.27)

// drums · clap
const clap = s("cp").struct("<~@16 [~ x ~ x]!4 ~@36 [~ x ~ x]!10 ~@36 [~ x ~ x]!7 [~ x ~@2]>").gain(0.53)

// drums · hihat
const hihat = s("hh").struct(`<
// … 32 more lines

More by Caught in the Act