Integrating Events and Patterns

[email protected] Tue, 8 Jun 2021 10:40:23 -0400
Newsgroups gmane.comp.audio.supercollider.user
Message-ID <CANqmgpApXu4yZfjcesXpZSqrnhJD7H1wYvXoq+dAQRC1s5hxUg@mail.gmail.com>
Hi all,

I am currently trying to recall a collection of event values and convert
them into a Pbindef.  I'm using a simple class that Daniel Mayer put
together a few years ago, but I don't think it's been integrated into SC
yet. This is a shame, since it is an extremely useful class!  I'll share
the class and code at the bottom of the message.

If anyone could help me, it would be greatly appreciated - I've been
beating my head against the wall for many hours on this.

Essentially, I get an error on the first evaluation, but on the second
evaluation, it seems to execute as expected:
ERROR: Primitive '_IdentDict_Put' failed.
Wrong type.
RECEIVER:

This is the code:
(
~patt = "( 'sus': Pwhite(0.5, 0.8), 'rel': Pwhite(0.01, 0.3), 'degree':
Pseq([ 0, 2, 3, 4 ], inf), 'dur': Pseq([ 0.2 ], inf),
  'octave': Prand([ 5 ], inf), 'dec': Pseq([ 0, 2, 3, 4 ], inf),
'instrument': 'nil')";
~patt = ~patt.interpret;
~patt = ~patt.array;
~finalPatt = {|m| ~patt};
);
(
n = Pbindef(\d, *~finalPatt.());
e = PbindefEvent(n);
);


This is the class:
PbindefEvent : Event {
        var <>pbindef;

        *new { |pbindef| ^super.new.pbindef_(pbindef).initPbindefEvent }

        initPbindefEvent {
                var e = pbindef.source.pairs.as(Event);
                e.keysValuesChange { |k,v| v.pattern };
                ^this.putAll(e)
        }

        put { |k,v|
                Pbindef(pbindef.key, k, v);
                ^this.superPerform(\put, k, v);
        }
}