class MidiIn(BaseObject): _Properties = {'state': dict(default=False)} def __init__(self, **kwargs): super(MidiIn, self).__init__(**kwargs) self.register_signal('data_received', 'msg_received') self.dev_info = kwargs.get('dev_info') self.midi_io = kwargs.get('midi_io') self._block_on_state_change = False self.id = self.dev_info.id self.device = self.build_device(**kwargs) self.scheduler = None self.bind(state=self._on_state_set) def parse_midi_message(self, **kwargs): data = kwargs.get('data') timestamp = kwargs.get('timestamp', 0) if timestamp == 0: timestamp = self.midi_io.get_module_time() #now = time.time() t = self.midi_io.module_time_to_time(timestamp) #nowdiff = now - self.midi_io.start_time['time'] #tdiff = t - self.midi_io.start_time['time'] #print 'realtime=%010.8f, modtime=%010.8f, diff=%010.8f' % (nowdiff, tdiff, tdiff - nowdiff) msg = messages.parse_midi_message(data, timestamp=t) if msg is None: return self.scheduler.add_item(t, msg) return msg def on_data_received(self, **kwargs): self.emit('data_received', **kwargs) def on_msg_received(self, **kwargs): self.emit('msg_received', **kwargs) def _on_state_set(self, **kwargs): if kwargs.get('value'): self.scheduler = Scheduler( callback=self.on_scheduler_process_msg) #, spawn_threads=True) self.scheduler.start() elif self.scheduler is not None: self.scheduler.stop(blocking=self._block_on_state_change) self.scheduler = None def on_scheduler_process_msg(self, msg, t): # msgtype = None # if isinstance(msg, messages.NoteMessage): # msgtype = 'note' # elif isinstance(msg, messages.ControllerMessage): # msgtype = 'controller' # if msgtype: # tkwargs = dict(zip(msg.byte_order, msg.build_data())) # tkwargs['ioType'] = 'in' # tkwargs['type'] = msgtype # self.midi_io.midi_osc.trigger_event(**tkwargs) self.emit('msg_received', msg=msg)
class MidiIn(BaseObject): _Properties = {'state':dict(default=False)} def __init__(self, **kwargs): super(MidiIn, self).__init__(**kwargs) self.register_signal('data_received', 'msg_received') self.dev_info = kwargs.get('dev_info') self.midi_io = kwargs.get('midi_io') self._block_on_state_change = False self.id = self.dev_info.id self.device = self.build_device(**kwargs) self.scheduler = None self.bind(state=self._on_state_set) def parse_midi_message(self, **kwargs): data = kwargs.get('data') timestamp = kwargs.get('timestamp', 0) if timestamp == 0: timestamp = self.midi_io.get_module_time() #now = time.time() t = self.midi_io.module_time_to_time(timestamp) #nowdiff = now - self.midi_io.start_time['time'] #tdiff = t - self.midi_io.start_time['time'] #print 'realtime=%010.8f, modtime=%010.8f, diff=%010.8f' % (nowdiff, tdiff, tdiff - nowdiff) msg = messages.parse_midi_message(data, timestamp=t) if msg is None: return self.scheduler.add_item(t, msg) return msg def on_data_received(self, **kwargs): self.emit('data_received', **kwargs) def on_msg_received(self, **kwargs): self.emit('msg_received', **kwargs) def _on_state_set(self, **kwargs): if kwargs.get('value'): self.scheduler = Scheduler(callback=self.on_scheduler_process_msg)#, spawn_threads=True) self.scheduler.start() elif self.scheduler is not None: self.scheduler.stop(blocking=self._block_on_state_change) self.scheduler = None def on_scheduler_process_msg(self, msg, t): # msgtype = None # if isinstance(msg, messages.NoteMessage): # msgtype = 'note' # elif isinstance(msg, messages.ControllerMessage): # msgtype = 'controller' # if msgtype: # tkwargs = dict(zip(msg.byte_order, msg.build_data())) # tkwargs['ioType'] = 'in' # tkwargs['type'] = msgtype # self.midi_io.midi_osc.trigger_event(**tkwargs) self.emit('msg_received', msg=msg)
class MessageHandler(BaseObject): def __init__(self, **kwargs): super(MessageHandler, self).__init__(**kwargs) self.register_signal('new_message') self.queue_parent = kwargs.get('queue_parent') mcls = kwargs.get( 'message_class', getattr(self.queue_parent, 'message_class', 'Message')) self.message_class = MESSAGE_CLASSES.get(mcls) self.queue_time_method = kwargs.get('queue_time_method', 'datetime_utc') self.message_queue = Scheduler(time_method=self.queue_time_method, callback=self.dispatch_message) self.message_queue.start() def unlink(self): self.message_queue.stop(blocking=True) q = self.message_queue super(MessageHandler, self).unlink() def create_message(self, **kwargs): cls = self.message_class kwargs['message_handler'] = self return cls(**kwargs) def incoming_data(self, **kwargs): data = kwargs.get('data') client = kwargs.get('client') mq = self.message_queue try: msg = self.create_message(raw_data=data) except: self.LOG.warning( 'message parse error: client = (%s), data = (%s)' % (client, data)) return self.LOG.debug('incoming message: %s' % (msg)) if msg.recipient_address is None: msg.recipient_address = client ts = msg.timestamp if ts is None: ts = mq.now() mq.add_item(ts, msg) def dispatch_message(self, msg, ts): self.emit('new_message', message=msg, timestamp=ts)
class MessageHandler(BaseObject): def __init__(self, **kwargs): super(MessageHandler, self).__init__(**kwargs) self.register_signal('new_message') self.queue_parent = kwargs.get('queue_parent') mcls = kwargs.get('message_class', getattr(self.queue_parent, 'message_class', 'Message')) self.message_class = MESSAGE_CLASSES.get(mcls) self.queue_time_method = kwargs.get('queue_time_method', 'datetime_utc') self.message_queue = Scheduler(time_method=self.queue_time_method, callback=self.dispatch_message) self.message_queue.start() def unlink(self): self.message_queue.stop(blocking=True) q = self.message_queue super(MessageHandler, self).unlink() def create_message(self, **kwargs): cls = self.message_class kwargs['message_handler'] = self return cls(**kwargs) def incoming_data(self, **kwargs): data = kwargs.get('data') client = kwargs.get('client') mq = self.message_queue try: msg = self.create_message(raw_data=data) except: self.LOG.warning('message parse error: client = (%s), data = (%s)' % (client, data)) return self.LOG.debug('incoming message: %s' % (msg)) if msg.recipient_address is None: msg.recipient_address = client ts = msg.timestamp if ts is None: ts = mq.now() mq.add_item(ts, msg) def dispatch_message(self, msg, ts): self.emit('new_message', message=msg, timestamp=ts)