Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request] Add CV / OSC outputs #29

Open
wargreen opened this issue Oct 18, 2018 · 35 comments
Open

[Feature Request] Add CV / OSC outputs #29

wargreen opened this issue Oct 18, 2018 · 35 comments
Labels
demande de fonctionnalité Nouvelle fonctionnalité demandée

Comments

@wargreen
Copy link

Is it possible to get a CV/OSC outputs for play audio, X/Y movements or grain play trigger ?

Thanks !

@jpcima
Copy link
Member

jpcima commented Oct 18, 2018

Is it possible to get a CV/OSC outputs for play audio, X/Y movements or grain play trigger ?

Yes 😁

To elaborate about this, it is planned to have externals control as MIDI learn.
A controller would be matched to one parameter of one particular selection.
CV is nothing special, it can operate in the same way.

For osc, I imagine it can be setup as a udp local server. To be honest I'm not familiar with common practice of osc programming with unix and jack.

I imagine that Frontieres can answer a osc call structured as such, for example:
/cloud/1/x-position 77
/cloud/2/volume 1.0

Would this be the idea, or anything else?

@olof29
Copy link
Collaborator

olof29 commented Oct 19, 2018

i don't know anything about CV, but i use OSC with open stage control ( https://osc.ammd.net/ ) , and, yes it could be a real good idee to be able to control clouds parameters with it.
in http://opensoundcontrol.org/guide-osc-libraries it is mention of 4 libraries we could use.
one seems too old (OSC-Kit), one is minimal (oscpack) but in c++, one other had no documentation (Wosclib), but seems powerfull, and ther last one seems to be the most used (liblo) written in c, and cross-platteform. this last one seems to be the best choice.

using open stage control as osc server between control surfaces (or tablet, phone, wii stick ...), we could just give an osc adress to each cloud control, and the learn for control surface would be done in open stage control.

@jpcima
Copy link
Member

jpcima commented Oct 19, 2018

There's also rtosc which was presented at the Linux Audio Conference 2018.
Supposedly this one improves the realtime characteristics of previous libraries, so I would look at this one in priority.

@wargreen
Copy link
Author

In my idea we can use OSC in input and output.
Be able to move clouds and edit them could be really fine, and get some datas from clouds also.
I think to :
Input & output

/cloud/[CloudID]/[X,Y,nparm...]
/interface/...

Output (both in absolute coord & normalised [-1..1] inside the cloud)

/cloud/[CloudID]/grain/[GrainNbr]/[X,Y,Trig,Z?]
/cloud/[CloudID]/lfo/value

And maybe (dreaming) a "mixed" values of the grains position, volume-weighted :
/mixedgrain/[GrainNbr]
That can represent the average position of the Grain N in all clouds, with the weight of the cloud's volume parameter.
Why all of this ? Cause it seem to be a very good base for a spatialisation console or multimedia art !!!

@jpcima
Copy link
Member

jpcima commented Oct 20, 2018

I guess this must be even simpler to make than MIDI, since it doesn't have any learning involved.

The one thing I think of : the load+save mechanism must be careful about preserving the order, such that CloudID remain identical from one session to the next.

That can represent the average position of the Grain N in all clouds, with the weight of the cloud's volume parameter.

Seems feasible.

@trebmuh
Copy link
Member

trebmuh commented Oct 20, 2018

z'êtes mignons à causer anglais 😉

@olof29
Copy link
Collaborator

olof29 commented Oct 23, 2018

surtout uniquement dans cette issue ci.
c'est la faute de wargreen...
et j'avoue que deja que je comprends pas toujours tout en français, mais en anglais ça n'améliore pas mon sentiment d'etre un poil à la ramasse.

@olof29
Copy link
Collaborator

olof29 commented Oct 23, 2018

en jetant un coup d'oeil à rtosc, j'ai remarqué 2 choses interessantes (entre autres)

  • c'est bien plus rapide que les autres bibliotheques.
  • rtosc contient une sorte de table de conversion midi qui permet, apparemment, une fois le controle par osc implémenté, de l'appliquer aux messages midi.
    si j'ai bien compris cette deuxieme remarque, ça voudrait dire qu'il serait preferable de se pencher d'abord sur le controle par osc, et ensuite de voir la question du midi (voir d'integrer les deux ensemble)

@wargreen
Copy link
Author

Salut,
Le fait de parler anglais permet de s'ouvrir à des contributeur de partout dans le monde, c'est la magie des zinternetz !

@jpcima
Copy link
Member

jpcima commented Nov 11, 2018

J'ai mis la première brique du traitement des messages en OSC: un serveur local en UDP.
Le serveur est géré par la liblo, qui est désormais une dépendance supplémentaire de la construction.

Si j'ai bien compris la logique, derrière liblo, on pourra implémenter rtosc pour le dispatch des messages et une gestion de paramètres. Par ailleurs, rtosc est supposé fournir une file de messages communicante avec le fil audio.

A présent, le logiciel ne fait qu'afficher les messages entrants sur la console.
Aussi, à partir du menu OSC on peut accéder à l'adresse, et lancer un open-stage-control connecté sur l'adresse en question.

@trebmuh
Copy link
Member

trebmuh commented Nov 11, 2018

Le fait de parler anglais permet de s'ouvrir à des contributeur de partout dans le monde, c'est la magie des zinternetz !

s/des contributeur de partout dans le monde/des contributeurs anglophones de partout dans le monde/g
😉

@jpcima
Copy link
Member

jpcima commented Nov 13, 2018

Support de l'OSC, suite:

Il y a un traitement de messages par rtosc.
Le volume des nuages est implémenté, étant pour l'instant l'unique contrôle disponible.

  1. on démarre Frontières, on crée un nuage avec G
  2. à partir du menu OSC, on choisit de "lancer le contrôleur", ceci démarre open-stage-control.
  3. on fait "nouvelle session", clic-droit sur la zone d'édition, "nouveau widget" > "slider" > "fader"
  4. dans la propriété "osc" > "addresse" on met "/cloud/1/volume"
  5. dans "fader" > "range" on peut mettre les min-max qu'on veut, unités en dB (example -20, +20 dB)
  6. le fader pilote désormais le volume du nuage

remarque: les identiants de nuage commencent à 1 pour le premier, puis 2 ensuite, 3 etc..
Les identifiants ne sont pas réutilisés à la suite d'une suppression.

@olof29
Copy link
Collaborator

olof29 commented Nov 13, 2018

chez moi le lanceur d'open stage control ne le lance pas, je l'utilise piourtant depuis longtemps, mais sans doute y a t'il un type d'install particulier ?

@jpcima
Copy link
Member

jpcima commented Nov 13, 2018

Le lanceur fait appel à la commande open-stage-control -s 0.0.0.0:<numéro port>.
Cette commande fonctionne-t-elle quand elle est lancée depuis un terminal ?
Le numéro de port est visible dans l'URL affichée en tête du menu OSC.

De mon côté j'ai open-stage-control 0.37.2.

@olof29
Copy link
Collaborator

olof29 commented Nov 13, 2018

c'est bon, j'ai réintalle la derniere version de OSC, pas de souci (je pense que j'avais installé la version "linux" et non la version debian, donc OSC ne se lançait que de son repertoire

@olof29
Copy link
Collaborator

olof29 commented Nov 13, 2018

il serait bon de pouvoir choisir son port, je pense.
j'ai essayé par exemple de relier frontiere a ardour via OSC, mais ardour impose le port 3819, et frontieres le port 14751, donc, impossible de faire le lien entre les deux dans OSC.

@jpcima
Copy link
Member

jpcima commented Nov 13, 2018

Cela ne fonctionne pas car les logiciels se comportent tous les deux en serveurs.
J'ai trouvé quelques infos ici http://linuxmao.org/Ardour+2+-+utilisation+avec+OSC

C'est quoi précisément "faire le lien" entre les deux ?

@olof29
Copy link
Collaborator

olof29 commented Nov 13, 2018

ah , en fait le port change a chaque lancement ? d'ou vient ce choix de port dans le programme, j'ai cherché en vain ?

@olof29
Copy link
Collaborator

olof29 commented Nov 13, 2018

ça peut quand meme fonctionner entre les deux, je pense : il ya une fonction dans OSC qui permet de copier les valeurs d'un controle vers un autre, ce qui devrait permettre d'avoir un controle qui est tourné vers frontieres, et un autre vers ardour, qui copient leurs valeurs lorsqu'un d'entre eux change. ça devrait faire le pont.

@jpcima
Copy link
Member

jpcima commented Nov 13, 2018

Il prend un port disponible aléatoire. C'est comme faire bind() en utilisant le port 0.
On peut ajouter une option pour le choisir.

Dans MyRtOsc, on peut indiquer un port à l'ouverture.
bool open(const char *port = nullptr);

@olof29
Copy link
Collaborator

olof29 commented Nov 13, 2018

et les fonctionnalités d'ardour en rapport avec OSC ont considerablement évolué depuis la page que tu m'as citée
personnellement, je le pilote deja via OSC

@olof29
Copy link
Collaborator

olof29 commented Nov 13, 2018

C'est quoi précisément "faire le lien" entre les deux ?

cela permettra de sequencer entierement tous les parametres de frontieres qui beneficieront du controle par OSC, c'est vraiment une fonctionnalité énorme !
(bien sur , pour ça, il serait mieux que frontieres ne se contente pas de recevoir mais emette aussi)

@jpcima
Copy link
Member

jpcima commented Nov 13, 2018

J'ai strictement aucune idée du fonctionnement d'OSC avec Ardour.
Il y a une documentation, un exemple ?

@olof29
Copy link
Collaborator

olof29 commented Nov 13, 2018

j'ai fait une page de doc la la dessus sur linuxmao
https://linuxmao.org/Contr%C3%B4ler+Ardour+5+avec+Open+Stage+Control

il y a un exemple plus fourni aussi de fichier pilote là : https://github.com/jean-emmanuel/ardour-control

et bien sur, la doc d'ardour : http://manual.ardour.org/using-control-surfaces/controlling-ardour-with-osc/

@wargreen
Copy link
Author

Hey,
Ardour supporte en effet le control via osc depuis bien longtemps, mais le moteur osc est entierement revu pour la version 6, ce qui est pas un mal !

Au niveau de la découverte des ports en cas de bind aleatoire, le dev du NON-daw a implementé Hello dans ses softs dont Non-session-manager.
https://github.com/original-male/non/blob/master/nonlib/OSC/Endpoint.C#L216
J'ai tenté un proxy ici https://github.com/wargreen/nonOSCnat

Sinon, pas mal de logiciels répondent a l'host:port qui a emit un control.

@olof29
Copy link
Collaborator

olof29 commented Nov 22, 2018

j'ai réalisé une fenetre d'options dans laquelle on peut gerer OSC en y changeant le port et en y lançant le controleur.
pour ça, j'ai déplacé le lancement du controleur (open sound control) dans une fenetre d'options affichable par le menu edit/options ou OSC/control
on peut aussi y changer le port OSC et relancer osc
en pr

@olof29
Copy link
Collaborator

olof29 commented Nov 22, 2018

bon, apparemment il y a en effet un souci pour se connecter à Ardour via open sound control.
si, comme dit plus haut, c'est dû au fait que ardour et frontieres se comportent tous les deux en serveurs sur le même port, un question me vient tout de suite :

  • ne peut on pas utiliser osc en client seulement sur un port, et en serveur sur un autre ?

@jpcima
Copy link
Member

jpcima commented Nov 22, 2018

ne peut on pas utiliser osc en client seulement sur un port, et en serveur sur un autre ?

Oui je sais que c'est tout à fait possible.
Il faut certainement étudier la possibilité que @wargreen a indiquée un peu plus haut :

Sinon, pas mal de logiciels répondent a l'host:port qui a emit un control.

J'ai souvent observé qu'il était possible de faire un envoi en "send from" afin que le serveur auquel on cause récupère l'adresse et établisse la connexion en sens retour.

@trebmuh
Copy link
Member

trebmuh commented Nov 22, 2018

Si ça peut aider, j'ai récemment intégré jackminimix et ai traduit son README dans sa page de documentation LZK-2 où l'on peut lire : "Les réponses sont renvoyées au port/socket d'où elles ont été envoyées.".

@olof29
Copy link
Collaborator

olof29 commented Nov 22, 2018

en fait, j'arrive à faire un truc assez complexe, mais j'ai l'impression d'avoir mis le doigt sur un bug d'open sound control, mais n'en suis pas sur, c'est peut etre un probleme de logique chez moi, j'ai envoyé un mail à jean ammanuel à ce sujet.
je peux faire ensorte que ardour pilote open sound control, que open sound control passe l'info à un autre fader de open sound control, qui lui pilote frontieres, mais bizarrement, quand je bouge a la main dans open sound control, les deux faders bougent et ça change dans frontieres, mais quand je bouge dans ardour, les deux faders bougent aussi dans open sound control, mais rien n'est transmis dans frontieres.
à suivre...

@olof29
Copy link
Collaborator

olof29 commented Nov 22, 2018

voici la réponse de Jean emmanuel :

Salut,
Open-stage-control ne renvoie pas de message osc quand il reçoit des message qui mettent à jour les widgets. Le plus simple dans ton cas serait de rediriger les messages reçu par o-s-c depuis un custom module pour les envoyer à Frontières automatiquement.

(function(){

    return {

        oscInFilter: function(data){

            var {address, args, host, port} = data

            // mirror messages to Frontieres
            sendOsc({
                address: address,
                args, args,
                host: '127.0.0.1',
                port: 3821
            })

            // let o-s-c receive the message
            return {address, args, host, port}

        }
        
    }

})()

message édité par trebmuh pour une meilleure lisibilité

@trebmuh
Copy link
Member

trebmuh commented Nov 22, 2018

@olof29 sais-tu que sur github, tu peux envoyer une notification à un utilisateur ayant un compte tout simplement comme ceci : @jean-emmanuel ?

@olof29
Copy link
Collaborator

olof29 commented Nov 22, 2018

non, j'en decouvre tous les jours :) merci !

@trebmuh
Copy link
Member

trebmuh commented Nov 22, 2018

😉

@trebmuh trebmuh added the demande de fonctionnalité Nouvelle fonctionnalité demandée label Mar 17, 2019
@olof29
Copy link
Collaborator

olof29 commented Oct 27, 2020

je suis en train de me repencher sur le controle osc et de creer une surface de controle adaptée pour frontieres sur open stage control.
je me retrouve devant plusieurs questions :

  • les messages permettant de piloter le controleur sont ils à mettre dans la categorie rtcloud ou nonrtcloud ? (j'ai implementé un update dans un timer dans la fenetre controleur)

  • comment faire pour renvoyer les messages osc afin d'actualiser open stage control en cas de modification sur frontieres directement ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
demande de fonctionnalité Nouvelle fonctionnalité demandée
Projects
None yet
Development

No branches or pull requests

4 participants