linuxmao-org / Frontieres

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

créer une sortie audio stereo séparée par nuage en plus du master #8

Closed olof29 closed 5 years ago

olof29 commented 5 years ago

dans le but de pouvoir appliquer des traitements separes sur chaque nuage, je voudrais creer une sortie audio stereo unique pour chaque nouveau nuage, qui serait une copie conforme de ce que ce nuage envoit au master. mes besoins : savoir comment creer ces sorties audio, ou les creer, et comment y assigner la production sonore du nuage

jpcima commented 5 years ago

savoir comment creer ces sorties audio

Il y a moyen d'aboutir à ça mais y a des petites complications. C'est surtout la bilbliothèque RtAudio sur laquelle le logiciel est bâtie. Je t'explique. Cette biblio est un support générique de toutes les interfaces audio (Jack, aussi Alsa et les autres) Elle a moins de capacités que Jack en propose.

  1. tu peux pas créer des ports dynamiquement, contrairement à jack (je mets un nouveau cloud, paf 2 nouveau ports apparaissent)
  2. il veut pas te laisser créer + de ports que ce dont dispose la carte son à laquelle tu connectes.

Voila comment tu peux faire. (sinon, faire directement du jack est une solution)

  1. tu réserves dès le début un nombre de ports max dont tu te serviras (ex: 64 ports)
  2. en jack, j'ai moi même soumis ce patch à RtAudio, qui permet d'avoir autant de sorties qu'on veut lorsqu'on utilise une sortie jack et qu'on utilise des connexions virtuelles. Pour celà il faut modifier le programme pour construire le flux de RtAudio avec RTAUDIO_JACK_DONT_CONNECT
jpcima commented 5 years ago

Ensuite pour le mixage ça se passe ici. Tu peux voir que ça itère, sur tous les clouds et ça les écrit dans la sortie en stéréo entrelacé. Faudra modifier ce code afin de pouvoir travailler en N-canaux, N > 2.

https://github.com/linuxmao-org/Borderlands/blob/a37549bb89f4c595261804b604da966b05a849e5/Borderlands.cpp#L241-L246

EDIT correction

olof29 commented 5 years ago

je ne cherche pas vraiment à travailler en n canaux, mais à envoyer la meme chose sur les deux canaux principaux et sur deux canaux dediés à chaque cloud

olof29 commented 5 years ago

et utiliser jack qui permet ça à la place de rtaudio ? ça serait faisable, il y aurait des inconvenients ?

jpcima commented 5 years ago

On peut utiliser jack à la place de rtAudio. Avantage : c'est une bibliothèque facile à utiliser, un peu plus riche. Inconvénient : ça ne sera pas compatible avec un usage normal d'utilisateur windows ou mac, ou même linuxien qui n'est pas un utilisateur de jack. alors, ce serait le mieux d'avoir accès aux 2 choix, par exemple à l'aide d'une compilation conditionnelle.

avec jack tu auras une possibilité de créer un port dynamique lorsque tu fais un nouveau cloud (cf jack_port_register/jack_port_unregister)

trebmuh commented 5 years ago

alors, ce serait le mieux d'avoir accès aux 2 choix, par exemple à l'aide d'une compilation conditionnelle.

Encore mieux, un fanion de démarrage en CLI, comme ça, on peut choisir soit l'un, soit l'autre à l'exécution et on est pas dépendant des mainteneurs de distributions/paquets qui seraient obligés de faire un choix Cornélien ici. :nerd_face:

olof29 commented 5 years ago

mais pour que borderlands fonctionne sous linux, il faut imperativement que jack soit lancé, non ?

olof29 commented 5 years ago

je reviens sur ce fil, pour discuter de nouveau du choix à faire ici. je m'explique :

jpcima commented 5 years ago

il est impossible de faire tourner Frontieres actuellement sous linux sans lancer jack. je me trompe ?

Pas tout à fait. En RtAudio il faut activer une compilation conditionnelle des interfaces supplémentaires à l'aide d'un define. Il est vrai que j'ai seulement activé jack dans le fichier de projet, tu peux ajouter les autres. (par ailleurs c'est possible d'exprimer une condition en qmake sur l'os utilisé, de sorte à activer aussi windows et mac)

Frontieres.pro

DEFINES += __LINUX_ALSASEQ__ # MIDI ALSA
DEFINES += __UNIX_JACK__ # audio Jack
##DEFINES += __LINUX_ALSA__ # audio ALSA
##DEFINES += __LINUX_PULSE__ # audio Pulse

Je pourrai poser les bases d'une variante en jack, ça n'a rien de compliqué. Mais de préférence pas avant de fusionner les quelques trucs en chantier actuellement, ce qui risquerait de déclencher des conflits à tout va.

olof29 commented 5 years ago

il serait bon, de toute façon , de pouvoir choisir, à la maniere de hydrogen, par exemple, si on veut utiliser des sorties separees ou non, depuis l'interieur du logiciel.

olof29 commented 5 years ago

il serait suffisant, je pense, d'ajouter un parametre canal audio aux clouds, et de creer 16 canaux audio stereo au lieu d'un, dans l'optique de l'utilisation midi. cela permettrait deja en utilisation midi de permettre d'envoyer chaque combinaison (canal midi) vers une sortie différente, et d'y appliquer à l'extérieur de Frontieres, les effets qui nous conviennent, d'enregistrer séparément...

(voir Pilotage MIDI #5)

si j'ai bien compris, cela ne serait pas trop compliqué ?

olof29 commented 5 years ago
olof29 commented 5 years ago

je pense qu'on peut considérer maintenant cette fonctionnalité comme implantée, depuis l'autoconnect et le choix du nombre de sorties passés en paramètres