Ejemplo n.º 1
0
    def _wait_for_data(self):
        """
        Wait for and get input data

        :return: Answer
        :rtype: str, mixed
        """
        # Wait for answer
        while not self.midi_in.poll():
            pass

        # Read answer
        raw_answers = list()
        answer = list()

        while self.midi_in.poll():
            raw_answers.append(self.midi_in.read(1))

        for raw_answer in raw_answers:
            for event in raw_answer:
                for data in event[0]:
                    answer.append(data)
                    # Strip remaining garbage data after sysex end
                    if data == 0xf7:
                        break

        # TODO: Timeout on no reply

        return SysexMessage.parse(answer)
Ejemplo n.º 2
0
    def send(self, msg):
        """
        Sends out SysEx message

        :param msg: Message
        :type msg: list
        """

        logging.debug("->")
        if logging.getLogger().getEffectiveLevel() == logging.DEBUG:
            # Parse messages for debugging
            SysexMessage.parse(msg)

        try:
            self.midi_out.write_sys_ex(0, msg)
        except TypeError:
            # We must be running Python 3, let's send bytes
            self.midi_out.write_sys_ex(0, bytes(msg))