Skip to content

Instantly share code, notes, and snippets.

@jean-emmanuel
Last active November 15, 2021 16:30
Show Gist options
  • Save jean-emmanuel/01f18008bc73faafff1a272896e92dda to your computer and use it in GitHub Desktop.
Save jean-emmanuel/01f18008bc73faafff1a272896e92dda to your computer and use it in GitHub Desktop.
#!/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