title:: NodeEvent
categories:: Streams-Patterns-Events
related:: Classes/Event
summary:: synth- and group- like interface of Event

description::
The methods link::Classes/Event#-synth:: and link::Classes/Event#-group:: set the parent event of the receiver to specialized events that duplicate the functionality of link::Classes/Synth:: and link::Classes/Group:: objects. These objects follow the naming conventions of patterns (i.e., groups and addActions are integer ID's) and have the same stop/play/pause/resume interface as the EventStreamPlayers created by Pattern-play. So, they can be used interchangeably with patterns in control schemes and GUI's.

The following example creates a group with nodeID = 2 and plays a synth within it.

code::
g = (id: 2).group;
g.play;
a = (group: 2).synth;
a.play;
g.release;
g.stop;
::

subsection::Interface

method:: play
starts synth or group, returns this.delta
method:: stop
if ev[\hasGate] == true set gate to 0, otherwise frees the node
method:: pause
disables the node
method:: resume
reenables the node
method:: set ( key, value)
sets control identified by key to value
method:: split
returns an array of events, one for each synth or group specified by the receiver
method:: map (key, busID)
maps control to control bus
method:: before (nodeID)
moves to immediately before nodeID
method:: after (nodeID)
moves to immediately after nodeID
method:: headOf (nodeID)
moves to immediately to head of nodeID
method:: tailOf (nodeID)
moves to immediately to tail of nodeID

subsection:: Multi-channel expansion
With the exception of ~server, ~latency, and ~instrument any key in the event can have an array as a
value and the standard rules of multi-channel expansion will be followed.

Examples::

code::
// Here is a simple example of its use:

// define a multiple Group event
g = (id: [2,3,4,5,6], group: 0, addAction: 1).group;
g.play; // play it

// make a Synth event
b = ( freq: [500,510], group: [2,3]).synth;
b.play;

b.set(\freq,[1000,1006]);

g.release;

b.play;
h = g.split;	// split into individual group events
c = b.split;	// and synth events
c[0].set(\freq,700);
c[1].set(\freq,400);

h[0].stop;
h[1].stop;

g.stop;
::
