Wherein we examine images as a means to express parameter changes. Right-click to copy this example to your workspace
In this example we filter a repeating note sequence using the CCImageSampler node. The image lookup locations are generated by the CCGen2D node. In this example we use the time-varying image samples to control the parameters of a BandPass filter node.
At right is the image we're using for this example. As detailed below we use the red and green channels of this arbitrary image to control the filter parameters. We can see faint yellow dots representing the sample positions in the Image Editor.
The CCGen2D node generates the yellow dots dynamically and updates the image overlay during performance. You can paint or draw into the image and when you save your changes, CCImageSampler automatically reloads it and thus modifies the peformance.
When a sample encounters "hot" pixel values the extreme filter parameters are delivered to the filter. The hand-painted grayscale lines produce a rhythm click as the generator's samples encounter them.
Right-click to copy this example to your workspace
Controller
is a connection point for the upstream generator of sample
image positions. CCImageSampler listens on this connection for ImageXY
or
ImageX
/ImageY
control messages. Values are normalized pixel coordinates
between 0 and 1. Without an upstream connection the CCImageSampler receives
no coordinates and therefore produces no image samples.
Image
is the name of the image to sample. You can drag & drop an image
from the workspace panel or enter the filename directly. Clicking on the
arrow to its right causes the image to be displayed in an
Image Editor panel.
RedCC
controls the name of the control-change message the CCImageSampler
produces on its output when the red channel of the image is sampled. Here,
we see that the red channel controls Cutoff
which happens to be the
BandPass parameter for the filter center.
RedRange
causes the pixel sample value between 0 and 1 to be remapped into
a range appropriate for RedCC. Here we vary the cutoff frequency between
200 and 2000 Hertz.
GreenCC
establishes the name of the CC message associated with green
channel samples. Here, we see that the green channel controls Bandpass's
Quality
parameter.
GreenRange
remaps the green channel values from 0-1 onto 1-6.
BlueCC
, AlphaCC
are empty and this means that their pixel values will
not produce any CC messages.
The Gen2D node generates 2 dimensional control signals and is the sibling of our 1D CCGenerator. Since our goal is to generate sample points for CCImageSampler this is the perfect tool for the job. Gen2D generates a rich collection of samples with only a few easily mastered parameters. As you play with the parameters it is very helpful to have the Image Editor panel opened in an adjacent panel.
Controller
is a connection point for controlling the CCGen2D node. Here
it is unused but the mind boggles at the idea of automating some of these
parameters.
CC Name
is the name of the CC message we generate. ImageXY
was chosen
because this is the name required by CCImageSampler.
Target Node
allows you to target a subnode in a node-group. Here it is
unused.
Generator
selects the pattern generator from:
In this example we selected Phasor with carefully selected values for
FreqX
and FreqY
to produce a Matrix-like
raining pixel effect.
Rate
controls the CC generator execution rate. At 10::ms
we generate
100 samples per second. Changing rate may interact with your FreqX/Y
settings so its usually wise to adopt a fixed value before investing heavily
in tweaking the remaining parameters.
FreqX
, FreqY
independently control the X and Y pattern frequency.
PhaseX
, PhaseY
independently control the X and Y phase or pattern offset.
ScaleX
, ScaleY
independently control the X and Y scale of the pattern.
Usually these values should be less than 1, though there are times where
larger values are useful.
OutputMin
, OutputMax
remaps the [-1, 1] values of the pattern generator
onto the coordinate range required by the CC consumer. Since we're targeting
CCImageSampler / ImageXY, we'd like our values to reside in the [0-1]
range. Values within thsi range can be used to constrain samples to a subset
of the entire image.