def main_inout_block(): # don't set global var because we will output here # global midiout midiin = rtmidi.RtMidiIn() print 'INPUTS:' print_ports(midiin) midiin.openPort(1) # KeyStation? midiout = rtmidi.RtMidiOut() print 'OUTPUTS:' print_ports(midiout) midiout.openPort(0) # IAC? try: m = None while True: m = midiin.getMessage(250) if m: midiout.sendMessage(m) m = rtmidi.MidiMessage.aftertouchChange( 1, 1, m.getNoteNumber()) print_message(m) except KeyboardInterrupt: pass midiin.closePort() print 'quit'
def setUpLights(): midiout = rtmidi.RtMidiOut() ports = range(midiout.getPortCount()) if ports: for i in ports: print i, midiout.getPortName(i) midiout.openPort(0) midiout.sendMessage( rtmidi.MidiMessage.controllerEvent(MIDI_CHANNEL, PREV_CONTROLLER, ON_VALUE)) midiout.sendMessage( rtmidi.MidiMessage.controllerEvent(MIDI_CHANNEL, NEXT_CONTROLLER, ON_VALUE)) midiout.sendMessage( rtmidi.MidiMessage.controllerEvent(MIDI_CHANNEL, BLANK_TEXT_CONTROLLER, ON_VALUE)) midiout.sendMessage( rtmidi.MidiMessage.controllerEvent(MIDI_CHANNEL, BLANK_BG_CONTROLLER, ON_VALUE)) midiout.sendMessage( rtmidi.MidiMessage.controllerEvent(MIDI_CHANNEL, BLANK_ALL_CONTROLLER, ON_VALUE)) midiout.sendMessage( rtmidi.MidiMessage.controllerEvent(MIDI_CHANNEL, LOGO_CONTROLLER, ON_VALUE)) return midiout
def __init__(self, output_port_name='getch'): self.output_port_name = output_port_name self.exit_key = 'q' self.channel = 10 self.velocity = 120 # setup midi output self.out = rtmidi.RtMidiOut() self.out.openVirtualPort(self.output_port_name) self.key_mappings = { 'c': 5, 'r': 4, 't': 42, 'a': 36, 's': 37, 'd': 38, 'f': 39, 'g': 40, 'h': 41, 'j': 42, 'k': 43, 'l': 44, } self.getch = Getch()
def __init__(self, controller_name='MPK Mini Mk II' ): # settings self.rec_toggle_note = 4 self.channel_toggle_note = 5 self.controller_name = controller_name self.output_port_name = 'test_port' self.max_channel = 16 # setup midi input self.inn = rtmidi.RtMidiIn() self.port_names = [self.inn.getPortName(i) for i in \ range(self.inn.getPortCount())] self.input_port_idx = self.port_names.index(self.controller_name) self.inn.openPort(self.input_port_idx) # setup midi output self.out = rtmidi.RtMidiOut() self.out.openVirtualPort(self.output_port_name) # runtime self.recording = False self._channel = 1 self.playback_t0 = time.time() self.recording_t0 = time.time() self.loop_duration = None self.buffers = [] self.buffer_idxs = []
def list_midi_ports(): ''' List all midi ports, return a dict { name : address } ''' md = rtmidi.RtMidiOut() port_list = {} for port in range(md.getPortCount()): name = md.getPortName(port) if not 'Through' in name: port_list[md.getPortName(port)] = port return port_list
def __init__(self, ui): self._midi = {name: rtmidi.RtMidiOut() for name in ['looper', 'ctrl']} loop_port_index = self.get_midi_port_index(self._midi['looper'], 'CH345') ctrl_port_index = self.get_midi_port_index(self._midi['ctrl'], 'USBMIDI') self._midi['looper'].openPort(loop_port_index) self._midi['ctrl'].openPort(ctrl_port_index) assert self._midi['looper'].isPortOpen() assert self._midi['ctrl'].isPortOpen()
def setDevice(self, i=None): self.lock.acquire() self.dev = rtmidi.RtMidiOut() if isinstance(i, int): self.dev.openPort(i) elif isinstance(i, str): self.dev.openVirtualPort(i) else: self.dev.openVirtualPort('pk.RtMidiOut') self.lock.release()
def refreshMidiPorts(): global midiMsg midiMsg.midiports = [] if sys.version_info[1] == 8: midiMsg.midiobj = rtmidi.RtMidiOut() for i in range(midiMsg.midiobj.getPortCount()): midiMsg.midiports.append(midiMsg.midiobj.getPortName(i)) else: midiMsg.midiobj = rtmidi.MidiOut() midiMsg.midiports = midiMsg.midiobj.get_ports()
def __init__(self): #Name of the MIDI port in use self.portName = "virmidi" self.out = rtmidi.RtMidiOut() portCount = self.out.getPortCount() print("number of available MIDI ports: " + str(portCount)) print("using port " + self.portName) #Using virtual ports by default self.out.openVirtualPort(self.portName) return
def main_inout(): global midiout midiin = rtmidi.RtMidiIn() print 'INPUTS:' print_ports(midiin) midiin.setCallback(callback) midiin.openPort(1) # KeyStation? midiout = rtmidi.RtMidiOut() print 'OUTPUTS:' print_ports(midiout) midiout.openPort(0) # IAC? while True: time.sleep(.1) midiin.closePort() print 'quit'
def interface(port, action, syx=False): ''' Interface for midi send/receive sysex action 'receive' saves file at 'receive_cache' action 'send' send syx return True when done ''' port = find_midi_port(port) if port: if action == 'receive': # wait in number of seconds # and/or midi messages waiting = 10 received = False md = rtmidi.RtMidiIn() md.openPort(port) md.ignoreTypes(False, True, True) while waiting and not received: msg = md.getMessage(1000) if msg and validate_syx(msg): save_syx(msg) received = True break waiting -= 1 md.closePort() return received elif action == 'send': if not syx: return False else: md = rtmidi.RtMidiOut() md.openPort(port) msg = rtmidi.MidiMessage(syx) if validate_syx(msg): md.sendMessage(msg) return True else: print('MIDI port not valid') return False
def __init__(self, portNumber=0, **argd): super(Midi, self).__init__(**argd) self.output = rtmidi.RtMidiOut() self.output.openPort(portNumber)
def __init__(self): self.midi = rtmidi.RtMidiOut() self.midi.openVirtualPort() self.pp = pitchParser.PitchParser()
import traceback import json as JSON import re def ipcSend(name, data): print(JSON.dumps([name, data])) stdout.flush() try: import rtmidi API = rtmidi.RtMidiIn.UNIX_JACK if 'jack' in argv else rtmidi.RtMidiIn.UNSPECIFIED JACK = API == rtmidi.RtMidiIn.UNIX_JACK in_dev = rtmidi.RtMidiIn(API, 'Midi->OSC probe') out_dev = rtmidi.RtMidiOut(API, 'OSC->Midi probe') except: ipcSend('error', 'pyrtmidi not found (or wrong version)') if version_info.major == 3: raw_input = input debug = False if 'debug' in argv: debug = True def list(): message = []
class RTOut(retune.Retuner): def output(self, mess): self.midiout.sendMessage(rtmidi.MidiMessage(bytes(mess))) midiin = rtmidi.RtMidiIn() if len(sys.argv) > 1: instr = sys.argv[1] inport = next(i for i in range(midiin.getPortCount()) if instr in midiin.getPortName(i)) midiin.openPort(inport) else: midiin.openVirtualPort() midiout = rtmidi.RtMidiOut() if len(sys.argv) > 2: outstr = sys.argv[2] outport = next(i for i in range(midiout.getPortCount()) if outstr in midiout.getPortName(i)) midiout.openPort(outport) else: midiout.openVirtualPort() midistream = RTOut() midistream.midiout = midiout while True: mess = midiin.getMessage() if mess is not None: midistream.write(mess.getRawData())
class MidiPlayer: midiout = rtmidi.RtMidiOut() channel = 1 sustain = False notesOn = {} device = 'MIDISPORT 2x2 Port A' device2 = 'USB-MIDI' def __init__(self, channel=1): self.promptPort() self.channel = channel def promptPort(self): ports = range(self.midiout.getPortCount()) names = [] for i in ports: names.append(self.midiout.getPortName(i)) if self.midiout.getPortName(i) == self.device: print "Connected to the device {}.".format(self.device) self.midiout.openPort(i) return for i in ports: if self.midiout.getPortName(i) == self.device2: print "Connected to the device {}.".format(self.device2) self.midiout.openPort(i) return print "The device {} was not found.".format(self.device) if len(names) == 0: print "No other instruments are open. Quitting program now." sys.exit() else: "The following instruments were found:", for i, name in enumerate(names): print "{0}: {1}".format(i, name) port = raw_input( "Please type of the number of the port you'd like to open.") self.midiout.openPort(int(port)) def note(self, pitch=60, dur=1, velocity=80, layer=0): if pitch in self.notesOn and self.notesOn[pitch]['layer'] > layer: return elif pitch in self.notesOn: self.notesOn[pitch]['timer'].cancel() self.noteOff(pitch, layer) timer = threading.Timer(0.1, self.note, (pitch, dur, velocity, layer)) timer.start() return message = rtmidi.MidiMessage.noteOn(self.channel, 0, velocity) message.setNoteNumber(pitch) self.midiout.sendMessage(message) timer = threading.Timer(dur, self.noteOff, (pitch, layer)) timer.start() self.notesOn[pitch] = {'layer': layer, 'timer': timer} def noteOff(self, pitch, layer=0): if pitch in self.notesOn and self.notesOn[pitch]['layer'] <= layer: if pitch not in self.notesOn: return del self.notesOn[pitch] message = rtmidi.MidiMessage.noteOff(self.channel, 0) message.setNoteNumber(pitch) self.midiout.sendMessage(message) def controllerEvent(self, event_type, value): message = rtmidi.MidiMessage.controllerEvent(self.channel, event_type, value) self.midiout.sendMessage(message) def setSustain(self, value): self.sustain = value if value: self.controllerEvent(64, 127) else: self.controllerEvent(64, 0)
from binascii import hexlify, unhexlify import traceback import json as JSON import re def ipcSend(name, data): print(JSON.dumps([name, data])) stdout.flush() try: import rtmidi API = rtmidi.RtMidiIn.UNIX_JACK if 'jack' in argv else rtmidi.RtMidiIn.UNSPECIFIED JACK = API == rtmidi.RtMidiIn.UNIX_JACK in_dev = rtmidi.RtMidiIn(API, 'MIDI->OSC probe') out_dev = rtmidi.RtMidiOut(API, 'OSC->MIDI probe') except: ipcSend( 'error', 'pyrtmidi not found (or wrong version)\nRunning with python version %s' % version) exit() if version_info.major == 3: raw_input = input debug = False if 'debug' in argv: debug = True