Compare commits
4 Commits
master
...
06524577ff
| Author | SHA1 | Date | |
|---|---|---|---|
| 06524577ff | |||
| 44b7caed76 | |||
| 1a07709d39 | |||
| f5c6e36d05 |
41
music_tracker.py
Normal file
41
music_tracker.py
Normal file
@@ -0,0 +1,41 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user