basic

class Mix

Bases: PseudoUGen

A down-to-mono signal mixer.

>>> from supriya.ugens import DC, Mix, SynthDefBuilder
>>> with SynthDefBuilder() as builder:
...     oscillators = [DC.ar(source=1) for _ in range(5)]
...     mix = Mix.new(oscillators)
... 
>>> synthdef = builder.build(name="mix1", optimize=False)
>>> supriya.graph(synthdef)
>>> print(synthdef)
synthdef:
    name: mix1
    ugens:
    -   DC.ar/0:
            source: 1.0
    -   DC.ar/1:
            source: 1.0
    -   DC.ar/2:
            source: 1.0
    -   DC.ar/3:
            source: 1.0
    -   Sum4.ar:
            input_one: DC.ar/0[0]
            input_two: DC.ar/1[0]
            input_three: DC.ar/2[0]
            input_four: DC.ar/3[0]
    -   DC.ar/4:
            source: 1.0
    -   BinaryOpUGen(ADDITION).ar:
            left: Sum4.ar[0]
            right: DC.ar/4[0]
>>> with SynthDefBuilder() as builder:
...     oscillators = [DC.ar(source=1) for _ in range(15)]
...     mix = Mix.new(oscillators)
... 
>>> synthdef = builder.build("mix2")
>>> supriya.graph(synthdef)
>>> print(synthdef)
synthdef:
    name: mix2
    ugens:
    -   DC.ar/0:
            source: 1.0
    -   DC.ar/1:
            source: 1.0
    -   DC.ar/2:
            source: 1.0
    -   DC.ar/3:
            source: 1.0
    -   Sum4.ar/0:
            input_one: DC.ar/0[0]
            input_two: DC.ar/1[0]
            input_three: DC.ar/2[0]
            input_four: DC.ar/3[0]
    -   DC.ar/4:
            source: 1.0
    -   DC.ar/5:
            source: 1.0
    -   DC.ar/6:
            source: 1.0
    -   DC.ar/7:
            source: 1.0
    -   Sum4.ar/1:
            input_one: DC.ar/4[0]
            input_two: DC.ar/5[0]
            input_three: DC.ar/6[0]
            input_four: DC.ar/7[0]
    -   DC.ar/8:
            source: 1.0
    -   DC.ar/9:
            source: 1.0
    -   DC.ar/10:
            source: 1.0
    -   DC.ar/11:
            source: 1.0
    -   Sum4.ar/2:
            input_one: DC.ar/8[0]
            input_two: DC.ar/9[0]
            input_three: DC.ar/10[0]
            input_four: DC.ar/11[0]
    -   DC.ar/12:
            source: 1.0
    -   DC.ar/13:
            source: 1.0
    -   DC.ar/14:
            source: 1.0
    -   Sum3.ar:
            input_one: DC.ar/12[0]
            input_two: DC.ar/13[0]
            input_three: DC.ar/14[0]
    -   Sum4.ar/3:
            input_one: Sum4.ar/0[0]
            input_two: Sum4.ar/1[0]
            input_three: Sum4.ar/2[0]
            input_four: Sum3.ar[0]
classmethod multichannel(sources, channel_count)

Segment by channel count and mix down in parallel.

Combine panner outputs, first with first, second with second, etc.

>>> source = supriya.ugens.SinOsc.ar(frequency=[440, 660, 880])
>>> panner = supriya.ugens.PanAz.ar(
...     channel_count=4,
...     source=source,
...     position=supriya.ugens.LFNoise2.kr(),
... )
>>> mix = supriya.ugens.Mix.multichannel(panner, channel_count=4)
>>> out = supriya.ugens.Out.ar(bus=0, source=mix)
>>> supriya.graph(out)
>>> print(out)
synthdef:
    name: ...
    ugens:
    -   SinOsc.ar/0:
            frequency: 440.0
            phase: 0.0
    -   LFNoise2.kr:
            frequency: 500.0
    -   PanAz.ar/0:
            source: SinOsc.ar/0[0]
            position: LFNoise2.kr[0]
            amplitude: 1.0
            width: 2.0
            orientation: 0.5
    -   SinOsc.ar/1:
            frequency: 660.0
            phase: 0.0
    -   PanAz.ar/1:
            source: SinOsc.ar/1[0]
            position: LFNoise2.kr[0]
            amplitude: 1.0
            width: 2.0
            orientation: 0.5
    -   SinOsc.ar/2:
            frequency: 880.0
            phase: 0.0
    -   PanAz.ar/2:
            source: SinOsc.ar/2[0]
            position: LFNoise2.kr[0]
            amplitude: 1.0
            width: 2.0
            orientation: 0.5
    -   Sum3.ar/0:
            input_one: PanAz.ar/0[0]
            input_two: PanAz.ar/1[0]
            input_three: PanAz.ar/2[0]
    -   Sum3.ar/1:
            input_one: PanAz.ar/0[1]
            input_two: PanAz.ar/1[1]
            input_three: PanAz.ar/2[1]
    -   Sum3.ar/2:
            input_one: PanAz.ar/0[2]
            input_two: PanAz.ar/1[2]
            input_three: PanAz.ar/2[2]
    -   Sum3.ar/3:
            input_one: PanAz.ar/0[3]
            input_two: PanAz.ar/1[3]
            input_three: PanAz.ar/2[3]
    -   Out.ar:
            bus: 0.0
            source[0]: Sum3.ar/0[0]
            source[1]: Sum3.ar/1[0]
            source[2]: Sum3.ar/2[0]
            source[3]: Sum3.ar/3[0]

Compare with a non-multichannel mixdown:

>>> mix = supriya.ugens.Mix.new(panner)
>>> out = supriya.ugens.Out.ar(bus=0, source=mix)
>>> supriya.graph(out)
>>> print(out)
synthdef:
    name: ...
    ugens:
    -   SinOsc.ar/0:
            frequency: 440.0
            phase: 0.0
    -   LFNoise2.kr:
            frequency: 500.0
    -   PanAz.ar/0:
            source: SinOsc.ar/0[0]
            position: LFNoise2.kr[0]
            amplitude: 1.0
            width: 2.0
            orientation: 0.5
    -   Sum4.ar/0:
            input_one: PanAz.ar/0[0]
            input_two: PanAz.ar/0[1]
            input_three: PanAz.ar/0[2]
            input_four: PanAz.ar/0[3]
    -   SinOsc.ar/1:
            frequency: 660.0
            phase: 0.0
    -   PanAz.ar/1:
            source: SinOsc.ar/1[0]
            position: LFNoise2.kr[0]
            amplitude: 1.0
            width: 2.0
            orientation: 0.5
    -   Sum4.ar/1:
            input_one: PanAz.ar/1[0]
            input_two: PanAz.ar/1[1]
            input_three: PanAz.ar/1[2]
            input_four: PanAz.ar/1[3]
    -   SinOsc.ar/2:
            frequency: 880.0
            phase: 0.0
    -   PanAz.ar/2:
            source: SinOsc.ar/2[0]
            position: LFNoise2.kr[0]
            amplitude: 1.0
            width: 2.0
            orientation: 0.5
    -   Sum4.ar/2:
            input_one: PanAz.ar/2[0]
            input_two: PanAz.ar/2[1]
            input_three: PanAz.ar/2[2]
            input_four: PanAz.ar/2[3]
    -   Sum3.ar:
            input_one: Sum4.ar/0[0]
            input_two: Sum4.ar/1[0]
            input_three: Sum4.ar/2[0]
    -   Out.ar:
            bus: 0.0
            source[0]: Sum3.ar[0]
classmethod new(sources)
class MulAdd(*, calculation_rate: CalculationRate | SupportsInt | str | None, source: SupportsFloat | UGenScalar, multiplier: SupportsFloat | UGenScalar = 1.0, addend: SupportsFloat | UGenScalar = 0.0, **kwargs)

Bases: UGen

An Optimized multiplication / addition ugen.

>>> source = supriya.ugens.SinOsc.ar()
>>> mul_add = supriya.ugens.MulAdd.new(
...     addend=0.5,
...     multiplier=-1.5,
...     source=source,
... )
>>> mul_add
<MulAdd.ar()>
classmethod new(*, source: SupportsFloat | UGenOperable | UGenSerializable | Sequence[SupportsFloat | UGenOperable | UGenSerializable | Sequence[UGenRecursiveInput]], multiplier: SupportsFloat | UGenOperable | UGenSerializable | Sequence[SupportsFloat | UGenOperable | UGenSerializable | Sequence[UGenRecursiveInput]] = 1.0, addend: SupportsFloat | UGenOperable | UGenSerializable | Sequence[SupportsFloat | UGenOperable | UGenSerializable | Sequence[UGenRecursiveInput]] = 0.0) UGenOperable
property addend : UGenScalar
property multiplier : UGenScalar
property source : UGenScalar
class Sum3(*, calculation_rate: CalculationRate | SupportsInt | str | None, input_one: SupportsFloat | UGenScalar, input_two: SupportsFloat | UGenScalar, input_three: SupportsFloat | UGenScalar, **kwargs)

Bases: UGen

A three-input summing unit generator.

>>> input_one = supriya.ugens.SinOsc.ar()
>>> input_two = supriya.ugens.SinOsc.ar(phase=0.1)
>>> input_three = supriya.ugens.SinOsc.ar(phase=0.2)
>>> supriya.ugens.Sum3.new(
...     input_one=input_one,
...     input_two=input_two,
...     input_three=input_three,
... )
<Sum3.ar()>
classmethod new(*, input_one: SupportsFloat | UGenOperable | UGenSerializable | Sequence[SupportsFloat | UGenOperable | UGenSerializable | Sequence[UGenRecursiveInput]], input_two: SupportsFloat | UGenOperable | UGenSerializable | Sequence[SupportsFloat | UGenOperable | UGenSerializable | Sequence[UGenRecursiveInput]], input_three: SupportsFloat | UGenOperable | UGenSerializable | Sequence[SupportsFloat | UGenOperable | UGenSerializable | Sequence[UGenRecursiveInput]]) UGenOperable
property input_one : UGenScalar
property input_three : UGenScalar
property input_two : UGenScalar
class Sum4(*, calculation_rate: CalculationRate | SupportsInt | str | None, input_one: SupportsFloat | UGenScalar, input_two: SupportsFloat | UGenScalar, input_three: SupportsFloat | UGenScalar, input_four: SupportsFloat | UGenScalar, **kwargs)

Bases: UGen

A four-input summing unit generator.

>>> input_one = supriya.ugens.SinOsc.ar()
>>> input_two = supriya.ugens.SinOsc.ar(phase=0.1)
>>> input_three = supriya.ugens.SinOsc.ar(phase=0.2)
>>> input_four = supriya.ugens.SinOsc.ar(phase=0.3)
>>> supriya.ugens.Sum4.new(
...     input_one=input_one,
...     input_two=input_two,
...     input_three=input_three,
...     input_four=input_four,
... )
<Sum4.ar()>
classmethod new(*, input_one: SupportsFloat | UGenOperable | UGenSerializable | Sequence[SupportsFloat | UGenOperable | UGenSerializable | Sequence[UGenRecursiveInput]], input_two: SupportsFloat | UGenOperable | UGenSerializable | Sequence[SupportsFloat | UGenOperable | UGenSerializable | Sequence[UGenRecursiveInput]], input_three: SupportsFloat | UGenOperable | UGenSerializable | Sequence[SupportsFloat | UGenOperable | UGenSerializable | Sequence[UGenRecursiveInput]], input_four: SupportsFloat | UGenOperable | UGenSerializable | Sequence[SupportsFloat | UGenOperable | UGenSerializable | Sequence[UGenRecursiveInput]]) UGenOperable
property input_four : UGenScalar
property input_one : UGenScalar
property input_three : UGenScalar
property input_two : UGenScalar