import argparse import math import time from mido import MidiFile from pythonosc import udp_client import mido import random mid = MidiFile('7eisblau.mid') random.seed(10) parser = argparse.ArgumentParser() parser.add_argument("--ip", default="127.0.0.1", help="The ip of the OSC server") parser.add_argument("--port", type=int, default=5005, help="The port the OSC server is listening on") args = parser.parse_args() client = udp_client.SimpleUDPClient(args.ip, args.port) client.send_message("/color", "blue") accrued_time = 0 note_count = 0 coor = (50, 50) direction = [1, 0] client.send_message("/tcp_coordinates", (50, 50, 0, 0, 0, 0)) for msg in mid.tracks[1]: t = mido.tick2second(msg.time, mid.ticks_per_beat, 1000000) beats = msg.time / mid.ticks_per_beat accrued_time += t if msg.type != "note_on" or msg.time == 0: time.sleep(t) continue note_count += 1 if note_count > 4: note_count = 0 coor = (coor[0] + direction[0] * accrued_time * 21, coor[1] + direction[1] * accrued_time * 21) client.send_message("/tcp_coordinates", (coor[0], coor[1], 6, 0, 0, 0)) accrued_time = 0 for i, m in enumerate(direction): if m != 0: direction[i] = 0 else: direction[i] = random.choice((1, -1)) print(msg.note) time.sleep(t) client.send_message("/tcp_coordinates", (coor[0], coor[1], 0, 0, 0, 0))