PLswitch dynamic scope Pswitch variant 


Part of: miSCellaneous


Inherits from: PL_Pattern


Takes Symbol args for later reference by the Streams, which will read from variables in the Environments of their instantiation. See PLx suite.


See also: Pswitch, PLswitch1, Event patterns and Functions, VarGui, VarGui shortcut builds



Creation / Class Methods


*new (list, which, envir)

Creates a new PLswitch object.

list - Symbol or Pswitch list arg. 

If a Symbol is passed, list can be assigned to an envir variable later on.

This lists's elements can be dynamically replaced by Patterns or Streams.

which - Symbol or Pswitch which arg. Defaults to 0.

If a Symbol is passed, which can be assigned to an envir variable later on.

Can be dynamically replaced by Patterns or Streams.

envir - Dictionary or one of the Symbols

\top, \t (topEnvironment), \current, \c (currentEnvironment).

Dictionary to be taken for variable reference. Defaults to \current.


Examples


(

s = Server.local;

Server.default = s;

s.boot;

)

// definition for future reference in arbitrary Environments


p = PLswitch(\a, \w);



// define array

// PLseq defaults to repeats = inf



(

~a = (70..75) ++ Pshuf((85..80), 2) ++ Pseq((90..94));


~w = PLseq((0..7));


x = Pbind(\midinote, p, \dur, 0.1).play;

)


// update array element


~a[2] = Pseq([86, 85], 2) + [0,3];



// reverse index pattern


~w = PLseq((7..0));



// keep in mind that indices are wrapped, no surpise here ...


~a = (70,72..84);



// ... but with shorter array indices are grouped in 5 + 3


~a = (70,72..78);


x.stop;



//////////////////////



// placeholder may also get lists of event patterns


(

p = PLswitch(\a, \w);


~a = [ Pbind(

\midinote, Pwhite(60,65,3),

\dur, 0.2

),

Pbind(

\midinote, Pwhite(70,75,3),

\dur, 0.15

),

Pbind(

\midinote, Pwhite(80,85,3),

\dur, 0.1

),

Pbind(

\midinote, Pwhite(90,95,6),

\dur, 0.05

)

];


~w = PLseq((0..3));


x = p.play;

)



// replace index sequence


~w = PLseq([3,0]);


~w = PLseq([1,2]);



// replace array element


(

~a[2] = Pbind(

\midinote, Pwhite(70,75,3) + [0, 5],

\dur, 0.15

);

)



// replace whole array


(

~a = [ Pbind(

\midinote, Pwhite(60,65,3) + [0, 5],

\dur, 0.15

),

Pbind(

\midinote, Pwhite(70,80,2) + [0, 4],

\dur, 0.25

),

Pbind(

\midinote, Pwhite(95,100,6) + [0, -9],

\dur, 0.05

)

];

)


x.stop;