Bonjour à toutes et à tous, ceci est mon premier message, j'ai lu les règles mais j'espère ne pas faire de bêtise, de ce que j'ai compris je dois poster ici et pas dans la catégorie projets.
I - PROJET
Mon projet est de créer un contrôleur MIDI de synthétiseur modulaire, afin d'avoir à disposition des contrôles physiques de synthétiseur modulaire, mais dont la partie audio est virtualisée par l'ordinateur. Si vous ne savez pas ce qu'est un synthétiseur modulaire ou un contrôleur MIDI, plus de détails dans la partie suivante. Sinon, vous pouvez passer directement à la partie III.
II - SYNTHETISEUR MODULAIRE, CONTRÔLEUR MIDI
1) Le synthétiseur modulaire
La plupart des synthétiseurs qu'utilisent les musiciens sont développés par une société, qui désigne le produit, assemble touts les éléments dans une boîte, et le consommateur n'a qu'à utiliser le produit.
Mais il est possible de créer soi-même son propre synthétiseur en achetant tous les composants et en le désignant de A à Z. Cela prendrait des années à l'échelle d'une personne.
Il est possible de faire un intermédiaire*; acheter un rack (conteneur) dans lequel on va insérer des modules, qui sont des «*briques élémentaire*» du synthétiseur (filtre, VCO, VCA, Reverbe, générateur d'enveloppe, etc).
Une fois ces éléments installés, on peut les connecter dans l'ordre que l'on veut grâce à des «*câbles de patch*» qui relient un module à un autre. Il devient donc facile de créer un synthétiseur sur-mesure, qui en plus est modifiable facilement (en débranchant/rebranchant des câbles), que l'on peut améliorer et modifier à l'envie en achetant/revendant des modules.
C'est absolument génial, sauf pour un détail*: c'est CHER. Vraiment. Chaque module se compte en général en centaine(s) d'euro, et ça devient rapidement un gouffre à argent. Un simple synthétiseur avec quelques modules peut déjà chiffrer au dessus de 1000€.
2) Les contrôleurs et claviers MIDI
Depuis longtemps, les musiciens utilisent des contrôleurs MIDI. Ce sont des boîtes qui permettent de contrôler un synthétiseur ou un logiciel. Par exemple, on peut utiliser un contrôleur MIDI avec des potentiomètres rotatifs*; ceux-ci peuvent contrôler les volumes des pistes dans un séquenceur audio (ou d'autres paramètres, on peut «*assigner*» ces contrôles librement).
Un des avantages est que l'on peut acheter un clavier MIDI, qui ne génère pas de son*; c'est juste un clavier qui envoie des informations (par exemple*: «*note Sol3 enclenchée pas trop fort*») à l'ordinateur.
Ainsi, l'ordinateur transforme cette information en son. On peut choisir un son de piano, mais aussi un son d'orchestre à cordes, de flûte etc... C'est l'ordinateur qui s'occupe de transformer l'information MIDI provenant du contrôleur en information sonore.
Cela permet de réduire drastiquement les coûts, car on déplace toute la partie génération du son du hardware au software*: la partie hardware doit seulement récupérer une information (note du clavier enclenchée par exemple), et c'est la partie software qui génère le son, ce qui apporte de nombreux avantages, notamment au niveau du prix car il y a beaucoup moins de contraintes.
III – LE CONTROLEUR DE SYNTHETISEUR MODULAIRE
Mon but est simple*; je veux créer un outil qui physiquement soit similaire dans l'utilisation à un synthétiseur modulaire (modules interchangeables, câbles de patch pour interconnecter les modules), mais pour beaucoup moins cher.
Une solution est d'avoir un contrôleur MIDI qui ne récupère que des informations simples, du type «*potentiomètre réglé à 78%*» ou «*prise 23 connectée à prise 48*», puis que ce soit l'ordinateur qui émule un synthétiseur modulaire, en fonction de l'état du contrôleur. La partie hardware se résume donc à des potentiomètres, boutons, connectiques branchées ou non, et de l'électronique permettant l'acquisition.
Malgré de longues recherches sur internet, je n'ai pas trouvé de contrôleur MIDI qui corresponde à ce que je veux faire. Le plus proche est ce qui s'appelle «*joué*» de PlayfulMusic, qui ne ressemble pas du tout à un synthétiseur modulaire avec des câbles de patch, mais qui est un contrôleur modulaire.
J'ai donc décidé de développer moi même ce produit, et commencé à designer certaines choses. Beaucoup de choses peuvent être améliorables, j'en suis vraiment au début du développement.
Avant même d'acheter des composants pour prototyper, je souhaiterais avoir des avis extérieurs, qui pourront peut être rapidement me dire «*non mais ça c'est trop compliqué, tu peux utiliser du SPI à la place ça sera plus simple et moins cher*» par exemple.
IV – Fonctionnement
La partie acquisition des données est vraiment très simple en l'occurence, je ne vais pas rentrer dans le détail de comment récupérer la valeur d'un potentiomètre et la transformer en information numérique. Les défis complexes sont surtout*:
la communication entre les modules et le rack (qui contient les modules)
comment détecter les différentes configurations de câblage avec les câbles de patch
Composants
Pour le côté modulaire, je pensais utiliser des microcontrôleurs pour le rack et les modules. Ainsi les microcontrôleurs peuvent faire l'acquisition d'informations, et ils se communiquent entre eux. Les éléments physiques utilisés seront principalement des potentiomètres, des connectiques pour les câbles de patch, et des boutons.
Fonctionnement Global
Mon approche globale est la suivante*: le rack qui contient chaque module est le «*chef d'orchestre*». C'est lui qui envoie au PC des informations dès que le contrôleur change d'état (câble débranché, câble branché, potentiomètre tourné, etc). Les modules acquièrent les données des potentiomètres/boutons en permanence, enregistrent ces données en mémoire, et quand le Rack demande aux modules leur état, alors ils l'envoient au Rack.
Cycle Global
Le Rack communique avec les autres Modules par une liaison Série I2C (peu de câbles, possibilité d'avoir entre 1 et 100 modules branchés au rack). Chaque module a sa propre adresse.
Le Rack interroge chaque module un par un pour savoir si une information a changé ou non. Chaque module scanne son propre état en permanence, stocke dans sa mémoire cet état, et lorsque le Rack lui demande son état, le module envoie au Rack son état. Cette manière de faire permet de faire du traitement en parallèle*: pendant que le Rack interroge un module, tous les autres sont en train de faire de l'acquisition de donnée.
Connexion d'un câble de patch
Pour faire l'acquisition de l'état de connexion des câbles de patch, mon idée est la suivante*: chaque connectique est reliée à une broche de microcontrôleur. On définit toutes les broches comme des entrées, et UNE broche comme une sortie. On met la sortie de cette broche à +5V. Si une des entrées réagit à un niveau de tension haut (avec une interruption par exemple, ou en scannant manuellement chaque entrée), alors on sait que les deux broches sont connectées. Sinon, rien n'est connecté, et on passe à la broche suivante, etc. Ça donne un temps de calcul triangulaire (je crois). S'il y a N connectiques, il y a N + N-1 + N-2 + … + N0 scans à faire (je considère qu'il n'y a pas de câble en Y ou hubs, seulement des câbles avec deux connexions).
Ce cas là est simple quand la connexion se fait au sein d'un même module. Mais si on connecte un module à un autre (ce qui arrive beaucoup plus fréquemment), alors la méthode devient un poil plus complexe. Mon idée est*: Le Rack envoie au premier module l'ordre de mettre à +5V la pin A au module 1 et attends. Si un câble de patch est branché entre le premier et le deuxième module, alors le deuxième module va détecter (via une interruption par exemple) qu'une de ses broches est passée à +5V, et communique au Rack pour lui indiquer que sa broche est connectée. Dès que le Rack reçoit cette information, il sait alors que la broche X est connectée à la broche Y. Et il continue son cycle en interrogeant chaque broche. Dans notre example, quand le rack va demander au module 1 de mettre à +5V sa pin C, Une interruption va avertir le module 2 que sa pin C est à +5V, et envoyer au rack cette information. Le Rack saura donc que la pin C du module 1 est connectée à la pin C du module 2.
Ecran LCD
Etant donné les possibilités qu'offrent ce genre de produit comparé à un synthétiseur modulaire standard (analogique), j'ai trouvé intéressant d'ajouter un petit écran LCD qui permette d'indiquer quel rôle chaque module a. Dans un synthétiseur modulaire standard, un module de filtre sera toujours un module de filtre. Dans mon idée, rien n'empêche de garder un module physique mais que son rôle change en fonction de son utilisation. Un module pourra être un filtre dans un cas de figure, puis devenir un VCA dans un autre cas. Pour que l'utilisateur s'y retrouve, il a un petit écran qui lui indique quelle fonctionnalité remplit chaque module.
Temps de cycle
J'apporte un note concernant le temps de cycle du «*Rack*»*; ma solution est sûrement très peu optimale, mais il ne faut pas oublier que l'information de l'état du système doit être récupérée dans une échelle de temps assez grande*: disons quelques milisecondes, à mon avis maximum 20 avant qu'un humain se rende compte de la latence entre ce qu'il contrôle met du temps à être détecté par le système. Cela ne m'empêche pas de faire un système cohérent et si possible optimisé, mais il n'y a nullement besoin de performances incroyables au niveau de l'exécution de chaque cycle. Le pire cas de figure me semble être le suivant*: il y a beaucoup de modules, et l'utilisateur tourne rapidement deux potentiomètres en même temps.
Si le système se révèle trop lent, je pense mettre une priorité temporelle sur l'acquisition des informations des potentiomètres (car on n'a pas envie de tourner un potentiomètre et attendre un demi-secondes que le résultat se fasse entendre). La conséquence sera peut être que les connexions avec les câbles de patch seront détectées avec du retard, mais ce n'est pas critique,
V - Conclusion
Si vous êtes arrivé jusqu'ici, merci d'avoir lu, je ne demande pas à ce qu'on me dise comment faire ou qu'on résolve tout mes problèmes, j'ai conscience que mon savoir-faire et mon expérience sont limités, donc je souhaite savoir si en me lisant vous pourriez avoir des remarques, suggestions, ou conseils type «*tu seras bloqués sur les interruptions parce que tu peux pas avoir des microcontrôleurs avec des ports qui mélangent entrées et sorties*». Je sais que c'est pas forcément facile à expliquer, posez moi toutes les question que vous voulez sur mon projet si quelque chose n'est pas clair, je ferais des modifs si possible.
Bonne journée =)
-----