Étape 5: Le Code
Voici le code Arduino. Notes à ce sujet sont ci-dessous.
Sept bibliothèque de Segment :
Comme indiqué précédemment, j’ai écrit une bibliothèque de 7 segments avec une écriture rapide à broches numériques. Il doit être rapide, sinon il ralentit le MIDI traitement baisse sensiblement.
Bibliothèque de MIDI microtonal :
J’ai aussi écrit une bibliothèque MIDI microtonale qui gère l’entrée des événements de note MIDI et la sortie des événements n-TET Remarque microtonales. Pour garder le code rapide, cette bibliothèque filtre, c'est-à-dire, fait rien avec, commandes MIDI ou des données qui ne concernent pas de noter les événements.
Le code utilise tous les 16 canaux MIDI successivement et cycliquement pour envoyer pitchbend et notes. C’est parce que pitchbend affecte un ensemble du canal, et chaque note microtonal requiert souvent une valeur de pitchbend différents. Il peut être ajusté pour utiliser moins de canaux, mais le nombre de canaux serait le nombre de billets disponibles de la polyphonie.
J’ai implémenté un mode monophonique qui retriggers la note précédente, lorsque cela est nécessaire. Lorsqu’il s’agit des échelles microtonales plus de 12 notes, dans certains cas, la même note MIDI est utilisée pour les notes adjacentes microtonales pitchbend différentes valeurs. Si les deux notes tenues et puis un libéré, quand une note hors commande est envoyée pour l’une des notes sur un synthétiseur monophonique microtonales puis les deux notes sont éteints. Lorsque le mode monophonique est active le code retriggers la note microtonal restant et la valeur de pitchbend, c'est-à-dire ce que vous attendez lorsque vous jouez un monosynth. La touche lumineuse alterne entre retrigger étant sur pour un monosynth et large pour un synthé polyphonique.
J’ai également implémenté Pythagore tuning dans le code--mappé aux étapes « 00 » par octave définissant, mais elle est commentée, parce que le nécessaire si des déclarations causé latence perceptible. Il y a peut-être plus d’optimisation à faire, ou peut-être un microcontrôleur plus rapide comme sur un Teensy permettrait à mon code fonctionne assez bien. Ou, peut-être s’en tenir avec 53-TET pour un bon assez rapprochement d’intonation juste 5-limite. :)
Code principal :
Le code principal inclut gestion la molette et le bouton des interruptions. J’ai trouvé cette page et cette page utile pour écrire le code d’interruption.
L’ISR gère tous les encodeur rotatif et la fonctionnalité du bouton lumineux. Quand un encodeur est tourné, la motion est mappée à un changement dans les marches à l’octave ou base note MIDI, et ces valeurs sont mises à jour pour l’afficheur 7 segments. Lorsque le bouton est enfoncé, mode monophonique est activé et désactivé et la LED interne est activée et désactivé pour correspondre.
La boucle principale consiste essentiellement un appel à gérer un seul octet de données MIDI entrantes et puis un simple clignotement des LEDs appropriés dans l’affichage à sept segments.