IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Multimédia Java Discussion :

[VST] Développer un VST/VSTI multiplateforme en JAVA (jvstwrapper / jvaptools)


Sujet :

Multimédia Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut [VST] Développer un VST/VSTI multiplateforme en JAVA (jvstwrapper / jvaptools)
    Bonjour,

    Dans le cadre d'une étude d'un éventuel développement en JAVA d'interface VST/VSTI pour contrôler mes synthétiseur, je cherche :
    • des documents sur l'architecture VST car la doc de référence de steinberg est bien maigre ...
    • éventuellement des dev ayant déja développer des VST en java pour qu'ils me parlent des ressources qu'ils ont trouvés, des difficultés rencontrés ...


    Le wrapper qui sera utilisé est jvstwrapper, utilisé via la librairie jvaptools.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 10

  3. #3
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 916
    Par défaut
    Suite d'AF...
    Mon expérience est la suivante:
    - j'ai uniquement bossé avec jVSTwRApper, pas avec JVaptools.

    Difficultés majeures:
    - (inhérente à la norme VST): multitude des contextes d'appels: il y a autant de manière qu'un host se connecte au VST qu'il existe de host.
    - Ableton Live !!!!!!! Ton plug doit se configurer de manière spéciale s'il se rend compte que le Host est Live ! (Voir sur KvR)
    - JavaSound (comment récupérer les lignes Midi In et Out disponible sur ton système, comment faire un MidiLearn, ...)

    Ressources intéressantes:
    - Pour le monde VST: sur Kvraudio. Quelques posts intéressants:
    VST-Plugin Unit Test
    How to know if the transport is playing or not ?
    Learning MIDI VST 2.4 Programming
    what midi plugins are you using with Ableton Live ?
    Any users of jVSTwRapper out there?

    - Pour Java Sound: Java Sound Ressources

    J'espère que te voilà un peu avancé.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Merci pour tes ressources, il y en as que je ne connaissait pas. Je vais continuer à lire.

    ----

    Ce que je souhaite faire, c'est des contrôleurs VST pour mes synths hards.
    2 utilités :
    - l'édition des patchs, et voir le temps réel pour une utilisation "live"
    - utiliser le fait que cela utilise la technologie VST pour "transformer" du hard en VST, de manière transparente.
    A l'utilisation, je souhaite que dans mon hôte on choisisse le VST en entée sortie comme un VST.

    Mais je souhaite également que mon VST puisse accéder directement (via mon host HST) aux ressources système (audio, midi). Cette configuration aurait put se faire par un menu en récupérant effectivement les ressources système disponibles.

    En Prenant l'hypothèse que seul le midi A est instancier dans une piste midi de l'HOST, ce que je veut en communication midi :

    HOST-Sequenceur[midi A] <--> VSTI <--> HOST-VST API[midi B]

    Hors il me semble avoir compris, que seul les sorties instanciés peuvent êtres appelés par le VST ....

    ----

    Pour le "MidiLearn", j'aimerais profiter en faite des possibilités de l'automap de notation pour éviter toute emmerdes, mais je ne sais pas encore comment il récupère les étiquettes ...

    ----

    Dans les sources que je voit, j'ai du mal à comprendre le minimum requis, car il semble qu'il y as des choses qui "fonctionnent" sans être forcément prêt à tout les hôtes ...

    ---

    Java Sound j'était tombé sur le lien, et j'en ai vu des exemples mais j'ai du mal à comprendre ou il faut l'utiliser car je pensait qu'il fallait utiliser préférablement, l'API VST avec jVSTwrapper de manière exclusive.


    ----------------------

    Pour le problème d'hôtes, le problèmes n'est pas partiellement réglé en testant les limites de l'hôte avec la fonction "CANDO" ?

  5. #5
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 916
    Par défaut
    Je t'avoue que je ne comprends pas trop le schéma de ce que tu souhaites faire. Par exemple, où interviennent tes synthés dans la chaîne Midi.
    Et quelle est la chaîne audio ?
    Citation Envoyé par shamk Voir le message
    Ce que je souhaite faire, c'est des contrôleurs VST pour mes synths hards.
    2 utilités :
    - l'édition des patchs, et voir le temps réel pour une utilisation "live"
    - utiliser le fait que cela utilise la technologie VST pour "transformer" du hard en VST, de manière transparente.
    A l'utilisation, je souhaite que dans mon hôte on choisisse le VST en entée sortie comme un VST.

    Mais je souhaite également que mon VST puisse accéder directement (via mon host HST) aux ressources système (audio, midi). Cette configuration aurait put se faire par un menu en récupérant effectivement les ressources système disponibles.

    En Prenant l'hypothèse que seul le midi A est instancier dans une piste midi de l'HOST, ce que je veut en communication midi :

    HOST-Sequenceur[midi A] <--> VSTI <--> HOST-VST API[midi B]

    Hors il me semble avoir compris, que seul les sorties instanciés peuvent êtres appelés par le VST ....
    De ce que je connais, tu ne peux pas depuis ton plug décider vers quelle sortie Midi du host tu vas envoyer ton midi. Si tu veux que ton plug envoie le midi vers un port midi spécifique, il faut l'envoyer directement vers ce port à la place (ou en plus) de l'envoyer vers l'hôte. Et le JavaSound était nécessaire.

    Citation Envoyé par shamk Voir le message
    Pour le "MidiLearn", j'aimerais profiter en faite des possibilités de l'automap de notation pour éviter toute emmerdes, mais je ne sais pas encore comment il récupère les étiquettes ...
    Je ne connais pas l'automap. Donc je ne peux pas t'aider.

    Citation Envoyé par shamk Voir le message
    Dans les sources que je voit, j'ai du mal à comprendre le minimum requis, car il semble qu'il y as des choses qui "fonctionnent" sans être forcément prêt à tout les hôtes ...
    Je dirais les canDo (capacités du plug), le processEvents (messages Midi), le processReplacing (audio), setParameter (automation du plug via le host) et tout ce qui est lié au programmes puisque tu veux les utiliser.

    Citation Envoyé par shamk Voir le message
    Pour le problème d'hôtes, le problèmes n'est pas partiellement réglé en testant les limites de l'hôte avec la fonction "CANDO" ?
    Oui et non. Tu sauras ce qu'ils sont capabled ou pas de faire, mais pas nécessairement comment. Par exemple, si tu veux faire un plug exclusivement Midi, tu devrais en tout logique dire: 0 input audio et 0 output audio. Ben ça suffit pas toujours. Avec certains hosts, tu dois dire que ton plug est un Synthétiseur.

    Ex d'initialisation avec différentiation suivant le host:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
       public ATVSTE_vst(long wrapper) {
     
    		super(Wrapper);
            // 1) Look&Feel
            DefaultZweegerGUI.setLookAndFeel();
     
            // 2) Propriétés VST de base
            this.programsAreChunks(true); // sauvegarde par chunks plut^tt que par programme
            this.canProcessReplacing(true);
            ATVSTECentral.logger().log2.println("Host is: " + this.getHostProductString());
            isHostAbletonLive = this.getHostProductString().contains("Live");
     
           // 3) VST initialisation
           if (isHostAbletonLive) {
               this.setNumInputs(2);
               this.setNumOutputs(2);
               this.isSynth(false);
           } else {
               this.setNumInputs(0); // no input
               this.setNumOutputs(0); // no output
               this.isSynth(true);
           }

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Merci tu as répondu à l'ensemble de mes questions.
    En effet, je souhaite accéder directement à des ressources midi/audio qui nécessites de passer par JavaSound.

    Je n'ai pas eu le temps de travailler sur le core de mon VST, vu que j'ai déjà un soucis en travaillant sur mon UI, le temps réel c'est pas son fort ... notamment pour chopper l'ensemble des valeurs d'un slider en temps réel ...

    EDIT : je viens de m'abonner à la discussion, ce qui me permettra de répondre plus rapidement

  7. #7
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 916
    Par défaut
    Citation Envoyé par shamk Voir le message
    Je n'ai pas eu le temps de travailler sur le core de mon VST, vu que j'ai déjà un soucis en travaillant sur mon UI, le temps réel c'est pas son fort ... notamment pour chopper l'ensemble des valeurs d'un slider en temps réel ...
    C'est quoi ton soucis ?
    Le choix que j'ai fait c'est d'alléger au maximum la partie traitement et de déplacer la charge vers la partie UI.
    Donc quand l'utilisateur modifie un slider par exemple je récupère la nouvelle valeur (via un event du slider, ex PropertyChanged) , je la convertis et la stocke dans ma classe de traitement VST directement comme elle en a besoin. Comme ça, au traitement, il n'y a jamais de conversion à faire.
    Mais tu peux faire l'inverse, dans ta classe de traitement VST chaque fois faire un slider.getValue() quand tu veux avoir ta valeur.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Un problème sur le slider.getValue();. Lorsque je le glisse, plus l'allure est rapide, plus il y as des sauts de valeurs, alors que je souhaiterais que toutes les valeurs soient envoyés unes par unes.

    Au lieux de ça, ça saute de 5, 30 , ou 30 valeurs ....et sur un filtre ça va avoir un effet désastreux !

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 095
    Par défaut
    Perso j'ai essayé jvstwrapper pour convertir un soft "standalone" audio en une version VST. (Midi uniquement et pas audio).

    J'avais tellement de latences que j'ai abandonné l'idée, et ce meme sans GUI...

    Et pourtant, je ne faisait que recevoir des notes sur un port midi et les renvoyer sur un autre avec une petit operation.

    Je pense neamoins que je retesterai une de ces libs dans le future.

    (EDIT : Pr la latence, je me rapelle maitenant aussi avoir reouvert un canal midi moi même pour la sortie MIDI sans utiliser celle "du vst", ce qui a mon avis n'est pas top)
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Et pourtant, je ne faisait que recevoir des notes sur un port midi et les renvoyer sur un autre avec une petit operation.
    C'est plus ou moins ça que je vais faire. avec un accès midi VST, et un accès midi système avec JAVA.

    A la réflexion la latence se posait déjà, et le mux des messages midi qui non seulement vont entrer et sortir. Un signal de synchro transitera également.

    par contre je me demande comment tu traitais le signal entrant,il y as un buffer ?

  11. #11
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 095
    Par défaut
    Je pense, dans mes souvenir être parti de l'exemple de "LiquinthVST". En supprimant la partie AUDIO et ne gardant que la partie réception midi. Je n'ai touché a rien d'autre de particulier.

    Ensuite je créais moi même un sortie midi (avec javax.sound.midi.MidiDevice).

    Ensuite j'ai modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int processEvents( VSTEvents vst_events )
    pour que pour chaque note reçue il la renvoyée sur ma sortie crée. La j'avais un lag entre la note reçue et la note réellement jouée sur le synthé, ce qui n'arrivait pas si j'utilisais par exemple midi-ox en faisant +- la même opération.

    Par 'signal' du parle de message midi ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 10
    Par défaut
    Je crois que je vais avoir le même problème ... je pense que cela vient de la couche midi de java.

    Oui le signal c'est le message midi.

    Je ferais l'essaie de transmission pour voir déja mais si c'est pour avoir de la latence, c'est pas vraiment la peine ...

  13. #13
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 095
    Par défaut
    Citation Envoyé par shamk Voir le message
    Je crois que je vais avoir le même problème ... je pense que cela vient de la couche midi de java.

    Oui le signal c'est le message midi.

    Je ferais l'essaie de transmission pour voir déja mais si c'est pour avoir de la latence, c'est pas vraiment la peine ...
    Je pense pas que cela vienne de la couche midi de java. Vu que j'utilsie la couche midi de java dans d'autres projets sans VST et que j'ai des perf excellentes.

    Y'a vraiment que en testant avec ce que tu veux réelement faire que tu vas pouvoir juger si y'a trop de latence ou pas car je suppose quand meme que si la lib existe, c'est qu'elle est quand meme un tant soit peut "performante". (sinon ca serait deja mort, bien que.)

    Moi j'ai fait mon bidule en ne respectant pas vraiment le principe du vst donc en theorie c'est deja biaisé.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. JUniversal : Microsoft facilite le développement multiplateforme en Java
    Par Olivier Famien dans le forum EDI et Outils pour Java
    Réponses: 18
    Dernier message: 30/03/2015, 23h44
  2. Environnement de développement pour un site Web en Java
    Par miagomiago dans le forum Debian
    Réponses: 8
    Dernier message: 19/07/2007, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo