Editeur pour Matrix-1000

groumpfgroumpf Membre
21:14 modifié dans Vos applications #1
pour signaler mes petits softs :  ObieEditor permettant d'éditer et de sauvegarder les sons du synthétiseur Oberheim Matrix-1000 :

http://dqueffeulou.free.fr/musiques/m1000osx.html

J'ai aussi un Harmoniseur MIDI :

http://dqueffeulou.free.fr/musiques/MIDI_Harmonizer.html

qui peut servir aussi de MIDIThru pour ObieEditor.

Voila, si quelqu'un a un Matrix, ca peut servir

Réponses

  • mpergandmpergand Membre
    21:14 modifié #2
    Salut groumpf, bienvenue au club!

    Moi, c'est plutôt les DX Yamaha Editeur TX7

    J'ai voulu tester ton appli avec mon moniteur MIDI MidiDump mais l'external device que je définis dans MidiDump n'apparaà®t pas dans ton prog  :( et de mon coté je n'ai pas accès au IAC Driver, mais c'est normal puisque ça n'existe que depuis Panther. Donc les deux progs ne peuvent pas communiquer, dommage.

    Sinon, bravo, tu devrais connaà®tre un certain succès avec ton editeur (probablement le 1er pour OS X) d'autant que le Matrix 1000 est assez prisé.
  • groumpfgroumpf Membre
    21:14 modifié #3
    dans 1096061431:

    Moi, c'est plutôt les DX Yamaha Editeur TX7

    J'ai vu, super, moi j'ai une espece de DX : le FS1R.
    J'ai fait un éditeur FS1R pour JSynthLib (Java) mais je vais peut-etre le refaire en Cocoa parce que je ne suis pas très satisfait.
    C'est drole j'ai fait exactement la meme fenetre de copie pour les operateurs !

    J'ai voulu tester ton appli avec mon moniteur MIDI MidiDump mais l'external device que je définis dans MidiDump n'apparaà®t pas dans ton prog  :( et de mon coté je n'ai pas accès au IAC Driver, mais c'est normal puisque ça n'existe que depuis Panther. Donc les deux progs ne peuvent pas communiquer, dommage.

    A oui, j'ai essayé avec MIDIMonitor, effectivement on ne peut pas choisir la sortie virtuelle alors que c'est possible dans ton prog. Je vais voir ca. Sinon ton editeur n'affiche pas la totalité des sorties (2 sur 4 pour moi), alors qu'il affiche les 4 entrees.

    Sinon, bravo, tu devrais connaà®tre un certain succès avec ton editeur (probablement le 1er pour OS X) d'autant que le Matrix 1000 est assez prisé.


    Merci,
    J'ai encore quelques trucs à  finir dessus (demander de sauvegarder avant de quitter par ex...)
    ton prog à  l'air bien aussi , très classe en tout cas.
    Par contre moi je prefere le drag&drop haut/bas pour modifier les parametres.
  • mpergandmpergand Membre
    septembre 2004 modifié #4
    'ai vu, super, moi j'ai une espece de DX : le FS1R.


    Le FS1R, y a au moins 1000 paramètres ! bon courage !!

    Sinon ton editeur n'affiche pas la totalité des sorties (2 sur 4 pour moi), alors qu'il affiche les 4 entrees.


    Oui, bizarre, tu peux donner plus de précisions, une copie d'écran ?


    Par contre moi je prefere le drag&drop haut/bas pour modifier les parametres.
                                                                     


    Oui, je sais on m'a déjà  demandé de pouvoir changer les param de haut en bas :)

    effectivement on ne peut pas choisir la sortie virtuelle


    Connection virtuelle et pas external device, ma suis gourer...
    A ce propos je ne gère pas les external devices.
  • groumpfgroumpf Membre
    21:14 modifié #5
    Effectivement le FS1R c'est beaucoup de parametres, sans parler de faire un éditeur de courbes pour les sequences de formants...

    Pour le TX j'ai fait une copie d'ecran de l'inspecteur midi. J'ai 2 interfaces Fastlane MOTU avec chacune 2 in et 2 out.

    J'ai fait aussi une copie de ce qu'affiche ObieEditor

    [Fichier joint supprimé par l'administrateur]
  • mpergandmpergand Membre
    21:14 modifié #6
    Les noms port A et port B, n'existaient pas avant panther, de plus tu possèdes 2 interfaces similaires et elles s'affichent de manière indifférenciée, pas terrible ça 8)

    Bon, ça n'explique pas les destinations manquantes.

    Extrait de MidiThru

    <br />                                                // scan destinations<br />              destinations.removeAllObjects();<br />          midiDestPopUpMenu.removeAllItems();             <br />          int nbDest=MIDISetup.getNumberOfDestinations();<br />           <br />          for(int i=0;i&lt;nbDest;i++)<br />                      {<br />                 MIDIEndpoint endpoint=MIDISetup.getDestination(i);<br />                        destinations.addObject(endpoint);<br />                 try<br />                               {<br />                         nom= endpoint.getStringProperty(MIDIConstants.kMIDIPropertyName).asString();<br />      <br />                          }<br />                 catch(Exception ex)<br />                               {<br />                         nom= &quot;&quot;;<br />                                }<br /><br />                   midiDestPopUpMenu.addItem(nom);<br />                   }<br /><br />
    


    Difficile de faire plus simple, mais pourquoi getNumberOfDestinations ne retourne pas le bon nombre ?

    Tu peux télécharger le code complet si tu veux jeter un oeil.

    Bon, je sais depuis le début qu'il faut que je récrive toute la gestion MIDIClient en C et que je suive les directives Apple de façon un peu plus scrupuleusement, difficile de tester toutes les configurations possibles néanmoins... mais je connais un cas concret maintenant  ;)
  • groumpfgroumpf Membre
    21:14 modifié #7
    dans 1096105105:

    Les noms port A et port B, n'existaient pas avant panther,

    si si , en fait ca depend du driver de l'interface midi
    moi en Java j'ai fait ca :
    <br />           for (int k = 0; k &lt; MIDIDevice.getNumberOfDevices(); k++)<br />              {<br />                 MIDIDevice oDev = MIDIDevice.getDevice(k);<br />                        for (int entity = 0; entity &lt; oDev.getNumberOfEntities(); entity++)<br />                    {<br />                         MIDIEntity oEnt = oDev.getEntity(entity);<br />                         String oSEntity =&nbsp; oDev.getStringProperty(MIDIConstants.kMIDIPropertyName).asString();<br />                               for (int i = 0; i &lt; oEnt.getNumberOfSources(); i++)<br />                            {<br />                                 MIDIEndpoint oIn = oEnt.getSource(i);<br />                                     String oSIn =&nbsp; oIn.getStringProperty(MIDIConstants.kMIDIPropertyName).asString();<br />                                    mInputNames.add(oSEntity+&quot; &quot;+oSIn);<br />                             }<br />                         for (int i = 0; i &lt; oEnt.getNumberOfDestinations(); i++)<br />                               {<br />                                 MIDIEndpoint oIn = oEnt.getDestination(i);<br />                                        String oSOut =&nbsp; oIn.getStringProperty(MIDIConstants.kMIDIPropertyName).asString();<br />                                   mOutputNames.add(oSEntity+&quot; &quot;+oSOut);<br />                           }<br />                 }<br />         }<br />
    

    Mais ce n'est pas terrible non plus car cela n'affiche que les entrees/sorties physiques. Par contre on recupere le nom de l'interface (entity).
    Et voila le code ObjectiveC que j'utilise dans mon Harmonizer (et qui affiche la sortie de MIDIMonitor, mais pas le IAC !):
    <br />     ItemCount oDestNb = MIDIGetNumberOfDestinations();<br />        ItemCount i;<br />      for (i = 0; i &lt; oDestNb; i++)<br />  {<br />         strcpy(name, &quot;&quot;);<br />               MIDIEndpointRef oIn = MIDIGetDestination(i);<br />              MIDIEntityRef oEntity;<br />            OSStatus stat = MIDIEndpointGetEntity(oIn, &amp;oEntity);<br />         if (stat == 0)<br />            {<br />                 MIDIDeviceRef oDevice;<br />                    stat = MIDIEntityGetDevice(oEntity, &amp;oDevice);              <br />                  if (stat == 0)<br />                    {<br />                         CFStringRef oDeviceName;<br />                          MIDIObjectGetStringProperty(oDevice, kMIDIPropertyName, &amp;oDeviceName);<br />                                CFStringGetCString(oDeviceName, name, sizeof(name), 0);<br />                           <br />                          strcat(name, &quot; - &quot;);<br />                            CFRelease(oDeviceName);<br />                   }<br />         }<br />         CFStringRef oDestString;<br />          MIDIObjectGetStringProperty(oIn, kMIDIPropertyName, &amp;oDestString);<br />                            <br />          CFStringGetCString(oDestString, name+strlen(name), sizeof(name), 0);<br />              CFRelease(oDestString);<br />                           <br />          NSString *oObj = [NSString stringWithCString:name];<br />               [oList addObject:oObj];<br />   }<br />
    

    Mais en Java on ne peut pas recuperer le Device à  partir de l'entity...
  • mpergandmpergand Membre
    septembre 2004 modifié #8
    Merci, je vais regarder ça ;)

    Mais en Java on ne peut pas recuperer le Device à  partir de l'entity...                                                                 


    Et oui,  j'avais même exposé le problème sur la dev list coreAudio, sans avoir de réponse ! D'ailleurs j'avais remarqué que si je mettais le mot Java dans mon message, je ne recevais jamais de réponse !! donc un jour j'ai posté une question bidon sans évoquer Java et j'ai reçu une réponse d'un mec d'Apple et là  pour le coup c'est moi qui n'ai pas donné suite, na !

    L'adaptation du coreMidi en Java est lamentable, Apple s'est juste contenté de définir une méthode static correspondant à  l'appel en C et de plus c'est buggé et incomplet !!
    Je pense pouvoir faire mieux sans problème.

    Cette histoire des noms de connections est loin d'être simple, suite à  une question à  ce sujet sur la dev list, un developpeur à  répondu en détaillant sur 3 pages (!!) la procédure à  suivre - bon, j'exagère un peu mais à  peine :) Ceci c'était sur Jaguar à  l'époque et je savais que les choses allaient encore changer sur Panther ( le coreAudioMidi étant encore un vaste chantier dans Jaguar) donc j'ai fait au plus simple en pur Java, remettant à  plus tard la récriture de tout le truc en C.

    Bon, le temps de le faire est sûrement venu, d'autant que je voudrais essayer de faire un mini séquenceur, ce qui devrait demander un peu plus d'optimisation. Et ça sera intéressant de voir si c'est si simple que ça à  faire avec la gestion des timestamp directement par le système (si j'ai bien compris), en gros deux threads un pour le MIDi in et l'autre pour le MIDI out et ça devrait marcher, enfin j'espère :D
  • MalaMala Membre, Modérateur
    21:14 modifié #9
    dqueffeulou...

    qui fait de la musique...

    Denis...

    Tu serais pas le frangin de Benoit?
  • groumpfgroumpf Membre
    21:14 modifié #10
    dans 1096321583:

    dqueffeulou...

    qui fait de la musique...

    Denis...

    Tu serais pas le frangin de Benoit?


    tout à  fait, je suis démasqué, d'ailleurs l'inverse est vrai, mon frero me parle souvent de toi, au fait chapeau pour tes softs, ils ont l'air balèzes (heu), enfin bien quoi.
    Tu ne dois pas dormir beaucoup  ;o)
  • MalaMala Membre, Modérateur
    21:14 modifié #11
    Merci. Ca à  l'air aussi pas mal "ludique" ( :crackboom:- ) ce que tu fais... ;D 

    C'est vraiment cool qu'il y est autant de projets aussi variés.

    Tu ne dois pas dormir beaucoup

    Effectivement, c'est pas facile de fermer les paupières. ;)
Connectez-vous ou Inscrivez-vous pour répondre.