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 initPyroServer(self): Pyro.config.PYRO_ES_BLOCKQUEUE = False # Event listener Pyro.core.initClient() # Create publisher and subscriber links to event server self.publisher = LivePublisher() self.subscriber = LiveSubscriber(self.publisher) # Set the global publisher for all wrappers PyroWrapper.set_publisher(self.publisher)
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 ShowtimeBridge(ControlSurface): def __init__(self, c_instance): ControlSurface.__init__(self, c_instance) with self.component_guard(): self.cInstance = c_instance self._suppress_send_midi = True Log.set_logger(self.log_message) Log.set_log_level(Log.LOG_WARN) Log.write("-----------------------") Log.write("ShowtimeBridge starting") Log.info(sys.version) self.initPyroServer() # Register methods to the showtimebridge server wrapperClasses = PyroWrapper.__subclasses__() wrapperClasses.append(PyroWrapper) for cls in wrapperClasses: cls.clear_instances() cls.register_methods() for action in cls.incoming_methods().values(): Log.info("Adding %s to incoming callbacks" % action.methodName) self.subscriber.add_incoming_action(action.methodName, cls, action.callback) self.publisher.register_to_showtime(action.methodName, action.methodAccess, action.methodArgs) for action in cls.outgoing_methods().values(): Log.info("Adding %s to outgoing methods" % action.methodName) self.publisher.register_to_showtime(action.methodName, action.methodAccess) # Midi clock to trigger incoming message check self.clock = PyroEncoderElement(0, 119) # Create the root wrapper PyroSong.add_instance(PyroSong(getSong())) self.refresh_state() self._suppress_send_midi = False def initPyroServer(self): Pyro.config.PYRO_ES_BLOCKQUEUE = False # Event listener Pyro.core.initClient() # Create publisher and subscriber links to event server self.publisher = LivePublisher() self.subscriber = LiveSubscriber(self.publisher) # Set the global publisher for all wrappers PyroWrapper.set_publisher(self.publisher) 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): Log.info("Building midi map...") ControlSurface.build_midi_map(self, midi_map_handle) def receive_midi(self, midi_bytes): # Hack to get a faster update loop. Call our update function each time we receive # a midi message 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() PyroWrapper.process_deferred_actions()
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()