33 lines
929 B
Python
33 lines
929 B
Python
import rtmidi
|
|
|
|
def get_available_input_ports():
|
|
"""Returns list of (display_name, original_index, available) for all ports."""
|
|
try:
|
|
all_ports = rtmidi.MidiIn().get_ports()
|
|
except:
|
|
return []
|
|
|
|
result = []
|
|
|
|
for i, name in enumerate(all_ports):
|
|
try:
|
|
test = rtmidi.MidiIn()
|
|
test.open_port(i)
|
|
test.close_port()
|
|
del test
|
|
result.append((name, i, True))
|
|
except:
|
|
print(f"Port in use, skipping: {name}")
|
|
result.append((f"{name} [in use by another program]", i, False))
|
|
|
|
return result
|
|
|
|
def open_midi_input_port(original_index, callback):
|
|
midi_in = rtmidi.MidiIn()
|
|
midi_in.open_port(original_index)
|
|
midi_in.set_callback(callback)
|
|
return midi_in
|
|
|
|
def close_midi_input_port(midi_in):
|
|
if midi_in and midi_in.is_port_open():
|
|
midi_in.close_port() |