Influx (and its named cousin, Idef) explores the idea of performing with running processes by means of influence on process parameters rather than direct control. This is a MetaControl approach. It maps input values to output values by allowing every input param to influence any output param by a given weight.
FAN IN/FAN OUT
One typical use would be with sound processes or patterns with too many input parameters: Rather than mapping one control directly to each param, one can entangle rather few control parameters to influence a big bundle of process control inputs. While this will not access to the full possibility space, it can reduce time to find interesting areas in the space (which one then might want to store)
DIS/ENTANGLE
One can also use the same param names for input and output, starting with neutral weights like [0,0,1,0] where each param only influences its same-named output. Then one can introduce "entanglement" between params by adding small random deviations to the weights.
RELATIVE - playing around a known preset
One can use a known location in the param space (e.g. a stored good preset) as a starting point, and use Influx to play relative to the preset. Here, zooming allows very subtle explorations of shadings within a known good zone.
First example:
Longer example follows below!
See also Examples folder:
make a new Influx
ins |
names for the inputs to use |
outs |
names for outputs to use |
vals |
an optional dictionary of values for the input names as keys |
weights |
an optional list of weights (of shape inputs x outputs) that determine how much influence which ins exert on which outs. |
the input names
the output names
the dict of input values
the dict of output values
a FuncChain, where actions can be put that run when new output values are calculated. This is used for attaching e.g. Ndefs to be played with Influx.
shape is the shape of the weights, [inNames.size, outNames.size] smallDim is the smaller of the two, bigDim the greater.
a dict of named weights presets used for disentangling. Can also be a place to put user presets of weights.
a scaler for the input values - zooms into a smaller range around the center setting. (see examples)
by default, influences start from the center. To explore a parameter space near a given setting, one can make a bipolarized version of that setting, and set the outOffsets to it. See examples.
pretty-post input and output values, weights, and weights presets
plot the weights arrays with an InfluxPlot. a.plot;
set input values of Influx
... keyValPairs |
key1, val1, ... keyN, valN |
create random weights up to +- maxval given.
blend weights with other array by given factor. other array values will wrap as required by weights shape.
calculate new output values and do the action(s).
make some default presets (diagonal etc.)
set weights to preset of the given name.
add more entanglement between params; drift is the amount of entanglement from 0.0 to 1.0
disentangle in the direction of a preset
blend |
by how much to disentangle |
presetName |
name of the weights preset to disentangle towards, default is diagL |
attach an object - typically a JITLib proxy like Ndef, Tdef - to set its params from the Influx outputs.
object |
the object |
funcName |
a name to use in the influx action, which is an MFunc. |
paramNames |
paramNames to set - if none given, gets them from the object. |
specs |
specs to use for mapping. If none are given, the object will be asked via |