miredis/miredis.py

179 lines
3.5 KiB
Python

#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
miredis
v0.1
Forward midi events to a redis.
# CC rotary -> midi CC.
cross 49
joystick UD 57
joystick LR 56
LEFT:
menu 7
play/pause 8
cue 9
beat 10
pitch + 19
pitch - 20
jog 54
headset 21
volume 50
load deck 27
beatlck 22
1 15
2 14
3 13
bass 46
medium 47
trebble 48
track - 11
track + 12
RIGHT:
menu 1
play/pause 2
cue 3
beat 4
pitch + 23
pitch - 24
jog 55
headset 25
volume 51
load deck 28
beatlck 26
1 16
2 17
3 18
bass 43
medium 44
treblle 45
track - 5
track + 6
by Sam Neurohack
from /team/laser
"""
from libs import log
print()
log.infog('Miredis v0.1')
import argparse
import redis
from libs import midix
import traceback
#myHostName = socket.gethostname()
#print("Name of the localhost is {}".format(myHostName))
#gstt.myIP = socket.gethostbyname(myHostName)
#print("IP address of the localhost is {}".format(gstt.myIP))
#gstt.myIP = "127.0.0.1"
#print('Used IP', gstt.myIP)
argsparser = argparse.ArgumentParser(description="Miredis")
# General Args
argsparser.add_argument("-v","--verbose",action="store_true",help="Verbose")
# Redis Args
argsparser.add_argument("-i","--ip",help="IP address of the Redis server ",default="127.0.0.1",type=str)
argsparser.add_argument("-p","--port",help="Port of the Redis server ",default="6379",type=str)
# OSC Args
argsparser.add_argument("-o","--oscip",help="IP address of the OSC server to forward midi events.",default="127.0.0.1",type=str)
argsparser.add_argument("-q","--oscport",help="Port of the OSC server ",default="9000",type=str)
argsparser.add_argument('-link',help="Enable Ableton Link (disabled by default)", dest='link', action='store_true')
argsparser.add_argument("-m","--mode",help="Mode choice : simplex, clitools",default="clitools",type=str)
argsparser.set_defaults(link=False)
args = argsparser.parse_args()
redisIP = args.ip
redisPORT = args.port
midix.oscIP = args.oscip
midix.oscPORT = int(args.oscport)
midix.debug = args.verbose
midix.mode = args.mode
# with Ableton Link
if args.link == True:
from libs import alink
alink.Start()
linked = True
else:
print("Link DISABLED")
linked = False
r = redis.StrictRedis(host=redisIP , port=redisPORT, db=0)
midix.r = r
def Osc():
p = r.pubsub()
p.subscribe('updates')
print("Artnet updates subscribed")
while True:
# Handle OSC based changed
OSCframe()
# Handle Artnet change via redis key 'updates' subscription
message = p.get_message()
if message:
messageCC = message['data']
# print(type(messageCC))
#print("Updates said: %s" % messageCC)
if messageCC != 1:
#if ":" in str(messageCC.decode('utf_8')):
messageCC = messageCC.decode('utf_8')
artnetCC = messageCC.split(":")
if len(artnetCC) > 1:
cc(int(artnetCC[0]), round(int(artnetCC[1])/2))
print()
#time.sleep(0.0)
if __name__ == '__main__':
import traceback
import time
midix.check()
midix.toKey("/beats","0.0")
midix.toKey("/bpm",120)
try:
while True:
time.sleep(0.001)
if linked:
alink.BeatEvent()
except Exception:
traceback.print_exc()
#finally: