class FissureVR_Pyro(ControlSurface): def __init__(self, c_instance): ControlSurface.__init__(self, c_instance) with self.component_guard(): self.cInstance = c_instance self._suppress_send_midi = True debug_log(self, "--------------------------") debug_log(self, "FissureVR Pyro DEBUG_START") # Wrappers for Ableton objects self.song = None self.tracks = [] self.clock = None self.initPyroServer() self.build_wrappers() self._suppress_send_midi = False def initPyroServer(self): Pyro.config.PYRO_ES_BLOCKQUEUE = False # Event listener Pyro.core.initClient() # Create publisher #self.publisher = Pyro.core.getProxyForURI("PYRONAME://" + Pyro.constants.EVENTSERVER_NAME) self.publisher = LivePublisher(self.log_message) self.subscriber = LiveSubscriber(self.publisher, self.log_message) def disconnect(self): self._suppress_send_midi = True self._suppress_send_midi = False ControlSurface.disconnect(self) def refresh_state(self): ControlSurface.refresh_state(self) self.request_rebuild_midi_map() def build_midi_map(self, midi_map_handle): self.log_message("Building midi map...") ControlSurface.build_midi_map(self, midi_map_handle) def receive_midi(self, midi_bytes): #self.log_message("Received midi! " + str(midi_bytes)) self.requestLoop() ControlSurface.receive_midi(self, midi_bytes) def suggest_map_mode(self, cc_no, channel): return Live.MidiMap.MapMode.absolute def update_display(self): #Call the pyro request handler so that messages will always be accepted self.requestLoop() ControlSurface.update_display(self) def requestLoop(self): self.subscriber.handle_requests() def build_wrappers(self): debug_log(self, "Creating Live/Pyro wrappers") song = PyroSong(self.publisher) # self.log_message(song.dump_song_xml()) self.subscriber.set_song(song) self.clock = PyroEncoderElement(0, 1, None, (0, 0, 1)) parameters = {} for trackindex in range(len(getTracks())): trackWrapper = PyroTrack(trackindex, self.publisher) self.tracks.append(trackWrapper) for deviceindex in range(len(getTrack(trackindex).devices)): deviceWrapper = PyroDevice(trackindex, deviceindex, self.publisher) trackWrapper.devices.append(deviceWrapper) for parameterindex in range( len( getTrack( trackindex).devices[deviceindex].parameters)): parameterWrapper = PyroDeviceParameter( trackindex, deviceindex, parameterindex, self.publisher) parameters[(trackindex, deviceindex, parameterindex)] = parameterWrapper self.subscriber.set_parameter_list(parameters) self.refresh_state()
class FissureVR_Pyro(ControlSurface): def __init__(self, c_instance): ControlSurface.__init__(self, c_instance) with self.component_guard(): self.cInstance = c_instance self._suppress_send_midi = True debug_log(self, "--------------------------") debug_log(self, "FissureVR Pyro DEBUG_START") # Wrappers for Ableton objects self.song = None self.tracks = [] self.clock = None self.initPyroServer() self.build_wrappers() self._suppress_send_midi = False def initPyroServer(self): Pyro.config.PYRO_ES_BLOCKQUEUE = False # Event listener Pyro.core.initClient() # Create publisher #self.publisher = Pyro.core.getProxyForURI("PYRONAME://" + Pyro.constants.EVENTSERVER_NAME) self.publisher = LivePublisher(self.log_message) self.subscriber = LiveSubscriber(self.publisher, self.log_message) def disconnect(self): self._suppress_send_midi = True self._suppress_send_midi = False ControlSurface.disconnect(self) def refresh_state(self): ControlSurface.refresh_state(self) self.request_rebuild_midi_map() def build_midi_map(self, midi_map_handle): self.log_message("Building midi map...") ControlSurface.build_midi_map(self, midi_map_handle) def receive_midi(self, midi_bytes): #self.log_message("Received midi! " + str(midi_bytes)) self.requestLoop() ControlSurface.receive_midi(self, midi_bytes) def suggest_map_mode(self, cc_no, channel): return Live.MidiMap.MapMode.absolute def update_display(self): #Call the pyro request handler so that messages will always be accepted self.requestLoop() ControlSurface.update_display(self) def requestLoop(self): self.subscriber.handle_requests() def build_wrappers(self): debug_log(self, "Creating Live/Pyro wrappers") song = PyroSong(self.publisher) # self.log_message(song.dump_song_xml()) self.subscriber.set_song(song) self.clock = PyroEncoderElement( 0, 1, None, (0, 0, 1)) parameters = {} for trackindex in range(len(getTracks())): trackWrapper = PyroTrack(trackindex, self.publisher) self.tracks.append(trackWrapper) for deviceindex in range(len(getTrack(trackindex).devices)): deviceWrapper = PyroDevice(trackindex, deviceindex, self.publisher) trackWrapper.devices.append(deviceWrapper) for parameterindex in range(len(getTrack(trackindex).devices[deviceindex].parameters)): parameterWrapper = PyroDeviceParameter(trackindex, deviceindex, parameterindex, self.publisher) parameters[(trackindex, deviceindex, parameterindex)] = parameterWrapper self.subscriber.set_parameter_list(parameters) self.refresh_state()