MIDI-Controller selbst bauen

  • Ersteller BonesLazy
  • Erstellt am
BonesLazy

BonesLazy

Registriert
03.01.13
Beiträge
420
Reaktionen
289
Ort
Bonn
Punkte
1.334
Ich möchte mir einen MIDI-Controller mit einem Arduino bauen.

Habt ihr Infos, Tipps für Tutorials oder eigene Erfahrungen, die ihr mir mitteilen könnt?
 
Such mal nach Götz Müller-Dürholt bei YouTube. Sehr sehr gut gemachte Tutorials von Anfang an erklärt. De Rost auf dem Kanal leider nicht mehr aktiv, baut da aber über mehrere Folgen einen eigenen MIDI-Controller mit einem Arduino. ich glaub der ist mittlerweile bei Behringer gelandet und produziert für die Videos.
 
Danke, den kenne ich schon und habe mit seinen Tutorials die ersten Grundlagen erlernt. Schade, dass er seinen Channel nicht mehr weiter betreibt.
 
Was soll es denn genau werden. Ich hab mal vor ein paar Jahren angefangen mein damaliges Pult umzurüsten von analog zu Hybrid. Hab das Pult dann aber irgendwann verkauft. Den Motorfader hab ich ans tatsächlich in beide Richtungen ans laufen bekommen.

 
Mich stört bei den meisten MIDI-Controllern die Haptik. Meist haben diese nur kleine Potiknöpfe und die Regelgeschwindigkeit ist immer die selbe. Ich möchte VSTIs damit ansteuern und gelegentlich brauche ich nur feine Bewegung und manchmal möchte ich schnelle Bewegungen haben.
Deshalb stelle ich mir vor einen Controller mit nur einem Encoder zu bauen, dem ich aber mittels einer Tastatur ganz schnell einen CC-Wert zu weisen kann und mit drei oder vier Tasten unterschiedliche Regelgeschwindigkeiten zuweisen kann.
Eventuell möchte ich zwei Encoder verwenden, welche unterschiedlich große Knöpfe haben.
 
Mich stört bei den meisten MIDI-Controllern die Haptik. Meist haben diese nur kleine Potiknöpfe und die Regelgeschwindigkeit ist immer die selbe. Ich möchte VSTIs damit ansteuern und gelegentlich brauche ich nur feine Bewegung und manchmal möchte ich schnelle Bewegungen haben.
Deshalb stelle ich mir vor einen Controller mit nur einem Encoder zu bauen, dem ich aber mittels einer Tastatur ganz schnell einen CC-Wert zu weisen kann und mit drei oder vier Tasten unterschiedliche Regelgeschwindigkeiten zuweisen kann.
Eventuell möchte ich zwei Encoder verwenden, welche unterschiedlich große Knöpfe haben.

DIe Regelgeschwindigkeit eines Encoders regelt man doch per Software. Zusätzlich Tasten drücken, das wird dich irgendwann nerven. Wobei man diese Möglichkeit als Option programmieren kann.
 
Zusätzlich Tasten drücken, das wird dich irgendwann nerven

Bisher stört mich eben, dass ich die Regelgeschwindigkeit eines Encoders nur über Software einstellen kann.
Zum Beispiel funktioniert das in Bitwig in der DAW selbst. Leider muss ich dafür aber immer in ein extra Menü, die Maus anfassen, den Wert über Tastatur eingeben und bestätigen. Das ist höllisch langsam.

In dem MIDI-Controller, den ich mir vorstelle, gibt es die Tasten A, B und C. Drücke ich die Taste A, zählt der Encoder pro Rastung einen Schritt hoch. Drücke ich B, dann zählt er pro Rastung 2 hoch und drücke ich C, dann zählt der Encoder z.B. 4 hoch. Schneller habe ich das noch nirgendwo gesehen. Jetzt bei MIDI 1.0 ist das vielleicht noch nicht so interessant, da ja nur von 0 bis 127 gezählt wird. In Hinblick auf MIDI 2.0, wo der Wertebereich um einiges höher liegt, kann das schon interessanter sein.

Ich habe eine BCR 2000 und da habe ich immer nur eine Geschwindigkeit für die Encoder. Oftmals sind mir die Encoder viel zu langsam. Ich muss den Encoder dreimal neu anfassen, um eine Regelung von 0 bis 127 hinzubekommen.

Ich hatte mal das Axiom 61 von M-Audio. Die hatten versucht, dass das Keyboard erkennt, wie schnell man den Encoder dreht und damit die Regelgeschgwindigkeit anzupassen. Ich bin damit nie klar gekommen.
 
Ich möchte mir einen MIDI-Controller mit einem Arduino bauen.

Habt ihr Infos, Tipps für Tutorials oder eigene Erfahrungen, die ihr mir mitteilen könnt?
hab ich mal gemacht.
hab mir die midi ein und ausgänge und die schaltungen selber gelötet.
das war ein kabelwust.
ein display und diverse knöppe, an denen man einstellen und speichern konnte,
fußtaster zu rauf- und runterschalten zwischen den gespeicherten presets.
weiß leider nicht, ob es den code noch irgendwo gibt.
hatte ein programmier- und speicherbares setup mit unterschiedlichen programm changes für mehrere output kanäle.
funktioniert hat es, das ganze ist aber nicht live-tauglich gewesen, weil es viel zu zerbrechlich war.
dafür, es dann nochmal solider zu produzieren, hatte ich leider keine zeit mehr.
 
Zuletzt bearbeitet:
Das wird nicht von einer dezentralen Software, wie z.B. einer DAW geregelt, sondern du musst dafür einen Code in der Arduino-Software programmieren.

Sowas kann man z.B. mit nem Intrerrupt für den Encoder machen. Du mißt dabei die Anzahl Impulse in einer definierten Zeit, sagen wir 100ms. Je mehr Impulse der Arduino empfängt desto größere Impulssprünge werden ausgegeben. Also, wenn du den Encoder ganz langsam drehst, dann wird nur jedesmal ein Impuls ausgeben. Bei schnellerem drehen werden dann z.B. nur jeder 10 Impuls ausgegeben. Also Midimäßig gibst du den Wert 10, dann 20, dann 30 usw. aus. Bei einer ganz schnellen Drehung kannst du dann von 0 auf 127 springen. Ich hoffe du verstehst das Prinzip.

Genauso funktionieren in vielen Hardwaregeräten die Encoder um Werte langsam - also in Einzellschritten - oder schnell zu ändern.
 
Das wird nicht von einer dezentralen Software, wie z.B. einer DAW geregelt,

In Bitwig geht das und ist eine super Funktion. Lässt sich leider nicht schnell genug umschalten.

Sowas kann man z.B. mit nem Intrerrupt für den Encoder machen. Du mißt dabei die Anzahl Impulse in einer definierten Zeit, sagen wir 100ms. Je mehr Impulse der Arduino empfängt desto größere Impulssprünge werden ausgegeben. Also, wenn du den Encoder ganz langsam drehst, dann wird nur jedesmal ein Impuls ausgeben. Bei schnellerem drehen werden dann z.B. nur jeder 10 Impuls ausgegeben. Also Midimäßig gibst du den Wert 10, dann 20, dann 30 usw. aus. Bei einer ganz schnellen Drehung kannst du dann von 0 auf 127 springen. Ich hoffe du verstehst das Prinzip.

Das ist ein super Ansatz, der mir bisher noch nicht untergekommen ist und den ich bestimmt verfolgen werde.
 
sondern du musst dafür einen Code in der Arduino-Software programmieren.
@BonesLazy schau doch einfach mal im Inet bei arduino.cc nach fertigen Bibliotheken. Da gibt es bestimmt etwas zu den RotaryEncodern. Ansonsten habe ich auch noch mein Controller-Projekt hier liegen. funktioniert schon ganz gut, allerdings fehlt mir momentan die Zeit das Projekt endlich fertigzustellen. Ich hätte nicht gedacht was für ein Kabelsalat dabei rauskommt.
 
schau doch einfach mal im Inet bei arduino.cc nach fertigen Bibliotheken.

Dankeschön. Dort habe ich reingeschaut und bin erst einmal überfordert. Mittlerweile habe ich mich schon ganz gut in das Thema reingefuchst und komme schon ganz gut zurecht.
Ich habe mich mittlerweile dazu entschlossen fürs Erste einen Controller mit nur einem Encoder zu bauen. Dieser bekommt zusätzlich drei Taster, mit welchen ich verschiedene Geschwindigkeiten per Knopfdruck einstellen kann.

Zur Zeit ist mir nur noch eine Sache unklar. Ich weiß noch nicht, wie ich bei MIDI relative CC-Werte ausgeben kann. Hat dafür noch jemand einen Tipp?
 
Ich weiß noch nicht, wie ich bei MIDI relative CC-Werte ausgeben kann. Hat dafür noch jemand einen Tipp?
Das habe ich nicht verstanden. Was genau möchtest Du denn "relativ" ausgeben? Im Midi-Standard ist der Control-Change-Befehl auf 7 bit festgelegt. Also kann jede CC# Werte von 0 bis 127 verarbeiten. Diese Werte werden dann am MIDI-Controller über ein Eingabegerät (Schiebe- oder Drehpoti, Encoder, Taster, etc.) verändert.
Bei einem Poti misst Du den eingestellten Widerstand und rechnest diesen über den Programmcode im Sketch in die 7 bit um (map-Befehl).
Bei einem Encoder passiert das nicht analog über Spannungsmessung, sondern digital. Du speicherst Deinen eingestellten Wert in einer Variable und veränderst diesen beim Drehen des Encoders, entweder nach oben oder unten.
Oder habe ich vlt. etwas falsch verstanden?
 
Man kann Encoder softwareseitig so einstellen, dass sie absolute Werte ausgeben, d.h Werte von 0 bis 127. Das möchte ich in den meisten Fällen nicht, da es so zu Sprüngen im VST kommen kann. Dies geschieht unter anderem dann, wenn man z.B Cutoff mit dem MIDI-Controller verändert, und später den Cutoff im VSTi mit der Maus anderes einstellt. Nun steht der Regler des Controllers an einer anderen Position als der Cutoff in dem VSTi. Bedient man nun wieder den Encoder, springt der Cutoff auf den Wert der ersten Bedienung.

Um diese Sprünge zu vermeiden, lässt man einen Encoder +1 ausgeben, wenn man in Uhrzeigerrichtung dreht und -1 wenn man entgegengesetzt dreht. So ist es immer egal, wenn man mal Maus und mal Encoder benutzt.

Erste Beispiel ist der absolute Modus eine Controllers. Zweites Beispiel ist der relative Modus.
 
Ach so, du willst also per Hardware-Controller und in der VSTi drehen und beides soll immer synchron laufen? Das wird mit dem Senden von relativen Werten (+1 oder -1) vermutlich nicht funktionieren. Im Midi-Standard sind die Datenpakete, die gesendet werden fix definiert. Der Götz hatte das in seinem dritten Video ziemlich gut erklärt.
MIDI Daten-Format Tutorial (E03) - MIDI-Controller selber bauen - YouTube

Um das zu realisieren musst Du auch die von Deinem System ausgehenden Midi-Signale in den Controller senden. Wie das genau funktioniert weiß ich allerdings nicht, da ich bis jetzt immer nur in der anderen Richtung gearbeitet habe.

Ich würde das im Arduino-Sketch sinngemäß so machen:
Eine Variable definieren, die den Intervall der CC-Werte speichert -> INTERVALL
Eine Variable definieren, die den CC-Wert beinhaltet -> ENCODERVALUE

Dann den Intervall beim Drücken eines Tasters verändern:
Taster A -> INTERVALL = 1
Taster B -> INTERVALL = 2
Taster C -> INTERVALL = 4​

Beim drehen des Encoder den Wert ändern indem ein separates void aufgerufen wird, in dem steht:

rechts drehen: ENCODERVALUE = ENCODERVALUE + INTERVALL
links drehen: ENCODERVALUE = ENCODERVALUE - INTERVALL

Midi senden​

Dieses void muss auch aufgerufen werden, wenn der Controller Midi-Daten aus deiner DAW empfängt. Wie das genau geht weiß ich wie gesagt nicht. Vermutlich muss der Controller als Gerät in Deiner DAW irgendwie definiert/programmiert werden.
 
Das wird mit dem Senden von relativen Werten (+1 oder -1) vermutlich nicht funktionieren. Im Midi-Standard sind die Datenpakete, die gesendet werden fix definiert

Prinzipiell weiß ich, dass es funktioniert. Meine BCR2000 macht das, und Bitwig und Cubase können relative CC-Messages verstehen. In der Zwischenzeit habe ich einen Ansatz gefunden. Die Controller 96 und 97 können benutzt werden, um eins rauf oder runter zu senden.
Hier ist das erklärt: http://www.doepfer.de/controller/overview.htm

Um verschiedene Geschwindigkeiten zu erzielen, lasse ich die Message mittels einer Schleife mehrfach senden.

Controllerdaten aus Cubase heraus zu senden wäre möglich. Bei Bitwig weiß ich das nicht. Daten aus der DAW braucht mein Controller aber nicht zu empfangen.
 
Ich habe mir die Beschreibung auf der Doepfer-Seite mal angesehen, danke für den Link. Ich wusste ehrlich gesagt nicht, dass es diese Möglichkeit gibt. So wie ich das lese ist das doch schon recht kompliziert und auch nicht garantiert, das es funktioniert. Hmmm, das übersteigt dann wohl doch mein Niveau.
 
Ich möchte mir einen MIDI-Controller mit einem Arduino bauen.

Habt ihr Infos, Tipps für Tutorials oder eigene Erfahrungen, die ihr mir mitteilen könnt?

Ich hatte mal die Idee mir einen Midi Controller auf Arduino Basis zu bauen, um Lightroom/Photoshop damit ansteuern zu können. Habe den Plan dann nach viel Lesen verworfen, da das was ich wollte mit einem Behringer Xtouch Mini für kleines Geld und mit wenig Zeitaufwand genauso funktioniert.
Wenn du Infos zum Arduino als Midi Controller brauchst, bleibt dir nichts anderes übrig als das web auf Englisch zu durchsuchen. Das bereits genannte arduino.cc und das dazu gehörige Forum war damals auch eine meine ersten Anlaufpunkte. Ich habe meine Idee dann später verworfen, da der Zeit- und Programmieraufwand zum Anpassen auf die eigenen Vorgaben schlicht zu aufwendig war.
Soll dich nicht abschrecken, aber ohne Auseinandersetzung mit englischsprachigen Quellen wirst du keinen Erfolg haben. Vielleicht ist hier etwas für dich dabei?
https://create.arduino.cc/projecthub/projects/tags/midi
 
Daten aus der DAW braucht mein Controller aber nicht zu empfangen.

Das wäre aber die richtige Vorgehensweise wenn man sauber programmieren möchte.

Ist-Wert des Parameters auslesen, dann entsprechend der Hardwarebewegung den Wert erhöhen oder verringern, neuen Parameterwert an die DAW übertragen.
 
Hmmm, das übersteigt dann wohl doch mein Niveau.

Meins auch! :confused: Aber ich gebe nicht auf.

Daten aus der DAW braucht mein Controller aber nicht zu empfangen.

Das wäre aber die richtige Vorgehensweise wenn man sauber programmieren möchte.

Ist-Wert des Parameters auslesen, dann entsprechend der Hardwarebewegung den Wert erhöhen oder verringern, neuen Parameterwert an die DAW übertragen.

Mein Controller soll doch nur einen Encoder bekommen und bisher noch kein Display oder ähnliches. Somit brauche ich keine Daten aus der DAW in den Controller senden.

Mittlerweile habe ich rausgefunden, dass man in Bitwig eine API einbinden kann und dort einen relativen ControlChange anlegen kann. Mit meinem bisherigen Halbwissen müsste es so funktionieren, dass wenn ein CC-Wert von Null gesendet wird, der Wert eines Reglers in Bitwig um Eins gesenkt wird. Wird ein CC-Wert von 127 gesendet, dann wird der Regler in Bitwig um Eins erhöht.
Folglich reicht es, wenn der Hardwarecontroller bei einen Linksdreh einen CC-Wert von 0, und bei einem Rechtsdreh einen Wert von 127, sendet.
 

Oft gelesene Themen

Zurück
Oben