108 lines
2.0 KiB
Python
108 lines
2.0 KiB
Python
|
#!/usr/bin/python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
# -*- mode: Python -*-
|
||
|
|
||
|
'''
|
||
|
|
||
|
Ableton Link
|
||
|
|
||
|
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)
|
||
|
|
||
|
|
||
|
|