Hi Derek,
Maybe a very simple example would be good. I have an Ozone MIDI-controller, and it has eight knobs, which send out continuous controller data on 8 different MIDI CC numbers. Now, [ctlin] (MIDI control input) doesn't have settable arguments -- only creation args., so I racked my brains trying to figure out how to make an object that would take a knob number argument, 1-8, convert that number to the corresponding controller number, and watch that controller number with [ctlin].
(Admittedly, it would have been easy to create [Ozknob1]...[Ozknob8] objects, but this reeked of kludge to my sensibilities; neither did I consider it elegant to use a [ctlin] for each knob that watched *all* controller data, then [route]d the data from the desired control number -- I wanted the pre-filtering to be done by [ctlin], if possible).
The more generalized problem is this: take a creation argument of an abstraction, *do something with it*, then get it into the creation argument of a contained abstraction.
Nothing I tried worked, until I took the attached dynamic approach.
Phil Stone www.pkstonemusic.com
Derek Holzer wrote:
Would like to show some examples of dynamic and self-modifying Pd patches during a workshop here in Berlin. I know there are some in the archives (and maybe on people's HDs) somewhere, but damned if I can find them. Links to previkous posts or new examples welcome!
best! Derek
#N canvas 676 96 394 341 10; #X obj 8 105 21; #X obj 34 105 22; #X obj 60 105 23; #X obj 86 105 24; #X obj 112 105 25; #X obj 138 105 26; #X obj 164 105 27; #X obj 189 105 28; #X obj 37 74 select 1 2 3 4 5 6 7 8; #X obj 37 51 f $1; #X obj 37 6 loadbang; #X obj 103 304 outlet; #X text 8 149 Ozone mapping; #X msg 237 93 2; #X text 267 91 channel; #X obj 37 28 t b b; #X obj 102 158 pack f f; #X text 110 16 Use: [OzKnob n] where n is the knob #; #N canvas 0 22 210 111 $0-oz_ctrlknob 0; #X obj 28 72 outlet; #X restore 103 272 pd $0-oz_ctrlknob; #X obj 102 218 s pd-$0-oz_ctrlknob; #X msg 102 187 obj 10 10 ctlin $1 $2 , connect 1 0 0 0; #X connect 0 0 16 0; #X connect 1 0 16 0; #X connect 2 0 16 0; #X connect 3 0 16 0; #X connect 4 0 16 0; #X connect 5 0 16 0; #X connect 6 0 16 0; #X connect 7 0 16 0; #X connect 8 0 0 0; #X connect 8 1 1 0; #X connect 8 2 2 0; #X connect 8 3 3 0; #X connect 8 4 4 0; #X connect 8 5 5 0; #X connect 8 6 6 0; #X connect 8 7 7 0; #X connect 9 0 8 0; #X connect 10 0 15 0; #X connect 13 0 16 1; #X connect 15 0 9 0; #X connect 15 1 13 0; #X connect 16 0 20 0; #X connect 18 0 11 0; #X connect 20 0 19 0;