tronique schrieb:
- wobei die Software im Matrix aber ziemlich langsam sein muss, an zwei Reglern gleichzeitig drehen is nich.
Die Midischnittstelle empfängt die Daten per Interupt (d.h. sofort - sonst würden Zeichen verlorengehen) packt sie aber nur in einen Zwischenspeicher.
Die Engine arbeitet mit ca. 120Hz, d.h. alle 8 ms.
Die Engine guckt bei jedem Engine-Takt nach, was für Zeichen inzwischen eingetrudelt sind und arbeitet so die Schlange ab. Jedesmal wenn ein Parameter-Ändern-Befehl (also ein SysEx) vollständig ist, wird der Programmteil um die Modulationsmatrix[1] neu zu berechnen aufgerufen. Das ist ziemlich aufwendig.
Die naheliegende Optimierung ist nun, sich nach einem Befehl nur zu *merken*, das man die Matrix neu aufbauen muss, aber erstmal die Schlange weiter abzuarbeiten. Denn vielleicht steht da ja noch ein Befehl drin der ebenfalls wieder die Matrix neu berechnen lassen würde. Erst wenn die Schlange leer ist wird die Matrix dann wirklich neu berechnet und zwar nur einmal pro Enginedurchlauf.
Das verblüffende ist wirklich das solche eher halbkomplizierten Fehler so gar nicht zu der eigentlichen Sound-Engine passen - die scheint schon ziemlich ausgetüftelt programmiert.
Das gehört zu den Dingen die ich irgendwann noch mal ändern will, Fernziel ist immer noch den Matrix 1000 mit einem BCR2000 direkt (und komplett) edieren zu können.
Um Missverständnissen vorzubeugen: Modulationen per Modwheel ... (CC) werden sehr viel schneller verarbeitet[2], die betrifft das nicht.
Wer also beim spielen am Cut-Off drehen will, lege sich den bitte (in der Matrix) auf einen Controller, dann klappts auch live mit dem fiiiiuuup.
[1]programmiertechnisch ist das eigentlich eher so eine Art dynamisch erzeugter Code, es wird sozusagen eine zur aktuellen Modulationsmatrix passende Engine erstellt. Ausserdem gibt es mehr als eine Routine, die jeweils nur Teile neu erstellen. Das ist aber für das Prinzip egal.
[2]das ist der Trick an der erstellten Engine, in der sind die einige Multiplikationen von Tabellenwerten miteinander und mit den Modulationsindizes schon passend vorberechnet.