Wie Sie wissen, wenn Sie einer der winzigen Anteil der Menschen sind, die tatsächlich diesen Blog lesen, habe ich viel mit Arduino Mikrocontrollern getan, um Module und MIDI-Gadgets zu bauen. Während ich nach Ideen und How-to-do-Artikeln googelte, stieß ich auf eine fantastische Arduino-basiertes String-Synth-Projekt von Jan Ostman, schön hier von einem Erbauer des Projekts gezeigt:
Der Klang passt perfekt zum Gefühl der Musik, die ich mache, also habe ich mich vorgenommen, eine für mich selbst zu machen.
Zuallererst, wie immer, die Spezifikation. Ich wollte dies als Modul und nicht als kompletteS Keyboard-und-Synth machen, so dass es einige Änderungen am ursprünglichen Quellcode geben müsste:
- Machen Sie es mit meinem MIDI-Rig funktionieren. Obwohl es MIDI-Handling-Code in der ursprünglichen Quelle gibt, ist es effektiv im "OMNI"-Modus (d. h., es empfängt auf allen Kanälen). Ich möchte, dass es mit einem bestimmten MIDI-Kanal funktioniert.
- Lassen Sie den MIDI-Kanal einstellen, ohne den Quellcode ändern zu müssen. Ich habe mich für diese Methode zum Einstellen des Kanals mit einem 4-Wege-DIP-Schalter, beschrieben von Noten und Volt.
- Da ich versuche, ein aufgeräumter Entwickler zu sein, reißen Sie jeden redundanten Code heraus, der mit dem Lesen der Tastatur zu tun hat.
- Ändern Sie die Pin-Konfiguration für die CV-Eingänge, so dass ich dies mit nur einem ATMega328-Chip anstelle eines ganzen Nano sbuildn konnte (der Nano hat 2 weitere "virtuelle" analoge Pins, die das ATMega-Paket hat)
- Fügen Sie einige CV-Eingänge hinzu (da dies ein Modul, immerhin)
- Fügen Sie dem Gate-Ausgang einen einfachen Ausgangsschutz hinzu
Ich wendete den üblichen Ansatz an und setzte mit einem Arduino Nano auf ein Brot, indem ich bei Bedarf Codeänderungen vornimmt. Der Code war ziemlich einfach zu ändern, es erforderte nur einige sorgfältige Nachverfolgung, wo Globals und Variablen verwendet wurden, und ein bisschen gesunden Menschenverstand bei der Anwendung der Arduino MIDI-Bibliothek, so dass ich nicht am Ende versuchte, Interrupts wiederzuverwenden (zum Glück die Compiler-Art von spots dies und gibt einen "bereits definierten" Fehler).