import argparse import math import time from mido import MidiFile from pythonosc import udp_client import mido mid = MidiFile('2gelb.mid') 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) angle = 0 magnitude = 0 mean = 74.1 client.send_message("/color", "yellow") for msg in mid.tracks[1]: t = mido.tick2second(msg.time, mid.ticks_per_beat, 1000000) beats = msg.time / mid.ticks_per_beat rotation = 2 * math.pi * beats / 16 angle += rotation magnitude += beats * 3 if msg.type != "note_on" or msg.time == 0: time.sleep(t) continue print(msg.note) adj_angle = angle + (msg.note - mean) / 9 y = math.sin(adj_angle) * magnitude x = math.cos(adj_angle) * magnitude client.send_message("/tcp_coordinates", (x, y, 6, 0, 0, 0)) time.sleep(t) client.send_message("/tcp_coordinates", (x, y, 0, 0, 0, 0))