Exemple #1
0
    async def setup(self) -> None:
        # Make sure the processor is started without a plugin_pipe_path (i.e. not getting
        # initialized with an old path from the previous incarnation.
        params = node_parameters_pb2.NodeParameters()
        plugin_params = params.Extensions[
            processor_plugin_pb2.processor_plugin_parameters]
        plugin_params.plugin_pipe_path = ''
        self.set_parameters(params)

        await super().setup()

        self.__plugin_host = await self.realm.get_plugin_host()

        spec = plugin_host_pb2.PluginInstanceSpec()
        spec.realm = self.realm.name
        spec.node_id = self.id
        spec.node_description.CopyFrom(self.description)
        if self.initial_state is not None:
            spec.initial_state.CopyFrom(self.initial_state)

        create_plugin_request = plugin_host_pb2.CreatePluginRequest(
            spec=spec, callback_address=self.realm.callback_address)
        create_plugin_response = plugin_host_pb2.CreatePluginResponse()
        await self.__plugin_host.call('CREATE_PLUGIN', create_plugin_request,
                                      create_plugin_response)
        self.__plugin_pipe_path = create_plugin_response.pipe_path

        params = node_parameters_pb2.NodeParameters()
        plugin_params = params.Extensions[
            processor_plugin_pb2.processor_plugin_parameters]
        plugin_params.plugin_pipe_path = self.__plugin_pipe_path
        self.set_parameters(params)
Exemple #2
0
    def __init__(
            self,
            *,
            host_system: host_system_lib.HostSystem,
            description: node_db.NodeDescription,
            id: str,  # pylint: disable=redefined-builtin
            name: Optional[str] = None,
            initial_state: Optional[audioproc.PluginState] = None) -> None:
        assert isinstance(description, node_db.NodeDescription), description

        self._host_system = host_system
        self.description = node_db.NodeDescription()
        self.description.CopyFrom(description)
        self.name = name or type(self).__name__
        self.id = id
        self.initial_state = initial_state

        self.__realm = None  # type: realm_lib.PyRealm
        self.broken = False
        self.ports = []  # type: List[Port]
        self.inputs = {}  # type: Dict[str, InputPort]
        self.outputs = {}  # type: Dict[str, OutputPort]

        self.__control_values = {
        }  # type: Dict[str, control_value.PyControlValue]
        self.__port_properties = {
        }  # type: Dict[str, node_port_properties_pb2.NodePortProperties]
        self.__parameters = node_parameters_pb2.NodeParameters()

        for port_desc in self.description.ports:
            self.__add_port(self.__create_port(port_desc))
Exemple #3
0
    def test_process_block(self):
        self.node_description = self.node_db['builtin://oscilloscope']
        self.create_processor()

        params = node_parameters_pb2.NodeParameters()
        spec = params.Extensions[processor_pb2.oscilloscope_spec]
        spec.foo = 1
        self.processor.set_parameters(params)

        self.process_block()
    def test_process_block(self):
        self.node_description = self.node_db['builtin://midi-looper']
        self.create_processor()

        params = node_parameters_pb2.NodeParameters()
        spec = params.Extensions[processor_pb2.midi_looper_spec]
        spec.duration.numerator = 8
        spec.duration.denominator = 4
        self.processor.set_parameters(params)

        self.process_block()
    def test_process_block(self):
        self.node_description = self.node_db['builtin://midi-velocity-mapper']
        self.create_processor()

        params = node_parameters_pb2.NodeParameters()
        spec = params.Extensions[processor_pb2.midi_velocity_mapper_spec]
        spec.transfer_function.input_min = 0.0
        spec.transfer_function.input_max = 127.0
        spec.transfer_function.output_min = 0.0
        spec.transfer_function.output_max = 127.0
        spec.transfer_function.fixed.value = 100.0
        self.processor.set_parameters(params)

        self.process_block()
Exemple #6
0
    def test_process_block(self):
        self.node_description = self.node_db['builtin://metronome']
        self.create_processor()

        params = node_parameters_pb2.NodeParameters()
        spec = params.Extensions[processor_pb2.metronome_spec]
        spec.sample_path = os.path.join(constants.DATA_DIR, 'sounds',
                                        'metronome.wav')
        spec.duration.numerator = 1
        spec.duration.denominator = 4
        self.processor.set_parameters(params)

        self.process_block()
        self.assertBufferIsNotQuiet('out:left')
        self.assertBufferIsNotQuiet('out:right')
    def test_process_block(self):
        self.node_description = self.node_db['builtin://cv-mapper']
        self.create_processor()

        params = node_parameters_pb2.NodeParameters()
        spec = params.Extensions[processor_pb2.cv_mapper_spec]
        spec.transfer_function.input_min = -1.0
        spec.transfer_function.input_max = 1.0
        spec.transfer_function.output_min = -1.0
        spec.transfer_function.output_max = 1.0
        spec.transfer_function.fixed.value = 0.5
        self.processor.set_parameters(params)

        self.process_block()
        self.assertBufferAllEqual('out', 0.5)
Exemple #8
0
    def test_process_block(self):
        self.node_description = self.node_db['builtin://step-sequencer']
        self.node_description.ports.add(
            name='channel1',
            direction=node_db.PortDescription.OUTPUT,
            types=[node_db.PortDescription.ARATE_CONTROL],
        )

        self.create_processor()

        params = node_parameters_pb2.NodeParameters()
        spec = params.Extensions[processor_pb2.step_sequencer_spec]
        spec.num_steps = 4
        spec.time_synched = False
        channel1_spec = spec.channels.add()
        channel1_spec.type = model_pb2.StepSequencerChannel.VALUE
        channel1_spec.step_value.extend([1.0, 0.0, 0.0, 0.0])
        self.processor.set_parameters(params)

        self.fill_buffer('tempo', 8.0)

        self.process_block()
        self.assertBufferIsNotQuiet('channel1')
    def test_process_block(self):
        self.node_description = self.node_db['builtin://midi-cc-to-cv']
        self.node_description.ports.add(
            name='channel1',
            direction=node_db.PortDescription.OUTPUT,
            types=[node_db.PortDescription.ARATE_CONTROL],
        )

        self.create_processor()

        params = node_parameters_pb2.NodeParameters()
        spec = params.Extensions[processor_pb2.midi_cc_to_cv_spec]
        channel_spec = spec.channels.add()
        channel_spec.midi_channel = 1
        channel_spec.midi_controller = 12
        channel_spec.initial_value = 0
        channel_spec.min_value = 1.0
        channel_spec.max_value = 2.0
        channel_spec.log_scale = False
        self.processor.set_parameters(params)

        self.process_block()
        self.assertBufferAllEqual('channel1', 1.0)
Exemple #10
0
 def parameters(self) -> node_parameters_pb2.NodeParameters:
     params = node_parameters_pb2.NodeParameters()
     params.CopyFrom(self.__parameters)
     return params