def repeater(): dest = MIDIDestination("repeater input") source = MIDISource("repeater output") frames = [] last_frame_time = time() while True: midi_in = dest.recv() if midi_in: #source.send(midi_in) frames.append((last_frame_time + DELAY, midi_in)) while frames: midi_out = frames[0] if midi_out[0] < last_frame_time: source.send(midi_out[1]) frames.pop(0) else: break now = time() wait_time = -1 while wait_time <= 0: last_frame_time = last_frame_time + LOOP_WAIT wait_time = last_frame_time - now sleep(wait_time)
def __init__(self, driver_name="DMX Bridge", universe=0): """ midi->dmx bridge :param driver_name: The midi name of the bridge. This will show up in Logic :param universe: The DMX universe to connect to """ self.driver_name = driver_name self.appname = "{} - {}".format(__appname__, driver_name) # initialize a default dmx frame self.midi_source = MIDIDestination(driver_name) self.frame = [0] * 255 self.universe = universe # this is the starting note for all midi channels self.note_offset = 24 # this is the number of dmx channels per midi channel # each midi channel will support 32 notes. This will allow # 16 fixtures via 16 midi channels. self.dmx_offset = 32 # MacOS X related stuff self.NSUserNotification = objc.lookUpClass('NSUserNotification') self.NSUserNotificationCenter = objc.lookUpClass( 'NSUserNotificationCenter') self.dmx_wrapper = None self.dmx_client = None self.dmx_tick = 100 self.midi_tick = 10 super(Midi2Dmx, self).__init__()