linuxmao-org / Frontieres

An Interactive Granular Sampler (unofficial fork)
GNU General Public License v3.0
26 stars 2 forks source link

[Feature Request] Add CV / OSC outputs #29

Open wargreen opened 6 years ago

wargreen commented 6 years ago

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

Thanks !

jpcima commented 6 years ago

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

Yes :grin:

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 commented 6 years ago

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 commented 6 years ago

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 commented 6 years ago

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 commented 6 years ago

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 commented 6 years ago

z'êtes mignons à causer anglais :wink:

olof29 commented 5 years ago

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 commented 5 years ago

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

wargreen commented 5 years ago

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

jpcima commented 5 years ago

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 commented 5 years ago

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 :wink:

jpcima commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

ç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 commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

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

olof29 commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

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 :

jpcima commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

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 commented 5 years ago

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

olof29 commented 5 years ago

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

trebmuh commented 5 years ago

:wink:

olof29 commented 3 years ago

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 :