FAUST (programming Language) - Block-diagram Composition

Block-diagram Composition

Contrary to Max-like visual programming languages where the user does manual connections, FAUST primitives are assembled in block diagrams by using a set of high-level block diagram composition operations. You can think of these composition operators as a generalization of the mathematical function composition operator.

The block-diagram composition operators used in FAUST
f~g Recursive composition (precedence 4)
f,g Parallel composition (precedence 3)
f:g Sequential composition (precedence 2)
f<:g Split composition (precedence 1)
f:>g Merge composition (precedence 1)

Let’s say that we want to connect the output of + to the input of abs in order to compute the absolute value of the output signal. This connection can be done using the sequential composition operator ':' (colon):

process = + : abs;

Here is an example of parallel composition (a stereo cable) using the operator ',' that puts in parallel its left and right expressions:

process = _,_;

These operators can be arbitrarily combined. For example to multiply the input signal by 0.5 one can write:

process = _,0.5 : *;

Taking advantage of some syntactic sugar the above example can be rewritten (using what functional programmers know as curryfication):

process = *(0.5);

The recursive composition operator '~' can be used to create block-diagrams with cycles (that include an implicit one-sample delay). Here is the example of an integrator that takes an input signal X and computes an output signal Y such that Y (t) = X(t) + Y(t−1):

process = + ~ _;

Read more about this topic:  FAUST (programming Language)

Famous quotes containing the word composition:

    There was not a grain of poetry in the whole composition of Lord Fawn, and poetry was what her very soul craved;Mpoetry, together with houses, champagne, jewels, and admiration.
    Anthony Trollope (1815–1882)