예제 #1
0
 def test_03(self):
     session = nonrealtimetools.Session()
     synthdef = self.build_duration_synthdef()
     with session.at(0):
         session.add_synth(
             duration=1,
             synthdef=self.build_duration_synthdef(),
         )
     assert session.to_osc_bundles() == [
         osctools.OscBundle(
             timestamp=0.0,
             contents=(
                 osctools.OscMessage('/d_recv',
                                     bytearray(synthdef.compile())),
                 osctools.OscMessage('/s_new',
                                     '448a8d487adfc99ec697033edc2a1227',
                                     1000, 0, 0),
             )),
         osctools.OscBundle(timestamp=1.0,
                            contents=(
                                osctools.OscMessage('/n_free', 1000),
                                osctools.OscMessage(0),
                            )),
     ]
     exit_code, _ = session.render(
         self.output_filepath,
         output_bus_channel_count=1,
     )
     self.assert_ok(exit_code, 1., 44100, 1)
     soundfile = soundfiletools.SoundFile(self.output_filepath)
     for i in range(1, 100):
         value = float(i) / 100
         assert self.round(soundfile.at_percent(value)[0]) == value
예제 #2
0
 def test_01(self):
     session = nonrealtimetools.Session()
     bus_one = session.add_bus()
     bus_two = session.add_bus()
     with session.at(0):
         bus_one.set_(10)
     with session.at(2):
         bus_one.set_(20)
         bus_two.set_(30)
     with session.at(3):
         bus_two.set_(40)
     assert session.to_osc_bundles() == [
         osctools.OscBundle(
             timestamp=0.0,
             contents=(
                 osctools.OscMessage('/c_set', 0, 10.0),
                 )
             ),
         osctools.OscBundle(
             timestamp=2.0,
             contents=(
                 osctools.OscMessage('/c_set', 0, 20.0, 1, 30.0),
                 )
             ),
         osctools.OscBundle(
             timestamp=3.0,
             contents=(
                 osctools.OscMessage('/c_set', 1, 40.0),
                 osctools.OscMessage(0),
                 )
             )
         ]
예제 #3
0
 def send(self, message):
     from supriya.tools import osctools
     prototype = (
         str,
         tuple,
         osctools.OscMessage,
         osctools.OscBundle,
         )
     assert isinstance(message, prototype)
     if isinstance(message, str):
         message = osctools.OscMessage(message)
     elif isinstance(message, tuple):
         assert len(message)
         message = osctools.OscMessage(
             message[0],
             *message[1:]
             )
     if self.debug_osc:
         as_list = message.to_list()
         if as_list != [2]:
             print('SEND', message.to_list())
             if self.debug_udp:
                 for line in str(message).splitlines():
                     print('    ' + line)
     datagram = message.to_datagram()
     self.socket_instance.sendto(
         datagram,
         (self.server.ip_address, self.server.port),
         )
예제 #4
0
 def test_04(self):
     session = nonrealtimetools.Session()
     with session.at(0):
         session.add_synth(
             duration=1,
             synthdef=self.build_gate_synthdef(),
         )
     assert session.to_osc_bundles(duration=2) == [
         osctools.OscBundle(
             timestamp=0.0,
             contents=(
                 osctools.OscMessage(
                     '/d_recv',
                     bytearray(
                         b'SCgf\x00\x00\x00\x02\x00\x01 fc663c6d1f8badaed1bd3e25cf2220f0\x00\x00\x00\x08?\x80\x00\x00\x00\x00\x00\x00@\x00\x00\x00\xc2\xc6\x00\x00<#\xd7\n@\xa0\x00\x00\xc0\x80\x00\x00C\xdc\x00\x00\x00\x00\x00\x01?\x80\x00\x00\x00\x00\x00\x01\x04gate\x00\x00\x00\x00\x00\x00\x00\x05\x07Control\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x01\x06EnvGen\x02\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x01\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x01\xff\xff\xff\xff\x00\x00\x00\x01\xff\xff\xff\xff\x00\x00\x00\x02\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x03\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x04\xff\xff\xff\xff\x00\x00\x00\x05\xff\xff\xff\xff\x00\x00\x00\x06\xff\xff\xff\xff\x00\x00\x00\x01\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x05\xff\xff\xff\xff\x00\x00\x00\x06\x02\x03Saw\x02\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\xff\xff\xff\xff\x00\x00\x00\x07\x02\x0cBinaryOpUGen\x02\x00\x00\x00\x02\x00\x00\x00\x01\x00\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x02\x03Out\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00'
                     )),
                 osctools.OscMessage('/s_new',
                                     'fc663c6d1f8badaed1bd3e25cf2220f0',
                                     1000, 0, 0),
             )),
         osctools.OscBundle(timestamp=1.0,
                            contents=(osctools.OscMessage(
                                '/n_set', 1000, 'gate', 0), )),
         osctools.OscBundle(timestamp=2.0,
                            contents=(osctools.OscMessage(0), )),
     ]
예제 #5
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     buffer_id = int(self.buffer_id)
     contents = [
         request_id,
         buffer_id,
         self.command_name,
         self.flags,
     ]
     if self.command_name in (
             'cheby',
             'sine1',
     ):
         coefficients = self.amplitudes
     elif self.command_name == 'sine2':
         coefficients = zip(
             self.amplitudes,
             self.frequencies,
         )
         coefficients = tuple(coefficients)
     elif self.command_name == 'sine3':
         coefficients = zip(
             self.amplitudes,
             self.frequencies,
             self.phases,
         )
         coefficients = tuple(coefficients)
     coefficients = sequencetools.flatten_sequence(coefficients)
     contents.extend(coefficients)
     message = osctools.OscMessage(*contents)
     return message
예제 #6
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     message = osctools.OscMessage(request_id, )
     return message
예제 #7
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     frame_count = self.frame_count
     if frame_count is None:
         frame_count = -1
     source_starting_frame = self.source_starting_frame
     if source_starting_frame is None:
         source_starting_frame = 0
     target_starting_frame = self.target_starting_frame
     if target_starting_frame is None:
         target_starting_frame = 0
     contents = [
         request_id,
         self.target_buffer_id,
         'copy',
         target_starting_frame,
         self.source_buffer_id,
         source_starting_frame,
         frame_count,
     ]
     message = osctools.OscMessage(*contents)
     return message
예제 #8
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     contents = [request_id]
     message = osctools.OscMessage(*contents)
     return message
예제 #9
0
 def _coerce_completion_message_input(self, message):
     if message is None:
         return message
     elif isinstance(message, (osctools.OscMessage, osctools.OscBundle)):
         return message
     elif isinstance(message, Request):
         return message.to_osc_message()
     elif isinstance(message, collections.Sequence):
         return osctools.OscMessage(*message)
     raise ValueError(message)
예제 #10
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     contents = [request_id]
     if self.index_value_pairs:
         for pair in self.index_value_pairs:
             contents.extend(pair)
     message = osctools.OscMessage(*contents)
     return message
예제 #11
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     contents = [request_id]
     if self.node_id_pairs:
         for node_id_pair in self.node_id_pairs:
             contents.append(node_id_pair.node_id)
             contents.append(node_id_pair.target_node_id)
     message = osctools.OscMessage(*contents)
     return message
예제 #12
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     contents = [
         request_id,
     ]
     for buffer_id in self.buffer_ids:
         contents.append(buffer_id)
     message = osctools.OscMessage(*contents)
     return message
예제 #13
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     osc_status = int(self.osc_status)
     assert 0 <= osc_status <= 4
     message = osctools.OscMessage(
         request_id,
         osc_status,
     )
     return message
예제 #14
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     node_id = int(self.node_id)
     contents = []
     for name, bus in sorted(self._kwargs.items()):
         contents.append(name)
         contents.append(int(bus))
     message = osctools.OscMessage(request_id, node_id, *contents)
     return message
예제 #15
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     contents = [request_id]
     if self.index_count_value_triples:
         for index, count, value in self.index_count_value_triples:
             contents.append(index)
             contents.append(count)
             contents.append(value)
     message = osctools.OscMessage(*contents)
     return message
예제 #16
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     node_id = int(self.node_id)
     include_controls = int(self.include_controls)
     message = osctools.OscMessage(
         request_id,
         node_id,
         include_controls,
     )
     return message
예제 #17
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     buffer_id = int(self.buffer_id)
     contents = [
         request_id,
         buffer_id,
     ]
     self._coerce_completion_message_output(contents)
     message = osctools.OscMessage(*contents)
     return message
예제 #18
0
 def to_osc_message(self, with_textual_osc_command=False):
     from supriya.tools import synthdeftools
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     synthdef = self.synthdef
     if isinstance(synthdef, synthdeftools.SynthDef):
         synthdef = synthdef.actual_name
     message = osctools.OscMessage(
         request_id,
         synthdef,
     )
     return message
예제 #19
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     node_id = int(self.node_id)
     contents = [
         request_id,
         node_id,
     ]
     for key, value in sorted(self._kwargs.items()):
         contents.append(key)
         contents.append(value)
     message = osctools.OscMessage(*contents)
     return message
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     contents = [
         request_id,
         self.directory_path,
         ]
     if self.completion_message:
         completion_message = self.completion_message.to_datagram()
         completion_message = bytearray(completion_message)
         contents.append(completion_message)
     message = osctools.OscMessage(*contents)
     return message
예제 #21
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     buffer_id = int(self.buffer_id)
     contents = [
         request_id,
         buffer_id,
     ]
     if self.indices:
         for index in self.indices:
             contents.append(index)
     message = osctools.OscMessage(*contents)
     return message
예제 #22
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     add_action = int(self.add_action)
     node_id = int(self.node_id)
     target_node_id = int(self.target_node_id)
     message = osctools.OscMessage(
         request_id,
         node_id,
         add_action,
         target_node_id,
     )
     return message
예제 #23
0
파일: Session.py 프로젝트: lisongx/supriya
 def _to_non_xrefd_osc_bundles(
     self,
     duration=None,
 ):
     id_mapping = self._build_id_mapping()
     if self.duration == float('inf'):
         assert duration is not None and 0 < duration < float('inf')
     duration = duration or self.duration
     offsets = self.offsets[1:]
     if duration not in offsets:
         offsets.append(duration)
         offsets.sort()
     buffer_settings = self._collect_buffer_settings(id_mapping, )
     bus_settings = self._collect_bus_settings(id_mapping)
     is_last_offset = False
     osc_bundles = []
     buffer_open_states = {}
     visited_synthdefs = set()
     for offset in offsets:
         osc_messages = []
         if offset == duration:
             is_last_offset = True
         requests = self._collect_requests_at_offset(
             buffer_open_states,
             buffer_settings,
             bus_settings,
             duration,
             id_mapping,
             is_last_offset,
             offset,
             visited_synthdefs,
         )
         osc_messages.extend(_.to_osc_message(True) for _ in requests)
         if is_last_offset:
             osc_messages.append(osctools.OscMessage(0))
         if osc_messages:
             osc_bundle = osctools.OscBundle(
                 timestamp=float(offset),
                 contents=osc_messages,
             )
             osc_bundles.append(osc_bundle)
         if is_last_offset:
             break
     return osc_bundles
예제 #24
0
 def to_osc_message(self, with_textual_osc_command=False):
     from supriya.tools import synthdeftools
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     compiled_synthdefs = synthdeftools.SynthDefCompiler.compile_synthdefs(
         self.synthdefs, )
     compiled_synthdefs = bytearray(compiled_synthdefs)
     contents = [
         request_id,
         compiled_synthdefs,
     ]
     if self.completion_message:
         completion_message = self.completion_message.to_datagram()
         completion_message = bytearray(completion_message)
         contents.append(completion_message)
     message = osctools.OscMessage(*contents)
     return message
예제 #25
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     buffer_id = int(self.buffer_id)
     contents = [
         request_id,
         buffer_id,
     ]
     if self.index_values_pairs:
         for index, values in self.index_values_pairs:
             if not values:
                 continue
             contents.append(index)
             contents.append(len(values))
             for value in values:
                 contents.append(value)
     message = osctools.OscMessage(*contents)
     return message
예제 #26
0
 def to_osc_message(self, with_textual_osc_command=False):
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     buffer_id = int(self.buffer_id)
     header_format = self.header_format.name.lower()
     sample_format = self.sample_format.name.lower()
     leave_open = int(bool(self.leave_open))
     contents = [
         request_id,
         buffer_id,
         self.file_path,
         header_format,
         sample_format,
         self.frame_count,
         self.starting_frame,
         leave_open,
     ]
     self._coerce_completion_message_output(contents)
     message = osctools.OscMessage(*contents)
     return message
예제 #27
0
 def to_osc_message(self, with_textual_osc_command=False):
     from supriya.tools import synthdeftools
     if with_textual_osc_command:
         request_id = self.request_command
     else:
         request_id = int(self.request_id)
     synthdef = self.synthdef
     if isinstance(synthdef, synthdeftools.SynthDef):
         synthdef = synthdef.actual_name
     node_id = int(self.node_id)
     add_action = int(self.add_action)
     target_node_id = int(self.target_node_id)
     contents = [
         request_id,
         synthdef,
         node_id,
         add_action,
         target_node_id,
         ]
     for key, value in sorted(self._kwargs.items()):
         contents.append(key)
         contents.append(value)
     message = osctools.OscMessage(*contents)
     return message
예제 #28
0
    def test_01(self):

        group_a = servertools.Group().allocate()
        group_b = servertools.Group().allocate()

        synth_a = servertools.Synth(synthdefs.test)
        synth_b = servertools.Synth(synthdefs.test)

        group_a.append(synth_a)
        group_b.append(synth_b)

        remote_state = str(self.server.query_remote_nodes())
        assert systemtools.TestManager.compare(
            remote_state,
            '''
            NODE TREE 0 group
                1 group
                    1001 group
                        1003 test
                    1000 group
                        1002 test
            ''',
            ), remote_state
        local_state = str(self.server.query_local_nodes())
        assert local_state == remote_state

        osc_message = osctools.OscMessage(
            '/n_after',
            synth_b.node_id,
            synth_a.node_id,
            )
        self.server.send_message(osc_message)

        remote_state = str(self.server.query_remote_nodes())
        assert systemtools.TestManager.compare(
            remote_state,
            '''
            NODE TREE 0 group
                1 group
                    1001 group
                    1000 group
                        1002 test
                        1003 test
            ''',
            ), remote_state
        local_state = str(self.server.query_local_nodes())
        assert local_state == remote_state

        osc_message = osctools.OscMessage(
            '/n_order',
            0,
            group_b.node_id,
            synth_b.node_id,
            synth_a.node_id,
            )
        self.server.send_message(osc_message)

        remote_state = str(self.server.query_remote_nodes())
        assert systemtools.TestManager.compare(
            remote_state,
            '''
            NODE TREE 0 group
                1 group
                    1001 group
                        1003 test
                        1002 test
                    1000 group
            ''',
            ), remote_state
        local_state = str(self.server.query_local_nodes())
        assert local_state == remote_state
예제 #29
0
 def to_osc_message(self, with_textual_osc_command=False):
     contents = self._get_osc_message_contents(with_textual_osc_command)
     self._coerce_completion_message_output(contents)
     message = osctools.OscMessage(*contents)
     return message