Skip to main content

5 - Les serveurs son : JACK, PipeWire, PulseAudio et autres...


Commandes pour gérer le "transport/synchro"

Salut tous

Une petite question.

Je cherche les commandes/options utilisées par qjackctrl (ou gjacktransport...) pour "gérer les commandes de transport/synchro" de Jackd. Le but est très simple, assigner ces commandes (principalement play/pause-stop) aux divers lanceurs d'un dock, ou à des raccourcis clavier. Pour avoir les contrôles globaux "à portée de main".


Merci d'avance 😉

@+
Bon ben je vais être carrément attentif aux réponses car je cherche la même chose, depuis une semaine, sans succès.
Je cherche à le faire depuis un contrôleur midi (à partir duquel je peux au besoin balancer des raccourcis clavier globaux justement).

- QJackMMC / JackCtlMMC : ne chope pas mes messages midi pour une obscure raison 😢

- jack_transport : marche en ligne de commande mais par un prompt donc pas possible de lui passer des commandes par script 😢

- mididings + xdotools + une appli graphique : ne marche que si les fenêtres on le focus mais justement mon but c'est de lancer le transport sans perdre le focus de ce que je suis en train de faire 😢

Je trouve ça dingue de pas pouvoir lancer les commandes de transport via script 🙄

Des suggestions ?
Salut

doosc écrit:
- jack_transport : marche en ligne de commande mais par un prompt donc pas possible de lui passer des commandes par script 😢


Merci pour l'info, je n'avais pas essayé ça. C'est toujours bon à savoir.

Pour ce qui est des solutions de "contournement", si on commence à chaîner des xdotools, wmctrl, devilspie... on a pas fini 😀 (surtout pour faire juste "play"!)


doosc écrit:
Je trouve ça dingue de pas pouvoir lancer les commandes de transport via script 🙄

+1000
(ou c'est juste qu'on a pas encore trouvé comment le faire...)

@+

Edit: Je viens de survoler les sources de gjacktransport et gjackclock (pensant y trouver les commandes), malheureusement ceux-ci passe justement par jack_transport pour gérer les contrôles... :/
France
Salut,

J'ai un peu le même soucis que vous pour l'assignation des contrôleurs de mon clavier usb. N'ayant pas trouver de solution directe, j'ai réussi à contourner le problème : c'est par ici.

Christophe


edit :
1- pour les soucis de focus, au pire dans le script tu rajoutes le focus sur ton appli à la fin du script
2- ces solutions de contournement peuvent être globales et pas seulement liées au transport (sauvegarde, ouverture de fichier, changement de pistes, etc...)
@cm35:

Va pour xdotools alors. Je testerais ce soir

En fait, ces fameuses solutions de "contournement", c'était ma première idée (et xdotools en particulier, je m'en sers pour autre chose).

Ma remarque était due au fait que j'utilise (justement) déjà des solutions de placement/dimensionnement (devilspie + wmctrl + rc.xml de OpenBox), et que je pensais qu'une action aussi simple que lancer la lecture du transport de jackd devait certainement avoir une solution plus "directe" 🙁

Merci tout de même 😀

@+
France
Salut,

Entièrement d'accord avec toi, même pour une action "simple" tout ne marche pas forcément...
J'ai beaucoup cherché avant de bidouiller mididings, mon problème étant que Rosegarden voyait bien le signal MIDI mais il n'en tenait pas compte 😢.

Bon courage et tiens nous au courant

Christophe
cm35 écrit:
Salut,

J'ai un peu le même soucis que vous pour l'assignation des contrôleurs de mon clavier usb. N'ayant pas trouver de solution directe, j'ai réussi à contourner le problème : c'est par ici.

Christophe


Salut Christophe,

j'étais justement parti de ton tuto pour mes essais car j'ai récemment fait l'acquisition d'un axiom 49 advanced avec pleins de jolis boutons partout, d’où l'envie de m'en servir 😉

J'ai compris que c'était faisable avec qtractor, que je n'utilise pas et bien que j'imagine que c'est faisable avec d'autres je voudrais une solution bcp plus générique...

...et je crois que viens enfin de trouver 😎

Il y a une librairie python qui s'appelle pyjack, j'ai vu que falkTX avait bossé dessus donc c'est forcément bien 😉

Je précise que je n'ai jamais fait de python de ma vie mais j'ai réussi à installer le truc en suivant les instructions du readme. De là j'ai trouvé un répertoire démo avec un truc qui s'appelle qtransport.py, j'ai ouvert par curiosité et vu que c'était plutôt facile à piger comme truc.
A coup de copier coller je me suis déjà fait un script qui lance et arrête la lecture du transport :

Copy to clipboard
import jack jack.attach("transport_play") state = jack.get_transport_state() # Rolling if (state == 1): jack.transport_stop() # Stopped else: jack.transport_start()


le script s'appelle transport_play.py et je l'ai lancé en tapant
Copy to clipboard
python transport_play.py


De ce que j'ai pu comprendre :

import jack -> importe la librairie pyjack
jack.attach("transport_play") -> connecte le script à jack
state = jack.get_transport_state() -> récupère l'état du transport
if (state == 1): jack.transport_stop() -> si en route l'arrête
else: jack.transport_start() -> sinon le met en route

J'ai vu que les fichiers de démos étaient encore plein d'exemples pour rembobiner, mettre à 0, etc.

C'est pas aussi immédiat que je l'aurai voulu mais point de xdotools et ça marche quelque soit les applis utilisées.

Dès que j'ai le temps je croise avec le tuto de Christophe pour assigner tout ça via mididings 🙀
Bon et bien comme convenu, ça fonctionne très bien avec xdotool (sans "s" d'ailleurs, on se fourvoie depuis 3 posts...)

Pour l'exemple, en se servant de gjackclock:
Copy to clipboard
#!/bin/bash WID=`xdotool search --class "gjackclock" | head -1` DESK=`xdotool get_desktop` xdotool windowactivate $WID xdotool key space xdotool set_desktop $DESK


Et au passage, je pense pouvoir régler le soucis de doosc (parceque j'ai galéré entre windowfocus et windowactivate...) 😀

doosc écrit:
- mididings + xdotools + une appli graphique : ne marche que si les fenêtres on le focus mais justement mon but c'est de lancer le transport sans perdre le focus de ce que je suis en train de faire


L'idée c'est du script, c'est de choper le bureau sur lequel je suis avant de lancer PLAY, pour y revenir ensuite. Openbox me permettant de récupérer le focus sur la dernière fenêtre à l'avoir eu sur ce bureau... donc ce que j'étais en train de faire.

En outre, on peut tout à fait imaginer (si son WM ne redonne pas le focus) forcer la "reprise de focus" par l'appli voulue, genre:
Copy to clipboard
#!/bin/bash WIDORGN=`xdotool getactivewindow` DESKORGN=`xdotool get_desktop` WIDCIBLE=`xdotool search --class "gjackclock" | head -1` xdotool windowactivate $WIDCIBLE xdotool key space xdotool set_desktop $DESKORGN xdotool windowfocus $WIDORGN


Bon... le seul problème c'est la latence engendrée par l'exécution du script... (c'est pas aussi "direct" que par un coup de barre d'espace dans un soft...

C'était vraiment une question posée "pour info" (et la solution proposée me conviens pour l'usage que j'ai de la fonction), mais la problématique originale semble assez intéressante.

Du coup, je ne sais pas trop quoi faire. Je passe en résolu ou je laisse ouvert ?

Modo, si tu lis ces lignes 😀

@+

Edit: Je n'avais pas vu ta dernière réponse doosc...

Effectivement, un script python, c'est intéressant (et me paraît perso, plus "propre" que via xdotool. pas d'histoire de focus, etc...). Mais si tu dis qu'il y a de la latence (idem pour la solution xdotool), alors c'est pas encore la panacée.
regisburin écrit:
Edit: Je n'avais pas vu ta dernière réponse doosc...

Effectivement, un script python, c'est intéressant (et me paraît perso, plus "propre" que via xdotool. pas d'histoire de focus, etc...). Mais si tu dis qu'il y a de la latence (idem pour la solution xdotool), alors c'est pas encore la panacée.


En fait, je ne parlais pas de latence car je n'en ai pas constaté 😉
C'était plutôt la méthode que je ne trouvais pas très immédiate.
J'aurai plutôt aimé un "bête" jack_transport --start par exemple.

Sinon la méthode est quand même assez élégante dans l'absolu, j'imagine que puisque mididings et pyjack sont tous les deux en python il y a moyen de recréer toutes les commandes de transport en un seul script intégré.

J'ai commencé un script que j'ai appelé "trigger_play" :

Copy to clipboard
from mididings import * import jack jack.attach("trigger_play") run ( [ (CtrlFilter(117) & CtrlValueFilter (127)) % System("/home/christophe/./qtractor_espace"), (CtrlFilter(114) & CtrlValueFilter (127)) % System("/home/christophe/./qtractor_retour"), ] )


Mais je ne sais pas comment remplacer la partie System("/home/christophe/./qtractor_espace") par les commandes pyjack...

Des idées ?
doosc écrit:
''En fait, je ne parlais pas de latence car je n'en ai pas constaté 😉
C'était plutôt la méthode que je ne trouvais pas très immédiate.
J'aurai plutôt aimé un "bête" jack_transport --start par exemple.''


Ok compris

Parce que moi, je parlais d'une véritable latence (audible) avec xdotool.

Bon, ça à l'air cool comme projet (je relaierais l'info), mais j'ai du mal à l'installer pour tester 🙄

Copy to clipboard
$ sudo python setup.py install [sudo] password for alex: You don't seem to have the jack headers installed. Please install them first


D'après install.py, un fichier jack.h est sensé se trouver dans /usr/local/include/jack/ ou encore /usr/include/jack/... mais pas de ça chez moi...

Par contre:
Copy to clipboard
$ locate -b '\jack.h' /usr/src/linux-headers-2.6.32-35/include/sound/jack.h /usr/src/linux-headers-2.6.32-35-lowlatency/include/config/snd/jack.h /usr/src/linux-headers-2.6.32-35-lowlatency/include/config/snd/hda/input/jack.h


Je peux faire un lien symbolique avec le premier? (les 2 autres étant eux-même des liens)

@+
regisburin écrit:
Bon, ça à l'air cool comme projet (je relaierais l'info), mais j'ai du mal à l'installer pour tester 🙄


J'ai eu aussi un message du style, après ça j'ai glané des infos à droite à gauche et du coup j'avais installé les packages suivants sur ubuntu :

build-essential
jack-dev
python-dev

Après ça passait nickel.