omni icon indicating copy to clipboard operation
omni copied to clipboard

[RFC] Functional composition: chain

Open vitreo12 opened this issue 3 years ago • 5 comments

It'd be great if there was some way of connecting Omni code together with functional syntax, a la Faust

vitreo12 avatar Aug 27 '20 10:08 vitreo12

Perhaps, just as a way to chain things together:

Oscillators.omni:

process Sine:
    ins 1
    outs 1

    init:
        phase = 0

    sample:
        freq_incr = in1 / samplerate
        out1 = sin(phase * twopi)
        phase = (phase + freq_incr) % 1

process Saw:
    ins 1
    outs 1

    init:
        phase = 0

    sample:
        ...
require "Oscillators.omni"

ins 1
outs 1

chain:
    in1 + (abs(Sine(1)) * 100) -> Sine | Saw(in2)

A Sine with range 0 - 100 controls frequency of another Sine, plus in1. A parallel Saw is played out too.

vitreo12 avatar Aug 29 '20 15:08 vitreo12

Can chain support defs?

vitreo12 avatar Sep 08 '20 17:09 vitreo12

What about like variable assignments?

chain:
    sine = Sine
    [in1, in1 * 2] -> sine -> tanh

Gonna generate 2 distorted sine waves. Multichannel expansion in SC style?

vitreo12 avatar Sep 08 '20 18:09 vitreo12

How would it operate with outs ???

vitreo12 avatar Sep 08 '20 18:09 vitreo12

Feeback??

chain:
    [in1 -> Sine] <<

vitreo12 avatar Oct 04 '20 20:10 vitreo12