The fix function is usually the way to do it.
fix fn prop p
applies function fn
only to the events in p
that match prop
. You could use it like this:
d1
$ fix (# gain "1 1 0 0 1 1 0") (n 0)
$ fix (# gain "1 0 1 0 1 0 1") (n 12)
$ fix (# gain "1 0 0 1 0 1 1") (n 24)
$ n "[0,12,24]" # s "superreese"
The problem with your approach is that Pattern
does not really have a notion of chords. It knows only events that may or may not occur at the same time. If you're willing to dig deep into Haskell and Tidal, you might be able to write a function that applies the gain as you wish. Modelling chords as Pattern [Note]
might do the trick and you can have a look at this thread (How to apply functions to number Patterns?) to get an idea how it might be implemented.