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
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
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
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
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
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
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
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
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
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
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