LJ/libs3/alink.py
2023-06-03 14:43:53 +02:00

111 lines
2.0 KiB
Python

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# -*- mode: Python -*-
'''
alink v0.1
Ableton Link bridge to OSC & Redis
v0.2 available in miredis
LICENCE : CC
Sam Neurohack
Get:
git clone --recursive https://github.com/gonzaloflirt/link-python.git
Build:
Make sure python 3 is installed on your system.
mkdir build
cd build
cmake ..
cmake --build .
'''
#import midix
import sys
prevphase = 0
bpm = 120
def Start():
global lnk
import link
print("Link ENABLED")
lnk = link.Link(120)
lnk.enabled = True
lnk.startStopSyncEnabled = True
linked = True
def BeatEvent():
global lnk, prevphase
lnkstr = lnk.captureSessionState()
link_time = lnk.clock().micros();
tempo_str = '{0:.2f}'.format(lnkstr.tempo())
bpm = float(tempo_str)
#beatstep.SendOSCUI('/bpm', [bpm])
beats_str = '{0:.2f}'.format(lnkstr.beatAtTime(link_time, 0))
playing_str = str(lnkstr.isPlaying()) # always False ???
phase = lnkstr.phaseAtTime(link_time, 4)
# new beat ?
if int(phase) != prevphase:
prevphase = int(phase)
#print("LINK BPM:",bpm)
sys.stdout.write("Beat "+str(beats_str) + ' \r')
sys.stdout.flush()
#midix.SendUI('/beats', [beats_str])
#alink.SendOSCUI('/states/cc/'+str(ccnumber), [value])
currentbeat = float(beats_str)
#midix.SendAU('/aurora/beats', beats_str)
#AllStatus("Beat "+str(beats_str))
# Change current Link Tempo.
def newtempo(tempo):
global lnk
#print("val2", val2, "tempo", tempo)
if linked == True:
lnk.enabled = False
lnk.startStopSyncEnabled = False
lnk = link.Link(tempo)
lnk.enabled = True
lnk.startStopSyncEnabled = True
bpm = tempo
print(("New BPM", bpm))
#midix.SendUI('/bpm', [bpm])
else:
print("Link is disabled")
#
def BPMAdj(val1, keyname):
print((gstt.currentbpm))
# + 1
if val1 == 1:
newtempo(gstt.currentbpm+1)
# -1
if val1 == 127 and gstt.currentbpm > 0:
newtempo(gstt.currentbpm-1)