Un convertisseur MIDI vers CV, arpégiateur et tools...




20190401_195141.jpg



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).

J'ai donc fait les fonds de tiroirs. J'ai besoin des éléments suivants :


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.

midi-6N138.png


Ou comme ca si vous préférez...

midi-6N138-2.png


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

20190116_212348.jpg


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).

20190116_212447.jpg


Controlleurs vers CV

20190116_212509.jpg


Ici les controlleurs 24, 25 et 26 sont assignés respectivement sur les sorties CV1, CV2 et CV3.

20190116_212514.jpg


Notes vers Gates

20190116_212519.jpg


Les notes C1, D1 et E1 sont ici assignées au gate 1, 2 et 3.

20190116_212522.jpg


Arpégiateur

20190116_212538.jpg


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
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
20190116_212529.jpg


Quantizer

20190116_212546.jpg


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).

20190116_212550.jpg


Random Waves

Pas encore implémenté.

20190116_212558.jpg


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 :

Euclidean Sequencer

20190116_213439.jpg


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.
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.

20190116_213446.jpg


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 ???

20190116_212904.jpg


Sauvegarde

L'ensemble des paramètres est sauvegardable en EEPROM. Cela se fait dans l'EEPROM de l'arduino sans ajout de composants

20190116_212911.jpg


20190116_212942.jpg



Le Futur


Voici ce que je prévois pour plus tard.



Connectivité




Voila. Bonne construction.