Influx:
Filter:
Influx/Classes (extension) | Libraries > JITLib

Influx
ExtensionExtension

entangle control parameters for more intuitive performance

Description

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.

Typical Usage Scenarios

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:

Class Methods

.new

make a new Influx

Arguments:

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.

Instance Methods

Instance Variables

.inNames

the input names

.outNames

the output names

.inValDict

the dict of input values

.outValDict

the dict of output values

.action

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

.smallDim

.bigDim

shape is the shape of the weights, [inNames.size, outNames.size] smallDim is the smaller of the two, bigDim the greater.

.presets

a dict of named weights presets used for disentangling. Can also be a place to put user presets of weights.

.inScaler

a scaler for the input values - zooms into a smaller range around the center setting. (see examples)

.outOffsets

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.

Instance Methods

.postv

.postw

.postp

pretty-post input and output values, weights, and weights presets

.plot

plot the weights arrays with an InfluxPlot. a.plot;

.set

set input values of Influx

Arguments:

... keyValPairs

key1, val1, ... keyN, valN

.rand

create random weights up to +- maxval given.

.blend

blend weights with other array by given factor. other array values will wrap as required by weights shape.

.calcOutVals

calculate new output values and do the action(s).

.makePresets

make some default presets (diagonal etc.)

.setwPre

set weights to preset of the given name.

.entangle

add more entanglement between params; drift is the amount of entanglement from 0.0 to 1.0

.disentangle

disentangle in the direction of a preset

Arguments:

blend

by how much to disentangle

presetName

name of the weights preset to disentangle towards, default is diagL

.attachMethod

attach an object - typically a JITLib proxy like Ndef, Tdef - to set its params from the Influx outputs.

Arguments:

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 object.getSpec.

Examples