Publicité

Annonce

Réduire
Aucune annonce.

Communication MIDI en C#

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Communication MIDI en C#

    Salut à tous, j'espère qu'il y'a ici des gens calé en programmation.:dents

    Il m'est passé par la tête de faire un programme pouvant dialoguer avec mon synthé, cependant, je pensais que je devrais utiliser la classe SerialPort, mais non, j'ai un adaptateur MIDI/USB, il me faudrait un adaptateur MIDI->SERIE pour pouvoir utiliser la classe SerialPort.

    Bref, si quelqu'un à une idée pour récupérer les ports MIDI, si je trouve pour "Synthé. SW table de sons GS mic" (l'instrument MIDI de la carte son en fait) je doit trouver en même temps pour mon synthé.

    Merci à ceux qui pourront m'éclairer:dents
    http://www.luxaeternaband.com/

    Matos : Kurzweil PC3K8

    Ma video pour le Kurzweil Forte Video Contest : https://www.youtube.com/watch?v=u_Fvc7UWGyI

  • #2


    Cherche, et tu trouveras
    Motif XS7/Korg microX/Roland PCR800/Sonar 7 PE/EWQL : SO gold, RA, Stormdrum, Symphonic Choirs qui ne fonctionne pas, Voices of Passion, Ministry of Rock/Steinberg hypersonic2/Behringer bcr2000 bientôt BCF2000/Yamaha HS80M/Roland TD9/V-Synth GT/Waldorf Blofeld(soon),...

    Commentaire


    • #3
      sinon, en C++, tu as rtmidi et rtaudio qui sont super simples à utiliser
      Hello, World!

      Commentaire


      • #4
        Envoyé par luciolis Voir le message
        Je suis tombé dessus après avoir posté, et sur un autre lien après, en fait y'a des fonctions à exporter dans la dll wmmd.dll un truc comme ça.


        @alchemist : Pour le C++... ça sera vraiment si j'y arrive pas en C#, mais merci du tuyau.
        http://www.luxaeternaband.com/

        Matos : Kurzweil PC3K8

        Ma video pour le Kurzweil Forte Video Contest : https://www.youtube.com/watch?v=u_Fvc7UWGyI

        Commentaire


        • #5
          ben disons que si tu dois de toutes façons communiquer en API via une DLL C, autant le faire en C/C++.

          Et puis, .NET j'accroche pas pour des applications realtime : imagine le "garbage collector" ou le "real-time compiler" s'activer pendant ton solo endiablé lors du concert de ta vie
          Hello, World!

          Commentaire


          • #6
            Je vois pas pourquoi ils se déclencheraient en plein milieu de l'utilisation du programme, d'ailleurs ça me l'a jamais fait, et puis si ça arrive, ça ne coupera pas le son, donc le solo pourra être terminé :dents


            Bon, je m'y remet, j'ai une petite idée de programme et peut-être que ça pourrait me servir le week-end prochain.
            http://www.luxaeternaband.com/

            Matos : Kurzweil PC3K8

            Ma video pour le Kurzweil Forte Video Contest : https://www.youtube.com/watch?v=u_Fvc7UWGyI

            Commentaire


            • #7
              ok, tiens-nous au jus

              (moi je prends mon pied avec wxWigets et rtmidi/rtaudio en C++, sur PC, Mac et Linux sans devoir changer quoi que ce soit au code )
              Hello, World!

              Commentaire


              • #8
                Envoyé par alchemist Voir le message
                ben disons que si tu dois de toutes façons communiquer en API via une DLL C, autant le faire en C/C++.
                Remarque valable si on démarre le développement à partir d'une feuille blanche. Mais si on a déjà une floppée de classes pour les couches non temps réel, ce serait dommage (dissuasif, impraticable...) d'avoir à tout retraduire !

                On peut évidemment invoquer du code non-managé dans .NET. En outre, on dit qu'avec VS2008 Pro, il est très facile de mixer les langages.

                Enfin, en étant soigneux dans ses instantiations, on doit pouvoir limiter les effets (méfaits) du GC, non ? (faute de besoin immédiat, je n'ai pas réfléchi à la question, ni expérimenté quoi que ce soit).

                Commentaire


                • #9
                  Et tout dépend si tu veux aussi être "portable" (faire tourner ton appli sur PC, Mac, Linux...).

                  Et puis, pour moi, qui dit "communication", donc "bas niveau", donc.. C, C++.

                  Bref, je suis fana de C++, wxWidgets (pour l'interface graphique), et je découvre rtAudio et rtMidi, des petites merveilles de simplicité et de portabilité (un collègue utilise rtAudio et rtMidi pour faire "pouet" avec une console de jeux)
                  Hello, World!

                  Commentaire


                  • #10
                    Envoyé par alchemist Voir le message
                    (..)Bref, je suis fana de C++
                    On s'en est rendu compte :D
                    wxWidgets (pour l'interface graphique), et je découvre rtAudio et rtMidi, des petites merveilles de simplicité et de portabilité
                    On va aller y jeter un coup d'oeil !

                    Tiens, pour mieux comprendre les GC :

                    Commentaire


                    • #11
                      Gros remontage de topic vu que je m'y suis remis depuis hier

                      Je suis reparti de zéro, en voulant utiliser les fonctions de winmm.dll, et comme je suis tombé sur ce source bien fait (il s'occupe juste du canal 1): http://www.koders.com/csharp/fid992E...85.aspx?s=file je le fait en C# alors qu'au départ je comptais le faire en C++.

                      J'arrive donc pour l'instant, à envoyer des messages Note On et Note Off à mon clavier en utilisant MidiOutShortMsg de la winmm.dll sans problème.

                      Le soucis, c'est pour récupérer tout ce qu'il se passe sur le clavier, si je touche à un potard, à une note, une pédale ... J'ouvre le port avec MidiInOpen en passant une fonction callback qui sera appelé dès qu'il se passe quelque chose, et elle est bien appelé lors de l'ouverture et la fermeture du port, mais quand je joue il ne se passe rien!

                      Finalement je me demande si c'est bien de cette façon qu'on reçoit les messages du synthé ( et ça serait le plus simple quand même, pas envie d'une scrutation active!)

                      Personne n'aurais déjà fait un programme dans ce sens? ( parce que dans le sens PC->Synthé on trouve pas mal de source, mais Synthé->PC c'est rare!)
                      http://www.luxaeternaband.com/

                      Matos : Kurzweil PC3K8

                      Ma video pour le Kurzweil Forte Video Contest : https://www.youtube.com/watch?v=u_Fvc7UWGyI

                      Commentaire


                      • #12
                        Salut,

                        C'est bien ce callback qu'il faut utiliser. Prévois au moins 2 buffers (bien alloués avec la fonction d'allocation globale, globalalloc, si je me souviens bien) pour le cas de messages sysexes.

                        Normalement, les exemples en C seront bons pour toi, vu que ce code C# appelle les mêmes APIs.

                        Sinon, jette un oeil à RTMidi, qui est écrit en C++, et qui utilise aussi winmm.dll pour Windows.

                        EDIT: le lien vers les API: http://msdn.microsoft.com/en-us/libr...=VS.85%29.aspx
                        Dernière modification par alchemist, 26 octobre 2010, 21h08.
                        Hello, World!

                        Commentaire


                        • #13
                          Envoyé par novaXire Voir le message
                          Personne n'aurais déjà fait un programme dans ce sens? ( parce que dans le sens PC->Synthé on trouve pas mal de source, mais Synthé->PC c'est rare!)
                          Effectivement, c'est rare. Je ne l'ai jamais fait. Xavier indique de bonnes pistes (comme d'hab :8)).

                          Sinon, as-tu regardé cet article de stackoverfow.com :

                          Getting signals from a MIDI port in C#

                          Si tu trouves une solution, ça m'intéresse (pour le futur :roll.

                          PS : en attendant de trouver LA solution élégante, pourquoi ne pas commencer par le polling, ça te permettrait de valider la liaison montante ?

                          Alain

                          Commentaire


                          • #14
                            J'avais fait du MIDI IN en Delphi il y a 10-12 ans, je vais retrouver le code (demain soir, il est temps d'aller dormir).
                            Les APIs n'ont pas changé.
                            Hello, World!

                            Commentaire


                            • #15
                              Envoyé par iaoranaemaeva Voir le message
                              pourquoi ne pas commencer par le polling, ça te permettrait de valider la liaison montante ?
                              Peut-être comme ça ?

                              Commentaire

                              Chargement...
                              X