Esempio n. 1
0
def test_SynthDefCompiler_basic_02():

    with synthdeftools.SynthDefBuilder() as builder:
        sine = ugentools.SinOsc.ar()
        sine = -sine
        ugentools.Out.ar(bus=99, source=sine)
    py_synthdef = builder.build('test')
    py_compiled_synthdef = py_synthdef.compile()

    sc_synthdef = synthdeftools.SuperColliderSynthDef(
        'test',
        'Out.ar(99, SinOsc.ar(freq: 440).neg)',
    )
    sc_compiled_synthdef = sc_synthdef.compile()

    test_compiled_synthdef = bytes(
        b'SCgf'
        b'\x00\x00\x00\x02'
        b'\x00\x01'
        b'\x04test'
        b'\x00\x00\x00\x03'
        b'C\xdc\x00\x00'
        b'\x00\x00\x00\x00'
        b'B\xc6\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x03'
        b'\x06SinOsc'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x01'
        b'\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x01'
        b'\x02'
        b'\x0bUnaryOpUGen'
        b'\x02'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x01'
        b'\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x02'
        b'\x03Out'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x00'
        b'\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x00'
        b'\x00\x00', )

    assert sc_compiled_synthdef == test_compiled_synthdef
    assert py_compiled_synthdef == test_compiled_synthdef
Esempio n. 2
0
def test_SynthDefCompiler_basic_04():
    r'''FreeSelf.
    '''
    sc_synthdef = synthdeftools.SuperColliderSynthDef(
        'test', r'''
        Out.ar(0, FreeSelf.kr(SinOsc.ar()))
        ''')
    sc_compiled_synthdef = bytes(sc_synthdef.compile())

    with synthdeftools.SynthDefBuilder() as builder:
        sin_osc = ugentools.SinOsc.ar()
        ugentools.FreeSelf.kr(sin_osc)
        ugentools.Out.ar(bus=0, source=sin_osc)
    py_synthdef = builder.build('test')
    py_compiled_synthdef = py_synthdef.compile()

    test_compiled_synthdef = bytes(
        b'SCgf'
        b'\x00\x00\x00\x02'
        b'\x00\x01'
        b'\x04test'
        b'\x00\x00\x00\x02'
        b'C\xdc\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x03'
        b'\x06SinOsc'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x01'
        b'\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x01'
        b'\x02'
        b'\x08FreeSelf'
        b'\x01'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x01'
        b'\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x01'
        b'\x03Out'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x00'
        b'\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00', )

    assert sc_compiled_synthdef == test_compiled_synthdef
    assert py_compiled_synthdef == test_compiled_synthdef
def test_SynthDefCompiler_optimization_01():

    sc_synthdef = synthdeftools.SuperColliderSynthDef(
        'optimized', r'''
        var sine_a, sine_b, sine_c, sine_d;
        sine_a = SinOsc.ar(420);
        sine_b = SinOsc.ar(440);
        sine_c = SinOsc.ar(460);
        sine_d = SinOsc.ar(sine_c);
        Out.ar(0, sine_a);
        ''')
    sc_compiled_synthdef = bytes(sc_synthdef.compile())

    with synthdeftools.SynthDefBuilder() as builder:
        sine_a = ugentools.SinOsc.ar(frequency=420)
        sine_b = ugentools.SinOsc.ar(frequency=440)
        sine_c = ugentools.SinOsc.ar(frequency=460)
        sine_d = ugentools.SinOsc.ar(frequency=sine_c)
        ugentools.Out.ar(bus=0, source=sine_a)
    py_synthdef = builder.build('optimized')
    py_compiled_synthdef = py_synthdef.compile()

    test_compiled_synthdef = bytes(b'SCgf'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x01'
                                   b'\toptimized'
                                   b'\x00\x00\x00\x02'
                                   b'C\xd2\x00\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x02'
                                   b'\x06SinOsc'
                                   b'\x02'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00'
                                   b'\xff\xff\xff\xff'
                                   b'\x00\x00\x00\x00'
                                   b'\xff\xff\xff\xff'
                                   b'\x00\x00\x00\x01'
                                   b'\x02'
                                   b'\x03Out'
                                   b'\x02'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00'
                                   b'\xff\xff\xff\xff'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00')

    assert sc_compiled_synthdef == test_compiled_synthdef
    assert py_compiled_synthdef == test_compiled_synthdef
Esempio n. 4
0
def test_SynthDefCompiler_basic_03():

    sc_synthdef = synthdeftools.SuperColliderSynthDef(
        'test', r'''
        Out.ar(0, In.ar(8, 2))
        ''')
    sc_compiled_synthdef = sc_synthdef.compile()

    with synthdeftools.SynthDefBuilder() as builder:
        inputs = ugentools.In.ar(bus=8, channel_count=2)
        ugentools.Out.ar(bus=0, source=inputs)
    py_synthdef = builder.build('test')
    py_compiled_synthdef = py_synthdef.compile()

    test_compiled_synthdef = bytes(
        b'SCgf'
        b'\x00\x00\x00\x02'
        b'\x00\x01'
        b'\x04test'
        b'\x00\x00\x00\x02'
        b'A\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x02'
        b'\x02In'
        b'\x02'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x02'
        b'\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x00'
        b'\x02'
        b'\x02'
        b'\x03Out'
        b'\x02'
        b'\x00\x00\x00\x03'
        b'\x00\x00\x00\x00'
        b'\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x01'
        b'\x00\x00', )

    assert sc_compiled_synthdef == test_compiled_synthdef
    assert py_compiled_synthdef == test_compiled_synthdef
Esempio n. 5
0
def test_SynthDefCompiler_basic_05():

    with synthdeftools.SynthDefBuilder() as builder:
        source = ugentools.In.ar(bus=8, channel_count=2)
        ugentools.DetectSilence.ar(source=source)
        ugentools.Out.ar(bus=0, source=source)
    py_synthdef = builder.build('DetectSilenceTest')
    py_compiled_synthdef = py_synthdef.compile()

    sc_synthdef = synthdeftools.SuperColliderSynthDef(
        'DetectSilenceTest', r'''
        var source, detect_silence, out;
        source = In.ar(8, 2);
        detect_silence = DetectSilence.ar(source);
        out = Out.ar(0, source);
        ''')
    sc_compiled_synthdef = bytes(sc_synthdef.compile())

    assert sc_compiled_synthdef == py_compiled_synthdef
Esempio n. 6
0
def test_SynthDefCompiler_basic_01():

    with synthdeftools.SynthDefBuilder() as builder:
        sine_one = ugentools.SinOsc.ar(frequency=420)
        sine_two = ugentools.SinOsc.ar(frequency=440)
        sines = sine_one * sine_two
        ugentools.Out.ar(bus=0, source=sines)
    py_synthdef = builder.build('foo')
    py_compiled_synthdef = py_synthdef.compile()

    sc_synthdef = synthdeftools.SuperColliderSynthDef(
        'foo',
        'Out.ar(0, SinOsc.ar(freq: 420) * SinOsc.ar(freq: 440))',
    )
    sc_compiled_synthdef = sc_synthdef.compile()

    test_compiled_synthdef = bytes(
        b'SCgf'
        b'\x00\x00\x00\x02'
        b'\x00\x01'
        b'\x03foo'
        b'\x00\x00\x00\x03'
        b'C\xd2\x00\x00'
        b'\x00\x00\x00\x00'
        b'C\xdc\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x04'
        b'\x06SinOsc'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x01'
        b'\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x01'
        b'\x02'
        b'\x06SinOsc'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x01'
        b'\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x02'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x01'
        b'\x02'
        b'\x0cBinaryOpUGen'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x01'
        b'\x00\x02'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x00'
        b'\x02'
        b'\x03Out'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x00'
        b'\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x00'
        b'\x00\x00', )

    assert sc_compiled_synthdef == test_compiled_synthdef
    assert py_compiled_synthdef == test_compiled_synthdef
Esempio n. 7
0
def test_SynthDefCompiler_parameters_02():

    sc_synthdef = synthdeftools.SuperColliderSynthDef(
        'test', r'''
        arg freq=1200, out=23;
        Out.ar(out, SinOsc.ar(freq: freq));
        ''')
    sc_compiled_synthdef = sc_synthdef.compile()

    builder = synthdeftools.SynthDefBuilder(
        freq=1200,
        out=23,
    )
    sine = ugentools.SinOsc.ar(frequency=builder['freq'])
    out = ugentools.Out.ar(bus=builder['out'], source=sine)
    builder.add_ugens(out)
    py_synthdef = builder.build('test')
    py_compiled_synthdef = py_synthdef.compile()

    assert py_synthdef.indexed_parameters == (
        (
            0,
            synthdeftools.Parameter(
                name='freq',
                parameter_rate=synthdeftools.ParameterRate.CONTROL,
                value=1200.0,
            ),
        ),
        (
            1,
            synthdeftools.Parameter(
                name='out',
                parameter_rate=synthdeftools.ParameterRate.CONTROL,
                value=23.0,
            ),
        ),
    )

    test_compiled_synthdef = bytes(
        b'SCgf'
        b'\x00\x00\x00\x02'
        b'\x00\x01'
        b'\x04test'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x02'
        b'D\x96\x00\x00'
        b'A\xb8\x00\x00'
        b'\x00\x00\x00\x02'
        b'\x04freq'
        b'\x00\x00\x00\x00'
        b'\x03out'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x03'
        b'\x07Control'
        b'\x01'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x02'
        b'\x00\x00'
        b'\x01'
        b'\x01'
        b'\x06SinOsc'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x01'
        b'\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x00'
        b'\x02'
        b'\x03Out'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x00'
        b'\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x00'
        b'\x00\x00', )

    assert sc_compiled_synthdef == test_compiled_synthdef
    assert py_compiled_synthdef == test_compiled_synthdef
Esempio n. 8
0
def test_SynthDefCompiler_parameters_06():
    r'''Literal array arguments.'''

    builder = synthdeftools.SynthDefBuilder(
        amp=0.1,
        freqs=synthdeftools.Parameter(
            lag=0.5,
            value=[300, 400],
        ),
    )
    with builder:
        sines = ugentools.SinOsc.ar(frequency=builder['freqs'], )
        sines = ugentools.Mix.new(sines)
        sines = sines * builder['amp']
        ugentools.Out.ar(
            bus=0,
            source=sines,
        )
    py_synthdef = builder.build('arrayarg')
    py_compiled_synthdef = py_synthdef.compile()

    assert py_synthdef.indexed_parameters == (
        (
            0,
            synthdeftools.Parameter(
                name='amp',
                parameter_rate=synthdeftools.ParameterRate.CONTROL,
                value=0.1,
            ),
        ),
        (
            1,
            synthdeftools.Parameter(
                lag=0.5,
                name='freqs',
                parameter_rate=synthdeftools.ParameterRate.CONTROL,
                value=(300.0, 400.0)),
        ),
    )

    sc_synthdef = synthdeftools.SuperColliderSynthDef(
        'arrayarg',
        r'''
        |
            amp = 0.1,
            freqs = #[300, 400]
        |
        var sines;
        sines = SinOsc.ar(freqs).sum;
        Out.ar(0, sines * amp);
        ''',
        [0, 0.5],
    )
    sc_compiled_synthdef = bytes(sc_synthdef.compile())

    test_compiled_synthdef = bytes(b'SCgf'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x01'
                                   b'\x08arrayarg'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x00'
                                   b'?\x00\x00\x00'
                                   b'\x00\x00\x00\x03'
                                   b'=\xcc\xcc\xcd'
                                   b'C\x96\x00\x00'
                                   b'C\xc8\x00\x00'
                                   b'\x00\x00\x00\x02'
                                   b'\x03amp'
                                   b'\x00\x00\x00\x00'
                                   b'\x05freqs'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00\x00\x06'
                                   b'\nLagControl'
                                   b'\x01'
                                   b'\x00\x00\x00\x03'
                                   b'\x00\x00\x00\x03'
                                   b'\x00\x00'
                                   b'\xff\xff\xff\xff'
                                   b'\x00\x00\x00\x00'
                                   b'\xff\xff\xff\xff'
                                   b'\x00\x00\x00\x01'
                                   b'\xff\xff\xff\xff'
                                   b'\x00\x00\x00\x01'
                                   b'\x01'
                                   b'\x01'
                                   b'\x01'
                                   b'\x06SinOsc'
                                   b'\x02'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x01'
                                   b'\xff\xff\xff\xff'
                                   b'\x00\x00\x00\x00'
                                   b'\x02'
                                   b'\x06SinOsc'
                                   b'\x02'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x02'
                                   b'\xff\xff\xff\xff'
                                   b'\x00\x00\x00\x00'
                                   b'\x02'
                                   b'\x0cBinaryOpUGen'
                                   b'\x02'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x00'
                                   b'\x02'
                                   b'\x0cBinaryOpUGen'
                                   b'\x02'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x02'
                                   b'\x00\x00\x00\x03'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x02'
                                   b'\x03Out'
                                   b'\x02'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00'
                                   b'\xff\xff\xff\xff'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x04'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00')

    assert sc_compiled_synthdef == test_compiled_synthdef
    assert py_compiled_synthdef == test_compiled_synthdef
Esempio n. 9
0
def test_SynthDefCompiler_parameters_01():

    sc_synthdef = synthdeftools.SuperColliderSynthDef(
        'test', r'''
        | freq = 440 |
        Out.ar(0, SinOsc.ar(freq: freq))
        ''')
    sc_compiled_synthdef = sc_synthdef.compile()

    with synthdeftools.SynthDefBuilder(freq=440) as builder:
        sine = ugentools.SinOsc.ar(frequency=builder['freq'])
        ugentools.Out.ar(bus=0, source=sine)
    py_synthdef = builder.build('test')
    py_compiled_synthdef = py_synthdef.compile()

    assert py_synthdef.indexed_parameters == ((
        0,
        synthdeftools.Parameter(
            name='freq',
            parameter_rate=synthdeftools.ParameterRate.CONTROL,
            value=440.0,
        ),
    ), )

    test_compiled_synthdef = bytes(
        b'SCgf'
        b'\x00\x00\x00\x02'
        b'\x00\x01'
        b'\x04test'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x01'
        b'C\xdc\x00\x00'
        b'\x00\x00\x00\x01'
        b'\x04freq'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x03'
        b'\x07Control'
        b'\x01'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x01'
        b'\x00\x00'
        b'\x01'
        b'\x06SinOsc'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x01'
        b'\x00\x00'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x00'
        b'\x02'
        b'\x03Out'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x00'
        b'\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x00'
        b'\x00\x00', )

    assert sc_compiled_synthdef == test_compiled_synthdef
    assert py_compiled_synthdef == test_compiled_synthdef
Esempio n. 10
0
def test_SynthDefCompiler_parameters_04():
    r'''Different calculation rates.'''

    sc_synthdef = synthdeftools.SuperColliderSynthDef(
        'trigTest', r'''
        |
            a_phase = 0.0,
            freq = 440,
            i_decay_time = 1.0,
            t_trig_a = 0,
            t_trig_b = 0
        |
        var decay = Decay2.kr([t_trig_a, t_trig_b], 0.005, i_decay_time);
        Out.ar(0, SinOsc.ar(freq, a_phase) * decay);
        ''')
    sc_compiled_synthdef = bytes(sc_synthdef.compile())

    builder = synthdeftools.SynthDefBuilder(
        a_phase=0.0,
        freq=440,
        i_decay_time=1.0,
        t_trig_a=0,
        t_trig_b=0,
    )
    with builder:
        decay = ugentools.Decay2.kr(
            source=(builder['t_trig_a'], builder['t_trig_b']),
            attack_time=0.005,
            decay_time=builder['i_decay_time'],
        )
        sin_osc = ugentools.SinOsc.ar(
            frequency=builder['freq'],
            phase=builder['a_phase'],
        )
        enveloped_sin_osc = sin_osc * decay
        ugentools.Out.ar(
            bus=0,
            source=enveloped_sin_osc,
        )
    py_synthdef = builder.build('trigTest')
    py_compiled_synthdef = py_synthdef.compile()

    assert py_synthdef.indexed_parameters == (
        (
            3,
            synthdeftools.Parameter(
                name='a_phase',
                parameter_rate=synthdeftools.ParameterRate.AUDIO,
                value=0.0,
            ),
        ),
        (
            4,
            synthdeftools.Parameter(
                name='freq',
                parameter_rate=synthdeftools.ParameterRate.CONTROL,
                value=440.0,
            ),
        ),
        (
            0,
            synthdeftools.Parameter(
                name='i_decay_time',
                parameter_rate=synthdeftools.ParameterRate.SCALAR,
                value=1.0,
            ),
        ),
        (
            1,
            synthdeftools.Parameter(
                name='t_trig_a',
                parameter_rate=synthdeftools.ParameterRate.TRIGGER,
                value=0.0,
            ),
        ),
        (
            2,
            synthdeftools.Parameter(
                name='t_trig_b',
                parameter_rate=synthdeftools.ParameterRate.TRIGGER,
                value=0.0,
            ),
        ),
    )

    test_compiled_synthdef = bytes(b'SCgf'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x01'
                                   b'\x08trigTest'
                                   b'\x00\x00\x00\x02'
                                   b';\xa3\xd7\n'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x05'
                                   b'?\x80\x00\x00'  # i_decay_time
                                   b'\x00\x00\x00\x00'  # t_trig_a
                                   b'\x00\x00\x00\x00'  # t_trig_b
                                   b'\x00\x00\x00\x00'  # a_phase
                                   b'C\xdc\x00\x00'  # freq
                                   b'\x00\x00\x00\x05'
                                   b'\x07a_phase'
                                   b'\x00\x00\x00\x03'
                                   b'\x04freq'
                                   b'\x00\x00\x00\x04'
                                   b'\x0ci_decay_time'
                                   b'\x00\x00\x00\x00'
                                   b'\x08t_trig_a'
                                   b'\x00\x00\x00\x01'
                                   b'\x08t_trig_b'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\n'
                                   b'\x07Control'
                                   b'\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00'
                                   b'\x00'
                                   b'\x0bTrigControl'
                                   b'\x01'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x01'
                                   b'\x01'
                                   b'\x01'
                                   b'\x06Decay2'
                                   b'\x01'
                                   b'\x00\x00\x00\x03'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00\x00\x00'
                                   b'\xff\xff\xff\xff'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x01'
                                   b'\x06Decay2'
                                   b'\x01'
                                   b'\x00\x00\x00\x03'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00\x00\x01'
                                   b'\xff\xff\xff\xff'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x00'
                                   b'\x01'
                                   b'\x0cAudioControl'
                                   b'\x02'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x03'
                                   b'\x02'
                                   b'\x07Control'
                                   b'\x01'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x04'
                                   b'\x01'
                                   b'\x06SinOsc'
                                   b'\x02'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00'
                                   b'\x00\x00\x00\x05'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x04'
                                   b'\x00\x00\x00\x00'
                                   b'\x02'
                                   b'\x0cBinaryOpUGen'
                                   b'\x02'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x02'
                                   b'\x00\x00\x00\x06'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x00'
                                   b'\x02'
                                   b'\x0cBinaryOpUGen'
                                   b'\x02'
                                   b'\x00\x00\x00\x02'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x02'
                                   b'\x00\x00\x00\x06'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x03'
                                   b'\x00\x00\x00\x00'
                                   b'\x02'
                                   b'\x03Out'
                                   b'\x02'
                                   b'\x00\x00\x00\x03'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00'
                                   b'\xff\xff\xff\xff'
                                   b'\x00\x00\x00\x01'
                                   b'\x00\x00\x00\x07'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00\x00\x08'
                                   b'\x00\x00\x00\x00'
                                   b'\x00\x00')

    assert sc_compiled_synthdef == test_compiled_synthdef
    assert py_compiled_synthdef == test_compiled_synthdef
Esempio n. 11
0
def test_SynthDefCompiler_parameters_03():
    r'''Multiple parameters, including unused parameters.
    '''

    sc_synthdef = synthdeftools.SuperColliderSynthDef(
        'test', r'''
        | damping=0.1, delay_time=1.0, room_size=0.9 |
        Out.ar(0, DelayC.ar(In.ar(0), 5.0, delay_time))
        ''')
    sc_compiled_synthdef = sc_synthdef.compile()

    builder = synthdeftools.SynthDefBuilder(
        damping=0.1,
        delay_time=1.0,
        room_size=0.9,
    )
    with builder:
        microphone = ugentools.In.ar(bus=0)
        delay = ugentools.DelayC.ar(
            source=microphone,
            maximum_delay_time=5.0,
            delay_time=builder['delay_time'],
        )
        ugentools.Out.ar(bus=0, source=delay)
    py_synthdef = builder.build('test')
    py_compiled_synthdef = py_synthdef.compile()

    assert py_synthdef.indexed_parameters == (
        (
            0,
            synthdeftools.Parameter(
                name='damping',
                parameter_rate=synthdeftools.ParameterRate.CONTROL,
                value=0.1,
            ),
        ),
        (
            1,
            synthdeftools.Parameter(
                name='delay_time',
                parameter_rate=synthdeftools.ParameterRate.CONTROL,
                value=1.0,
            ),
        ),
        (
            2,
            synthdeftools.Parameter(
                name='room_size',
                parameter_rate=synthdeftools.ParameterRate.CONTROL,
                value=0.9,
            ),
        ),
    )

    test_compiled_synthdef = bytes(
        b'SCgf'
        b'\x00\x00\x00\x02'
        b'\x00\x01'
        b'\x04test'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x00'
        b'@\xa0\x00\x00'
        b'\x00\x00\x00\x03'
        b'=\xcc\xcc\xcd'
        b'?\x80\x00\x00'
        b'?fff'
        b'\x00\x00\x00\x03'
        b'\x07damping'
        b'\x00\x00\x00\x00'
        b'\ndelay_time'
        b'\x00\x00\x00\x01'
        b'\x09room_size'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x04'
        b'\x07Control'
        b'\x01'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x03'
        b'\x00\x00'
        b'\x01'
        b'\x01'
        b'\x01'
        b'\x02In'
        b'\x02'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x01'
        b'\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x00'
        b'\x02'
        b'\x06DelayC'
        b'\x02'
        b'\x00\x00\x00\x03'
        b'\x00\x00\x00\x01'
        b'\x00\x00'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x01'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x01'
        b'\x02'
        b'\x03Out'
        b'\x02'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x00'
        b'\x00\x00'
        b'\xff\xff\xff\xff'
        b'\x00\x00\x00\x00'
        b'\x00\x00\x00\x02'
        b'\x00\x00\x00\x00'
        b'\x00\x00', )

    assert sc_compiled_synthdef == test_compiled_synthdef
    assert py_compiled_synthdef == test_compiled_synthdef
Esempio n. 12
0
    def test_02(self):

        with synthdeftools.SynthDefBuilder() as builder:
            source = ugentools.PinkNoise.ar()
            local_buf = ugentools.LocalBuf(2048)
            pv_chain = ugentools.FFT(buffer_id=local_buf, source=source)
            pv_chain_a = ugentools.PV_BinScramble(pv_chain=pv_chain)
            pv_chain_b = ugentools.PV_MagFreeze(pv_chain=pv_chain)
            pv_chain = ugentools.PV_MagMul(pv_chain_a, pv_chain_b)
            ifft = ugentools.IFFT.ar(pv_chain=pv_chain)
            ugentools.Out.ar(bus=0, source=ifft)
        py_synthdef = builder.build('PVCopyTest')
        py_compiled_synthdef = py_synthdef.compile()

        assert tuple(repr(_) for _ in py_synthdef.ugens) == (
            'PinkNoise.ar()',
            'MaxLocalBufs.ir()',
            'LocalBuf.ir()',
            'FFT.kr()',
            'BufFrames.ir()',
            'LocalBuf.ir()',
            'PV_Copy.kr()',
            'PV_BinScramble.kr()',
            'PV_MagFreeze.kr()',
            'PV_MagMul.kr()',
            'IFFT.ar()',
            'Out.ar()',
        )

        sc_synthdef = synthdeftools.SuperColliderSynthDef(
            'PVCopyTest', r'''
            var source, pv_chain, pv_chain_a, pv_chain_b, ifft, out;
            source = PinkNoise.ar();
            pv_chain = FFT(LocalBuf(2048), source);
            pv_chain_a = PV_BinScramble(pv_chain);
            pv_chain_b = PV_MagFreeze(pv_chain);
            pv_chain = PV_MagMul(pv_chain_a, pv_chain_b);
            ifft = IFFT.ar(pv_chain);
            out = Out.ar(0, ifft);
            ''')
        sc_compiled_synthdef = bytes(sc_synthdef.compile())
        sc_synthdef = synthdeftools.SynthDefDecompiler.decompile_synthdef(
            sc_compiled_synthdef)

        assert tuple(repr(_) for _ in sc_synthdef.ugens) == (
            'PinkNoise.ar()',
            'MaxLocalBufs.ir()',
            'LocalBuf.ir()',
            'FFT.kr()',
            'BufFrames.ir()',
            'LocalBuf.ir()',
            'PV_Copy.kr()',
            'PV_BinScramble.kr()',
            'PV_MagFreeze.kr()',
            'PV_MagMul.kr()',
            'IFFT.ar()',
            'Out.ar()',
        )

        assert str(py_synthdef) == stringtools.normalize(r'''
            SynthDef PVCopyTest {
                const_0:2.0 -> 1_MaxLocalBufs[0:maximum]
                const_1:1.0 -> 2_LocalBuf[0:channel_count]
                const_2:2048.0 -> 2_LocalBuf[1:frame_count]
                1_MaxLocalBufs[0] -> 2_LocalBuf[2]
                2_LocalBuf[0] -> 3_FFT[0:buffer_id]
                0_PinkNoise[0] -> 3_FFT[1:source]
                const_3:0.5 -> 3_FFT[2:hop]
                const_4:0.0 -> 3_FFT[3:window_type]
                const_1:1.0 -> 3_FFT[4:active]
                const_4:0.0 -> 3_FFT[5:window_size]
                2_LocalBuf[0] -> 4_BufFrames[0:buffer_id]
                const_1:1.0 -> 5_LocalBuf[0:channel_count]
                4_BufFrames[0] -> 5_LocalBuf[1:frame_count]
                1_MaxLocalBufs[0] -> 5_LocalBuf[2]
                3_FFT[0] -> 6_PV_Copy[0:pv_chain_a]
                5_LocalBuf[0] -> 6_PV_Copy[1:pv_chain_b]
                6_PV_Copy[0] -> 7_PV_BinScramble[0:pv_chain]
                const_4:0.0 -> 7_PV_BinScramble[1:wipe]
                const_5:0.2 -> 7_PV_BinScramble[2:width]
                const_4:0.0 -> 7_PV_BinScramble[3:trigger]
                3_FFT[0] -> 8_PV_MagFreeze[0:pv_chain]
                const_4:0.0 -> 8_PV_MagFreeze[1:freeze]
                7_PV_BinScramble[0] -> 9_PV_MagMul[0:pv_chain_a]
                8_PV_MagFreeze[0] -> 9_PV_MagMul[1:pv_chain_b]
                9_PV_MagMul[0] -> 10_IFFT[0:pv_chain]
                const_4:0.0 -> 10_IFFT[1:window_type]
                const_4:0.0 -> 10_IFFT[2:window_size]
                const_4:0.0 -> 11_Out[0:bus]
                10_IFFT[0] -> 11_Out[1:source]
            }
            ''')
        assert str(sc_synthdef) == stringtools.normalize(r'''
            SynthDef PVCopyTest {
                const_0:2.0 -> 1_MaxLocalBufs[0:maximum]
                const_1:1.0 -> 2_LocalBuf[0:channel_count]
                const_2:2048.0 -> 2_LocalBuf[1:frame_count]
                1_MaxLocalBufs[0] -> 2_LocalBuf[2]
                2_LocalBuf[0] -> 3_FFT[0:buffer_id]
                0_PinkNoise[0] -> 3_FFT[1:source]
                const_3:0.5 -> 3_FFT[2:hop]
                const_4:0.0 -> 3_FFT[3:window_type]
                const_1:1.0 -> 3_FFT[4:active]
                const_4:0.0 -> 3_FFT[5:window_size]
                2_LocalBuf[0] -> 4_BufFrames[0:buffer_id]
                const_1:1.0 -> 5_LocalBuf[0:channel_count]
                4_BufFrames[0] -> 5_LocalBuf[1:frame_count]
                1_MaxLocalBufs[0] -> 5_LocalBuf[2]
                3_FFT[0] -> 6_PV_Copy[0:pv_chain_a]
                5_LocalBuf[0] -> 6_PV_Copy[1:pv_chain_b]
                6_PV_Copy[0] -> 7_PV_BinScramble[0:pv_chain]
                const_4:0.0 -> 7_PV_BinScramble[1:wipe]
                const_5:0.20000000298 -> 7_PV_BinScramble[2:width]
                const_4:0.0 -> 7_PV_BinScramble[3:trigger]
                3_FFT[0] -> 8_PV_MagFreeze[0:pv_chain]
                const_4:0.0 -> 8_PV_MagFreeze[1:freeze]
                7_PV_BinScramble[0] -> 9_PV_MagMul[0:pv_chain_a]
                8_PV_MagFreeze[0] -> 9_PV_MagMul[1:pv_chain_b]
                9_PV_MagMul[0] -> 10_IFFT[0:pv_chain]
                const_4:0.0 -> 10_IFFT[1:window_type]
                const_4:0.0 -> 10_IFFT[2:window_size]
                const_4:0.0 -> 11_Out[0:bus]
                10_IFFT[0] -> 11_Out[1:source]
            }
            ''')
        assert tuple(repr(_) for _ in sc_synthdef.ugens) == \
            tuple(repr(_) for _ in py_synthdef.ugens)

        test_compiled_synthdef = bytes(
            b'SCgf'
            b'\x00\x00\x00\x02'
            b'\x00\x01'
            b'\nPVCopyTest'
            b'\x00\x00\x00\x06'
            b'@\x00\x00\x00'
            b'?\x80\x00\x00'
            b'E\x00\x00\x00'
            b'?\x00\x00\x00'
            b'\x00\x00\x00\x00'
            b'>L\xcc\xcd'
            b'\x00\x00\x00\x00'
            b'\x00\x00\x00\x00'
            b'\x00\x00\x00\x0c'
            b'\tPinkNoise'
            b'\x02'
            b'\x00\x00\x00\x00'
            b'\x00\x00\x00\x01'
            b'\x00\x00'
            b'\x02'
            b'\x0cMaxLocalBufs'
            b'\x00'
            b'\x00\x00\x00\x01'
            b'\x00\x00\x00\x01'
            b'\x00\x00'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x00'
            b'\x00'
            b'\x08LocalBuf'
            b'\x00'
            b'\x00\x00\x00\x03'
            b'\x00\x00\x00\x01'
            b'\x00\x00'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x01'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x02'
            b'\x00\x00\x00\x01'
            b'\x00\x00\x00\x00'
            b'\x00'
            b'\x03FFT'
            b'\x01'
            b'\x00\x00\x00\x06'
            b'\x00\x00\x00\x01'
            b'\x00\x00'
            b'\x00\x00\x00\x02'
            b'\x00\x00\x00\x00'
            b'\x00\x00\x00\x00'
            b'\x00\x00\x00\x00'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x03'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x04'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x01'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x04'
            b'\x01'
            b'\tBufFrames'
            b'\x00'
            b'\x00\x00\x00\x01'
            b'\x00\x00\x00\x01'
            b'\x00\x00'
            b'\x00\x00\x00\x02'
            b'\x00\x00\x00\x00'
            b'\x00'
            b'\x08LocalBuf'
            b'\x00'
            b'\x00\x00\x00\x03'
            b'\x00\x00\x00\x01'
            b'\x00\x00'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x01'
            b'\x00\x00\x00\x04'
            b'\x00\x00\x00\x00'
            b'\x00\x00\x00\x01'
            b'\x00\x00\x00\x00'
            b'\x00'
            b'\x07PV_Copy'
            b'\x01'
            b'\x00\x00\x00\x02'
            b'\x00\x00\x00\x01'
            b'\x00\x00'
            b'\x00\x00\x00\x03'
            b'\x00\x00\x00\x00'
            b'\x00\x00\x00\x05'
            b'\x00\x00\x00\x00'
            b'\x01'
            b'\x0ePV_BinScramble'
            b'\x01'
            b'\x00\x00\x00\x04'
            b'\x00\x00\x00\x01'
            b'\x00\x00'
            b'\x00\x00\x00\x06'
            b'\x00\x00\x00\x00'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x04'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x05'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x04'
            b'\x01'
            b'\x0cPV_MagFreeze'
            b'\x01'
            b'\x00\x00\x00\x02'
            b'\x00\x00\x00\x01'
            b'\x00\x00'
            b'\x00\x00\x00\x03'
            b'\x00\x00\x00\x00'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x04'
            b'\x01'
            b'\tPV_MagMul'
            b'\x01'
            b'\x00\x00\x00\x02'
            b'\x00\x00\x00\x01'
            b'\x00\x00'
            b'\x00\x00\x00\x07'
            b'\x00\x00\x00\x00'
            b'\x00\x00\x00\x08'
            b'\x00\x00\x00\x00'
            b'\x01'
            b'\x04IFFT'
            b'\x02'
            b'\x00\x00\x00\x03'
            b'\x00\x00\x00\x01'
            b'\x00\x00'
            b'\x00\x00\x00\t'
            b'\x00\x00\x00\x00'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x04'
            b'\xff\xff\xff\xff'
            b'\x00\x00\x00\x04'
            b'\x02'
            b'\x03Out'
            b'\x02'
            b'\x00\x00\x00\x02'
            b'\x00\x00\x00\x00'
            b'\x00\x00'
            b'\xff\xff\xff\xff\x00\x00\x00\x04\x00\x00\x00\n\x00\x00\x00\x00'
            b'\x00\x00')

        assert sc_compiled_synthdef == test_compiled_synthdef
        assert py_compiled_synthdef == test_compiled_synthdef