Un convertisseur MIDI vers CV, arpégiateur et tools...
Le concept
J'avais besoin initialement
(enfin pas vraiment besoin vu que j'en ai déja un, mais j'avais envie de le construire on va dire...) d'un convertisseur CV/Gate. Je me suis basé sur un petit cahier des charges et au fil du temps quelques fonctions non prévues se sont ajoutées. J'ai pris un boitier de récupération et je ne me suis pas cassé la tête pour la sérigraphie
(C'est rien de le dire).
- possibilité de convertir le midi en CV/Gate (c'est le minimum)
- pouvoir le faire sur 3 canaux différents si besoin (donc 3 tensions de CV différentes avec 3 Gates)
- ou bien le faire sur un seul canal, mais avec CV1 mappé sur la note, CV2 mappé sur la velocité et CV3 sur un controleur (la modulation par exemple)
- pouvoir n'utiliser que les Gates attachées à 3 notes par exemple (pour déclencher des modules de percussions entre autres)
- pouvoir gèrer le Volt/Octave mais aussi le Hz per volts, alors pourquoi pas un autre standard si je veux piloter des synthés comme par exemple un gakken SX-150 ????
- mettre un arpégiateur, avec différents motifs. (Ajout récent : pouvoir générer aussi les notes en midi)
- pouvoir gèrer l'horloge de cet arpégiateur soit en midi soit en externe
- faire un quantizer (ajustement à la note ou demi-ton juste) en fonction d'une tension d'entrée plus ou moins juste (sortie de LFO, d'un sequenceur analogique, etc...)
- pouvoir gèrer des tensions en fonction de controleurs (3 controleurs continus midi vers 3 tensions analogiques entre 0 et 5V)
- les paramètres doivent pouvoir être sauvegardés.
- avoir une sortie midi-thru
- source de lfo random
- boite a rythme 16 pas sur 3 instruments
- sequenceur euclidien
J'ai donc fait les fonds de tiroirs. J'ai besoin des éléments suivants :
- un arduino...
- un opto-coupleur pour l'entrée midi, avec sa prise din.
- un 74HC14 pour faire le midi thru
- 3 DAC 12 bits pour gèrer les CV
- une poignée de transistors NPN pour gérer les gates.
- une huitaine de boutons poussoirs
- un écran LCD compatible I2C
En gros c'est tout.
Le montage ressemble à ca, cliquez sur l'image pour voir en grand
Je n'ai pas de commentaire à faire sur ce schémas, (si ce n'est qu'il n'est pas parfait, surtout la partie GATE pas très élégante...) mais on peut tout de même noter les points suivants.
Si en fait, j'ai un commentaire... La qualité des 4N25 a bien baissé et varie beaucoup d'un constructeur à l'autre. De plus les 4N25 sont assez lent, donc, je vous recommande de plutot utiliser des 6N138, qui sont un peu plus cher mais rapide et vraiment impeccable pour gérer du midi avec beaucoup de débit
Donc voici la partie du schéma a remplacer si vous rencontrez des problemes avec votre chip 4N25.
Ou comme ca si vous préférez...
Bref, même si ce n'est pas bien compliqué revenons tout de même à notre explication de schéma...
Les DAC sont commandés en SPI, ils sont tous reliés au pin D11 et D13, la prise en compte des données pour chacun d'eux se fait via les pins D7 à D9.
Les paramètres de notre boitier sont peu nombreux, ils seront sauvegardés dans l'EEPROM interne de l'arduino.
Comme j'ai besoin de pas mal de boutons poussoirs, ils mettent chacun à la masse (plus ou moins) des réseaux de résistances, cela me permet de gèrer 4 boutons sur une seule entrée analogique afin d'économiser des entrées/sorties. Je mesure la tension générée sur l'entrée analogique et je déduis le bouton qui est appuyé.
Un potentiomètre permet d'entrer des datas, je m'en sers pour l'instant pour gèrer la durée du gate dans l'arpégiateur.
Les entrées clock, reset et CV/In sont protégées par des diodes afin d'éviter que la tension ne monte dangeureusement sur les entrées de l'arduino.
Le LCD est du type I2C car cela permet de n'utiliser que 2 pins sur l'arduino (comme le rafraichissement des données n'a pas besoin d'être rapide, l'I2C est idéal dans ce cas).
Sur mon montage, l'alimentation se fait via un bloc secteur de 9V alternatif, que je redresse et régule en interne dans le boitier.
Vous pouvez utiliser une alimentation 9V continue que vous brancherez directement sur la prise d'alimentation de l'arduino. Les 5V, présents sur la sortie +5V, serviront de référence pour le reste du montage. Un arduino peut parfaitement alimenter tous les éléments du montage, y compris l'écran LCD.
Cependant, les régulateurs internes de l'arduino ne sont pas forcément très précis et vous aurez de meilleurs résultat avec un régulateur externe. Un 7805 externe avec son filtrage donnera de très bon résultat. Si vous êtes puriste vous mettrez un 317, la régulation est encore meilleure.
Sur la petite modification avec le 6N138, vous noterez l'ajout d'un interrupteur pour isoler l'optocoupleur du reste du montage. C'est plus prudent pour pouvoir pousser à coup sur la configuration dans les arduinos via le port série. N'oublions pas que c'est le même port série qui est utilisé pour programmer l'arduino mais aussi pour faire le midi...
Le code
Vous trouverez le code dans l'archive ci dessous.
Archive du code
Le source est maintenant prévu pour environnement arduino > 1.8. Je me suis quand même décidé à faire les modifications nécessaires. Il était temps ? Oui :) La librairie midi utilisée est celle de Francois Best en 5.0.2. Les modifications récentes apportés concernant la déclaration des PROGMEM qui ont été modifiés ainsi que la déconnexion des Handler Midi (il faut maintenant préfixer le parametre de déconnexion par midi::
Le fichier
valeursmem.h contient les données pour gèrer correctement les DAC en fonction des standards Volt/octave, Hertz/volt ainsi que quelques données d'affichage.
Ce projet n'est pas terminé, mais quelques "tools" fonctionnent, comme la conversion midi vers Volt/octave et Hz/Volt + Gate, le mapping de 3 controleurs midi vers 3 CV, l'arpegiateur avec une huitaine de motifs disponibles, le déclenchement de gate à partir de note midi, le quantizer sur note blanche ou demi-ton, le sequenceur euclidéen. Et surtout ne pas hésiter à rajouter vos propres fonctions... :)
Menus et fonctions
Voici l'état des menus à l'heure actuelle. Tout n'est pas en fonction mais j'avais prévu 8 outils. Voici la liste.
CV/Gate
On peut sélectionner le mode de conversion (Hz/Volt ou Volt/Oct). Le mode
Retrig pour "retrigger" la note si une est déja appuyée
(la conversion est en monophonique). CV1 et GATE 1 concernent la hauteur de note et le gate
(pour déclencher une enveloppe par exemple). CV2 est assigné ici à la vélocité de la note et CV3 est assigné à un controleur
(le breath controller par defaut mais vous pouvez mettre autre chose c'est facile à modifier dans le code).
Controlleurs vers CV
Ici les controlleurs 24, 25 et 26 sont assignés respectivement sur les sorties CV1, CV2 et CV3.
Notes vers Gates
Les notes C1, D1 et E1 sont ici assignées au gate 1, 2 et 3.
Arpégiateur
On peut régler ici la longueur de gate avec le potentiomètre qui se trouve à gauche du LCD. De gauche à droite on a 4 réglages
- Division horloge
- Etendue en octave
- Le motif : (Up,Down,Up/Down,Down/Up, OctaveUP, OctaveDown, Pendulum, Random,132)
- Conversion Hertz/V ou V/Oct
Pour ce module, la sortie se fait désormais aussi en midi. Cela peut être pratique pour utiliser entre un clavier maitre et votre DAW
Quantizer
On peut bien sur sélectionner le mode de conversion, ainsi que le fait de quantizer en semi-tone
(12 notes par octave) ou la note blanche la plus proche
(8 notes par octave).
Random Waves
Pas encore implémenté.
Permettra de générer des formes d'ondes random pour fabriquer par exemple 3 LFO's. Ceux-ci pourront certainement être synchronisés à l'horloge midi
ou externe) pour être retriggé, ou alors retriggés via une note midi. Je prévois aussi une quantisation.
Réglages possibles :
- quantisation : rien, semi, blanche
- division horloge
- Hertz/V ou V/Oct
- forme onde (RND...)
Euclidean Sequencer
Sequenceur euclidéen. Ce sequenceur est synchronisé sur la midiclock. On peut choisir la division d'horloge de 1x à 8x. Nous avons 3 réglages.
- sequence (1 à 3)
- Nbre de Beats
- Nbre de Steps
Le principe est simple. Le but est d'aligner au mieux un nombre de beat sur un nombre de steps. On choisi donc ces 2 paramètres et le sequenceur aligne les 2 paramètres tout seul
La ligne du haut affiche le délenchement des steps des 3 pistes.
La ligne du bas affiche les réglages des steps sur la piste en cours. Sxx réprésente la piste en cours de réglage, Bxx le nombre de beats à déclencer sur la piste, Sxx le nombre de steps de la pistes.
Sur l'affichage suivant, on affiche les données de la piste 1 (S01), il y a 5 beats de déclenchés (B05), la piste 1 contient 16 pas (S16) et la division d'horloge est x16.
Pour ce module, la sortie se fait aussi en midi
Rythm Machine
Pas encore implémenté.
Permettra de trigger 3 gates (sorties gates 1, 2 et 3), ou peut être 6 en utilisants les sorties CV comme triggers pourquoi pas ???
Sauvegarde
L'ensemble des paramètres est sauvegardable en EEPROM. Cela se fait dans l'EEPROM de l'arduino sans ajout de composants
Le Futur
Voici ce que je prévois pour plus tard.
- Je prévois déja de finir les modules Random Waves et Rythm machine
- ajouter un module pour jouer en polyphonique 3 notes, avec 3 sorties gates séparées et 3 sorties CV associées
- faire un mode microtuning
- sortie midi pour euclidean sequencer
- shifting pour euclidean sequencer
Connectivité
- Les 2 jacks les plus à gauche sont ceux de synchro externe avec reset externe
- Celui tout seul à droite est celui d'entrée du quantizer.
- Les 3 rangées du milieu correspondent aux trois sorties CV/Gate (CV rangée du haut, Gate sur rangée du bas avec témoin led)
- En haut à gauche les 2 prises midi, celle qui est branchée est le midi-in, l'autre est le midi-thru hardware.
- Le potard à gauche du LCD sert pour l'instant à règler la durée du gate de l'arpégiateur.
- Les 4 boutons sous le LCD correspondent en général à des bascules de fonction qui dépendent du contexte et ces switches sont en relations avec les données affichées sur le LCD.
- Les 4 poussoirs à droite du LCD, sont ceux de navigations : UP et down, ainsi que ESC et OK.
Voila. Bonne construction.