diff --git a/main_direct.py b/main_direct.py deleted file mode 100644 index 440cdb2..0000000 --- a/main_direct.py +++ /dev/null @@ -1,72 +0,0 @@ -import rtmidi -import time - - -class HostsSync: - def __init__(self): - self.host_id = None - self.available_ports = None - self.midi_out = rtmidi.MidiOut() - self.opened_ports = [] - - def midi_input_callback(self, event, data_pack): - message, deltatime = event - status = message[0] - host_id, midi_in = data_pack - - # Check if the status byte is 0xFA (250 in decimal) or 0xFF (255 in decimal), - # which indicate MIDI Start and Stop messages respectively - if status in [250, 255]: - print(f"MIDI message received from device {host_id}: {message}") - self.host_id = host_id - self.midi_output_called(message) - - def midi_output_called(self, message): - if self.host_id is None: - return - - for i, port in enumerate(self.available_ports): - if i != self.host_id: - if i not in self.opened_ports: - self.midi_out.open_port(i) - self.opened_ports.append(i) - print(f"Opened MIDI output port: {self.available_ports[i]}") - - self.midi_out.send_message(message) - - def main(self): - midi_ins = [] - self.available_ports = rtmidi.MidiIn().get_ports() - - if not self.available_ports: - print("No MIDI input ports available.") - return - - print("Available MIDI input ports:") - for i, port in enumerate(self.available_ports): - print(f"{i}: {port}") - - try: - for i, port in enumerate(self.available_ports): - midi_in = rtmidi.MidiIn() - midi_in.open_port(i) - midi_in.set_callback(self.midi_input_callback, (i, midi_in)) - midi_ins.append(midi_in) - print(f"Listening for MIDI messages on input port: {port}") - - # Keep the script running to listen for MIDI messages - while True: - time.sleep(1) - - except KeyboardInterrupt: - print("\nExiting...") - - finally: - for midi_in in midi_ins: - midi_in.close_port() - - self.midi_out.close_port() - -if __name__ == "__main__": - HostsSync().main() - diff --git a/readme.md b/readme.md index 010732c..87e2527 100644 --- a/readme.md +++ b/readme.md @@ -1,13 +1,14 @@ # AutoSyncHost ## Description -### An automatic midi host application that send midi sync commands to other MIDI devices connected via USB. +### An automatic midi host application that sends midi sync commands to other MIDI devices connected via USB. -This python scrtipt is intended to run headless on a raspbery pi but can run on any other python able device as well. +This python script is intended to run headless on a raspberry pi but can run on any other python able device as well. -The output is filtered so the host deosnt receive sync signals from the members and thus not causing midi loops. +The output is filtered so the host doesn´t receive sync signals from the members and thus not causing midi loops. -## Installation - +*Notes,CCs and other messages are not handled currently.* + +## Installation - pull from repository with `git clone https://git.raise-uav.com/Hermes/AutoSyncHost.git` - `pip install mido` - `pip install python-rtmidi`