예제 #1
0
 def __init__(self,
              controller_out='Arturia KeyLab Essential 61 DAW Out',
              controller_in='Arturia KeyLab Essential 61 DAW In',
              midi_in='Arturia KeyLab Essential 61 MIDI In'):
     self._dawin = rtmidi.MidiIn()
     self._dawin.open_port(self._dawin.get_ports().index(controller_in))
     self._midiin = rtmidi.MidiIn()
     self._midiin.open_port(self._midiin.get_ports().index(midi_in))
     self._dawout = rtmidi.MidiOut()
     self._dawout.open_port(self._dawout.get_ports().index(controller_out))
     self._dawout.send_message((240, 0, 32, 107, 127, 66, 2, 0, 64, 17, 127,
                                0, 247))  #Pose as Live
     #self.controls = pickle.load(open("kle_lib/controlcache.p", 'rb'))
     self.controls = kle_lib.buttondefs.getControls()
예제 #2
0
    def __init__(self, manifest, overrides=None):
        import supriya

        if isinstance(manifest, dict):
            manifest = copy.deepcopy(manifest)
            if overrides:
                manifest = supriya.system.YAMLLoader.merge(manifest, overrides)
            self._device_manifest = manifest
        else:
            manifest = pathlib.Path(manifest)
            if not manifest.suffix:
                manifest = manifest.with_suffix(".yml")
            if not manifest.is_absolute():
                manifest = (pathlib.Path(supriya.__path__[0]) / "assets" /
                            "devices" / manifest)
            manifest = supriya.system.YAMLLoader.load(str(manifest),
                                                      overrides=overrides)
            self._device_manifest = manifest
        self._lock = threading.RLock()
        self._midi_in = rtmidi.MidiIn()
        self._midi_out = rtmidi.MidiOut()
        self._initialize_physical_controls()
        if "logical_controls" in self._device_manifest["device"]:
            self._initialize_logical_controls()
        else:
            self._initialize_default_logical_controls()
예제 #3
0
 def init(self, api: ty.Optional[int] = None, port: int = 0) -> None:
     if self._in:
         self.shutdown()
     if api is not None:
         self._api = api
     self._in = rtmidi.MidiIn(rtapi=self.api, name=self.name)
     self.use_port(port)
예제 #4
0
def main():
    # In- and output setup
    midi_in = rtmidi.MidiIn()
    midi_out = rtmidi.MidiOut()

    # f_midi is the port opened by the Raspberry midi gadget.
    for index, port in enumerate(midi_in.get_ports()):
        if 'f_midi' in port:
            midi_in.open_port(index)
            print('MIDI in connected')

    for index, port in enumerate(midi_out.get_ports()):
        if 'f_midi' in port:
            midi_out.open_port(index)
            print('MIDI out connected')

    instance = sequency.Sequency(midi_in, midi_out)

    try:
        while True:
            # Just keep sleeping
            time.sleep(1)

    except KeyboardInterrupt:
        print('')

    finally:
        instance.done = True
        instance.kill()
        instance.join()
        del midi_in
        del midi_out
예제 #5
0
파일: midi.py 프로젝트: EnigmaCurry/isobar
    def __init__(self, target=None):
        self.midi = rtmidi.MidiIn()

        #------------------------------------------------------------------------
        # don't ignore MIDI clock messages (is on by default)
        #------------------------------------------------------------------------
        self.midi.ignore_types(timing=False)
        self.clock_target = None

        ports = self.midi.get_ports()
        if len(ports) == 0:
            raise Exception("No MIDI ports found")

        port_index = 0
        if target is not None:
            for index, name in enumerate(ports):
                if name == target:
                    log.info("Found MIDI source (%s)" % name)
                    port_index = index

            if self.midi is None:
                log.warn("Could not find MIDI source %s, using default" %
                         target)

        self.midi.open_port(port_index)
예제 #6
0
	def __init__(self, port=-1):
		self.jsonFileName = os.path.join(os.path.dirname(os.path.realpath(__file__)), "colorConfig.json")
		self.ConfigData_JSON = open(self.jsonFileName).read()
		self.ConfigData = json.loads(self.ConfigData_JSON)

		self.midiIn = rtmidi.MidiIn()
		self.port = port
		self.buttonMapInbound = {
			0x30 : "flash",
			0x31 : "pause",
			0x32 : "choose",
			0x33 : "go",
			0x42 : "goback",
			}
		for i in range(len(self.ConfigData["map"])):
			address = self.ConfigData["map"][i]["address"]
			path = self.ConfigData["map"][i]["path"]
			number = self.ConfigData["map"][i]["number"]
			colorIndex = self.ConfigData["map"][i]["colorIndex"]
			self.buttonMapInbound[int(self.ConfigData["map"][i]["address"])] = (self.ConfigData["map"][i]["path"], self.ConfigData["map"][i]["number"])

		#print(self.buttonMapInbound)
		if self.port != -1:
			self.midiIn.open_port(self.port)
		else:
			self.midiIn.open_port(name='APC40 mkII')
		self.midiIn.set_callback(self.callback)
예제 #7
0
def _rtmidi_virtual_ports_available():
    '''Check whether rtimidi virtual ports are available.

    These are not supported for some MIDI APIs (e.g. Windows or 'dummy').
    '''

    compiled_apis = [
        rtmidi.get_api_name(api) for api in rtmidi.get_compiled_api()
    ]
    env_api = rtmidi.get_api_name(rtmidi.midiutil.get_api_from_environment())
    logging.info(
        f"rtmidi compiled API: {compiled_apis}, API from env: {env_api}")

    port_name = "vlcmidi virtual test"
    try:
        rtmidi.midiutil.open_midioutput(use_virtual=True,
                                        interactive=False,
                                        port_name=port_name)
    except (rtmidi.InvalidPortError, rtmidi.NoDevicesError,
            rtmidi.SystemError) as e:
        logging.warning(
            f"Virtual ports not available: couldn't open port ({e})")
        return False

    # make sure we can see the port
    midi_in = rtmidi.MidiIn()
    available_ports = midi_in.get_ports()
    if len(available_ports) == 0 or not any(port_name in port
                                            for port in available_ports):
        logging.warning(
            f"Virtual ports not available: port not in {available_ports}")
        return False
    return True
예제 #8
0
def main():
    args = parse_command_line()

    if args.list_ports:
        # List available MIDI device ports.
        midi = rtmidi.MidiIn()
        midi_ports = midi.get_ports()
        print('MIDI Ports:')
        for index, port in enumerate(midi_ports):
            print('    {:2d}: {}'.format(index, port))
        sys.exit(0)

    # Start the UART serial connection.
    ser = serial.Serial(args.serial_port, baudrate=115200)

    midi = MidiManager(ser, args.keyboard_midi_port, args.quneo_midi_port)

    # Main loop.
    while True:
        try:
            # Print received data from UART to stdout.
            sys.stdout.write(ser.read().decode('utf-8'))
        except KeyboardInterrupt:
            print('Exiting.')
            sys.exit(0)
        except UnicodeDecodeError:
            pass
예제 #9
0
    def __init__(self):
        try:
            ConfigData_Filename = os.path.join(
                os.path.dirname(os.path.realpath(__file__)), "config.json")
            ConfigData_JSON = open(ConfigData_Filename).read()
            ConfigData = json.loads(ConfigData_JSON)
            self.MSCCmdFormat = int(ConfigData['MSCCmdFormat'], 16)
            self.MSCDeviceID = int(ConfigData['MSCDeviceID'])
            self.expandedMode = ConfigData['expandedMode']
            self.inPort = int(ConfigData['inPort'])
            self.outPort = int(ConfigData['outPort'])
            self.MAMSCMode = ConfigData['MAMSCMode']
            self.MA = ConfigData['MA']

        except Exception as e:
            print(
                "EXCEPTION: Cannot load and parse Config.JSON File. Loading Default settings."
            )
            print(e)
            self.MSCCmdFormat = 0x01
            self.MSCDeviceID = '1'
            self.expandedMode = True
            self.outPort = 0
            self.inPort = 0
            self.MA = False
            self.MAMSCMode = 'Default'

            ConfigData_Filename = os.path.join(
                os.path.dirname(os.path.realpath(__file__)), "config.json")
            ConfigData = {}
            ConfigData['MSCCmdFormat'] = hex(self.MSCCmdFormat)
            ConfigData['MSCDeviceID'] = self.MSCDeviceID
            ConfigData['expandedMode'] = self.expandedMode
            ConfigData['inPort'] = self.inPort
            ConfigData['outPort'] = self.outPort
            ConfigData['MA'] = self.MA
            ConfigData['MAMSCMode'] = self.MAMSCMode
            ConfigData_JSON = open(ConfigData_Filename, 'w')
            json.dump(ConfigData, ConfigData_JSON, indent=1)

        self.cmdLookup = [
            '', 'GO', 'Set Cuelist', 'OPEN', 'STOP', 'RESUME', 'CLOSE',
            'ALL_OFF', 'GO_OFF'
        ]
        self.currentCuelist = 0
        #GrandMA2 Specific Functionality
        self.MAExecPage = 0
        self.MAModes = ['Default', 'Exec.Page', 'Exec Page']
        self.stopRepeats = True

        self.midiIn = rtmidi.MidiIn()
        self.midiOut = rtmidi.MidiOut()
        self.availableInPort = self.midiIn.get_ports()
        self.availableOutPort = self.midiOut.get_ports()
        try:
            self.midiIn.open_port(self.inPort)
            self.midiOut.open_port(self.outPort)
            self.midiIn.set_callback(self.processMidiIn)
        except:
            pass
예제 #10
0
파일: Midi.py 프로젝트: adwuard/OP_Manager
    def __init__(self):
        self.stopFlag = False

        self.in_Midi_tool_screen_flag = False
        self.in_out_device_selector_flag = 0  # 0, 1, -1

        # Midi device search filter
        self.sysMidiFilterRemoveLst = [
            "Midi Through", "RtMidiIn Client", "RtMidiOut Client", "RtMidi",
            "Through"
        ]
        # self.sysMidiFilterRemoveLst = []
        self.threads = []

        # Current Mounted Device
        self.currentInDevice = "Not Connected"
        self.currentOutDevice = "Not Connected"

        # Serial In out initialization
        # self.serialport = serial.Serial('/dev/serial0', 38400, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE)  # /dev/ttyS0, ttyAMA0
        self.ser = serial.Serial(port="/dev/serial0",
                                 baudrate=38400,
                                 timeout=0)

        # Rtmidi USB Midi Initialization
        self.usbOut = rtmidi.MidiOut()
        self.usbIn = rtmidi.MidiIn()

        self.semitone_MinMax = (-7, 7)
        self.octave_MinMax = (-4, 4)
        self.octave = 0
        self.semiTone = 0
예제 #11
0
def prepare_midi(
    board, midi_port
):  # funkcja pozwalajaca na wprowadzanie planszy poczatkowej na kontrolerze midi
    set_array_to_zero(board, len(board), len(board[0]))  # zerujemy na poczatku
    midiin = rtmidi.MidiIn()
    ports = range(midiin.get_port_count())
    if ports:
        midiin.open_port(1)  # tu sie otwieraja jakies porty
        while True:
            mess = midiin.get_message()
            if mess != None and mess[0][
                    2] > 5:  # sprawdzamy czy sygnal ktory wysylamy ma wartosci i czy wartosc nacisku byla wieksza niz 2
                print(
                    mess
                )  # bez powyzszego warunku trzebaby wymyslec sposob na ignorowanie zwalniania przycisku
                if mess[0][1] == 10 and mess[0][
                        2] > 5:  # przyciskiem o wartosci 10 rozpoczynamy symulacje
                    midiin.close_port()
                    return board
                else:
                    j = int(mess[0][1] % 10)
                    i = int((mess[0][1] - j) / 10)
                    if board[i][
                            j] == 0:  # klikajac mozemy zapalac martwe komorki, lub usmiercac zywe
                        board[i][j] = 1
                        light_up(midi_port, i * 10 + j, 1)
                    else:
                        board[i][j] = 0
                        light_up(midi_port, i * 10 + j, 0)
예제 #12
0
    def find_launchpad_in_port(self):
        """
        Try and find the Launchpad midi input launchpad
        :return:
        """
        in_ports = rtmidi.MidiIn()
        ports = in_ports.get_ports()
        port_num = None
        found = False
        for (port_num, port) in enumerate(ports):
            for pad_name in self.launchpads:
                if pad_name in port:
                    found = True

                    break
            if found:
                break
        if found:
            self.in_port_num = port_num

        else:
            port_num = None
        # Clean up as the Launchpad is going to need the midi port
        del in_ports
        return port_num
예제 #13
0
 def __init__(self, manifest, logger=None, overrides=None):
     import supriya
     self._logger = logger or logging.getLogger(type(self).__name__)
     if isinstance(manifest, dict):
         manifest = copy.deepcopy(manifest)
         if overrides:
             manifest = supriya.system.YAMLLoader.merge(manifest, overrides)
         self._device_manifest = manifest
     else:
         manifest = pathlib.Path(manifest)
         if not manifest.suffix:
             manifest = manifest.with_suffix('.yml')
         if not manifest.is_absolute():
             manifest = (
                 pathlib.Path(supriya.__path__[0]) /
                 'assets' /
                 'devices' /
                 manifest
                 )
         manifest = supriya.system.YAMLLoader.load(
             str(manifest),
             overrides=overrides,
             )
         self._device_manifest = manifest
     self._lock = threading.RLock()
     self._midi_in = rtmidi.MidiIn()
     self._midi_out = rtmidi.MidiOut()
     self._initialize_physical_controls()
     if 'logical_controls' in self._device_manifest['device']:
         self._initialize_logical_controls()
     else:
         self._initialize_default_logical_controls()
예제 #14
0
 def __init__(self):
     super().__init__()
     self.midiout = rtmidi.MidiOut()
     if self.midiout.get_port_count() == 0:
         raise IOError("No MIDI output devices found.")
     launchpadFound = False
     for lpid, name in enumerate(self.midiout.get_ports()):
         if "Launchpad MK2" in name:
             launchpadFound = True
             break
     if not launchpadFound:
         raise IOError(
             "Launchpad not plugged in. (Launchpad MK2 output device not found)"
         )
     self.midiout.open_port(lpid)
     self.midiin = rtmidi.MidiIn()
     if self.midiin.get_port_count() == 0:
         raise IOError("No MIDI input devices found.")
     launchpadFound = False
     for lpid, name in enumerate(self.midiin.get_ports()):
         if "Launchpad MK2" in name:
             launchpadFound = True
             break
     if not launchpadFound:
         raise IOError(
             "Launchpad not plugged in????? (Launchpad MK2 input device not found?????) - Sanity check failed HARD."
         )  # This should never happen because the output was found if this part of the code was even reached. Of course, there may always be the microsecond perfect timing unplug
     self.midiin.open_port(lpid)
예제 #15
0
    def _open(self,
              client_name=None,
              virtual=False,
              api=None,
              callback=None,
              **kwargs):

        self.closed = True
        self._callback_lock = threading.RLock()
        self._queue = ParserQueue()

        self._rt = rtmidi.MidiIn(name=client_name)

        self.api = _api_to_name[self._rt.get_current_api()]
        self._device_type = 'RtMidi/{}'.format(self.api)

        self.name = _open_port(self._rt,
                               self.name,
                               client_name=client_name,
                               virtual=virtual,
                               api=self.api)
        self._rt.ignore_types(False, False, True)
        self.closed = False

        # We need to do this last when everything is set up.
        self.callback = callback
예제 #16
0
    def addConfig(cls, props):
        devicesList = obs.obs_properties_add_list(props, cls.Keys.port, "MIDI Device", obs.OBS_COMBO_TYPE_LIST, obs.OBS_COMBO_FORMAT_STRING)

        availablePorts = rtmidi.MidiIn().get_ports()
        obs.obs_property_list_add_string(devicesList, "None", "")
        for port in availablePorts:
            obs.obs_property_list_add_string(devicesList, port, port)
예제 #17
0
파일: vimina.py 프로젝트: andycavatorta/RBK
def createVirtualPort(devicename):
    print devicename
    midiin = rtmidi.MidiIn()
    vp = midiin.open_virtual_port(devicename)
    midiin.set_callback(
        (lambda event, data: midiEventCallback(devicename, event, data)))
    return vp
예제 #18
0
    def open(self, callback):
        self.midi_in = rtmidi.MidiIn()
        ports = self.midi_in.get_ports()
        if ports:
            self.midi_in.open_port(0)

        self.midi_in.set_callback(callback)
예제 #19
0
파일: Midi.py 프로젝트: zoocreet/FoxDot
    def __init__(self, port_id=0):
        """ Class for listening for MIDI clock messages
            from a midi device """
        try:

            self.device = rtmidi.MidiIn()

        except NameError:

            raise ImportError(_err)

        self.available_ports = self.device.get_ports()

        if not self.available_ports:

            raise MIDIDeviceNotFound

        else:

            print("MidiIn: Connecting to " + self.available_ports[port_id])

        self.device.open_port(port_id)
        self.device.ignore_types(timing=False)

        self.pulse = 0
        self.delta = 0.0
        self.bpm   = 120.0
        self.ppqn  = 24
        self.beat  = 0
    def run(self):
        virtualMidiInput = rtmidi.MidiIn()
        virtualMidiInput.set_client_name(self.name)
        virtualMidiInput.open_virtual_port(self.name)
        virtualMidiOutput = rtmidi.MidiOut()
        virtualMidiOutput.set_client_name(self.name)
        virtualMidiOutput.open_virtual_port(self.name)

        found_device = True
        while self.should_stop is False:
            try:
                serialMidi = None
                try:
                    serialMidi = serial.Serial(self.device,
                                               self.baud_rate,
                                               timeout=1,
                                               exclusive=True)
                except serial.SerialException as e:
                    if found_device == True:
                        info("Could not find device ", self.device,
                             ". Please connect it")
                        found_device = False
                    time.sleep(self.sleep_interval)
                    continue
                except Exception as e:
                    logException(e)
                    serialMidi.close()

                info("Opened device \"{}\" as \"{}\" with baud rate of {}".
                     format(self.device, self.name, self.baud_rate))
                found_device = True

                interrupt = threading.Event()
                self._trigger_interrupt = lambda: interrupt.set()

                virtualMidiInput.set_callback(
                    lambda midi_message, time: self.process_serial_output(
                        midi_message[0], serialMidi))

                def on_serial_exception(exception):
                    logException(exception)
                    self._trigger_interrupt()

                stop_serial = serial_set_callback(
                    serialMidi, lambda buf: self.process_serial_input(
                        buf, virtualMidiOutput), on_serial_exception)

                interrupt.wait()

                verbose("Interrupted main loop")

                stop_serial()
                serialMidi.close()
            except Exception as e:
                logException(e)

        virtualMidiInput.close_port()
        virtualMidiOutput.close_port()
        verbose("Main loop exit")
예제 #21
0
    def forward_messages(self, output, channel):
        output.prepare_for_output()

        self.input = rtmidi.MidiIn()
        self.input.open_port(self.port)
        self.input.set_callback(self.callback)

        self.forwards.append((output, channel))
예제 #22
0
 def __init__(self, listener):
     self.listener = listener
     self.intf = rtmidi.MidiIn()
     available_ports = self.intf.get_ports()
     print "Available MIDI ports: %d" % len(available_ports)
     if available_ports:
         self.intf.set_callback(self.callback)
         self.intf.open_port(0)
예제 #23
0
파일: player.py 프로젝트: gulaki/musiclab
def get_in_ports():
    global IN_PORTS
    midiin = rtm.MidiIn()
    available_ports = midiin.get_ports()
    IN_PORTS = StrSearchDict({i: p
                              for i, p in enumerate(available_ports)},
                             searchin='values',
                             findby='key')
 def __init__(self, name, device=0x7F):
     super().__init__('transport-control')
     self.device = device
     self.stop_event = Event()
     self.midiin = rtmidi.MidiIn(rtapi=rtmidi.API_UNIX_JACK, name=name)
     self.midiin.open_virtual_port('input')
     self.set_shutdown_callback(self.shutdown)
     self.midiin.set_callback(self.process)
예제 #25
0
 def OpenInput(self, midi_id):
     if self.devIn is None:
         try:
             self.devIn = rtmidi.MidiIn()
             self.devIn.open_port(midi_id)
         except:
             self.devIn = None
             return False
     return True
예제 #26
0
def midi_open(port_number):

    midiout = rtmidi.MidiOut()
    midiin = rtmidi.MidiIn()
    if midiout == None and midiin == None: return
    midiin.ignore_types(sysex=False, timing=False, active_sense=True)
    midiout.open_port(port_number)
    midiin.open_port(port_number)
    return (midiout, midiin)
예제 #27
0
 def __init__(self, pref_device=SUPPORTED_DEVICES[0]):
     self.input_name = None
     self.preferred_device = pref_device
     self._availables = None
     self.midi_instance = rtmidi.MidiIn()
     self.scanner_daemon = DaemonRoutine(ROUTINE_DELAY,
                                         self._check_available_devices,
                                         t_name="Scanner daemon")
     self.is_scanning = True
예제 #28
0
 def connect(self):
     self._midi_in = self._get_midi_device(rtmidi.MidiIn())
     self._midi_out = self._get_midi_device(rtmidi.MidiOut())
     if self._midi_in is not None and self._midi_out is not None:
         self._running = True
     else:
         self._running = False
         print("*** No LPD8 Controller found ***")
     Thread.__init__(self)
예제 #29
0
    def open_input(self, name):
        if self.midi_in.is_port_open():
            self.midi_in.close_port()
            self.midi_in = rtmidi.MidiIn()
            self.midi_ports = self.midi_in.get_ports()

        idx = self.midi_ports.index(name)
        self.midi_in.open_port(idx)
        self.midi_in.set_callback(self.midi_received)
예제 #30
0
def list_input_ports(api=rtmidi.API_UNSPECIFIED):
    """List available MIDI input ports.

    Optionally the RtMidi API can be passed with the ``api`` argument. If not
    it will be determined via the ``get_api_from_environment`` function.

    """
    midiin = rtmidi.MidiIn(get_api_from_environment(api))
    list_available_ports(midiio=midiin)