Last active
November 15, 2021 16:30
-
-
Save jean-emmanuel/01f18008bc73faafff1a272896e92dda to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/python3 | |
import liblo | |
import time | |
from signal import signal, SIGINT, SIGTERM | |
# voir Édition > Préférences > Surfaces de contrôle > Open Sound Control | |
# le port osc d'ardour (ardour_port) est indiqué après "Connection" | |
ardour_port = 3820 | |
# le port de notre script (local_port) n'a pas d'importance si | |
# l'option "Port Mode" dans ardour est "Auto" | |
local_port = 6789 | |
# création du serveur osc | |
server = liblo.Server(local_port) | |
# état local d'ardour | |
ardour_state = { | |
'play': False, | |
'record': False, | |
'play_and_rec': False | |
} | |
# définition de la fonction de traitement des messages osc | |
# reçus par le serveur | |
def receive_osc(address, args, types, src): | |
# on utilise les messages qui indiquent l'état des boutons | |
# play / rec pour enregistrer l'état localement | |
if address == '/transport_play': | |
ardour_state['play'] = bool(args[0]) | |
if address == '/rec_enable_toggle': | |
ardour_state['record'] = bool(args[0]) | |
# si la combinaison des deux états a changée, alors on agit | |
play_and_rec = ardour_state['play'] and ardour_state['record'] | |
if play_and_rec != ardour_state['play_and_rec']: | |
ardour_state['play_and_rec'] = play_and_rec | |
if play_and_rec: | |
print('Enregistrement démarré') | |
print('Extinction de la ventilation') | |
else: | |
print('Enregistrement arrêté') | |
print('Démarrage de la ventilation') | |
# on ajoute la fonction receive_osc au serveur osc | |
server.add_method(None, None, receive_osc) | |
# signaux d'arrêt du script | |
run = True | |
def stop(*args): | |
global run | |
run = False | |
signal(SIGINT, stop) | |
signal(SIGTERM, stop) | |
# on envoie un message à ardour pour qu'il sache qu'on existe | |
# et qu'il nous envoie des messages quand il change d'état | |
server.send(3820, '/transport_play', 1.0) | |
server.send(3820, '/transport_play', 0.0) | |
# boucle principale: on recoit les messages osc | |
# qui sont passés à la fonction receive_osc() et on attend 10ms | |
# en boucle jusqu'à ce qu'on quitte | |
print('Serveur osc en écoute sur le port %i.' % local_port) | |
print('Ctrl+c pour stopper.') | |
while run: | |
while server.recv(0): | |
pass | |
time.sleep(0.01) | |
# on nettoie en partant | |
server.free() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment