Meine Fresse. Mein Synth ist so kompliziert, daß ich schon selber nachdenken muß
Wollte grad mal nen Glide bauen. Weil ich das Bauen eines Glides ja dem User überlasse, dann muß ich den nicht in die Firmware einbauen...
Nuja, Scherz beiseite, ich hab ihn in der Firmware nicht drin, weil ich der Auffassung war, daß das die Modulationsprozessoren eh können. Und gerade hab ichs dann mal geschafft. Nur mal so der Überblick, was man dazu alles braucht:
Randinfos, ums zu verstehen:
Controller 0 ist der "Gate/Trigger-Controller". Da steht folgendes drin:
-1: Ruhe, nix wird gespielt
0: Es wird was gespielt, aber das wissen wir schon
1: Eine neue Note ist reingekommen, während wir schon was spielten
2: Eine ganz neue Note ist reingekommen, als nix gespielt wurde
Es gibt also 2 Werte für Note-On, der eine ist für ganz neue Noten (2), der andere fürs Legato-Spiel, wenn eine neue Note überlappend reinkommt, bekommt die nur den Wert 1. Der Hintergrund ist einfach, wie man gleich sieht.
Controller 1 ist der Notenwert, schon fertig umgerechnet auf den CV-Wert (einfach, mit 256 Multiplizieren, weil die oberen 8 Bits des DACs quasi Halbtöne sind, also 12 * 256 genau 1V an Differenz ist
Den komplizierten Rest erspare ich euch jetzt.
In dem Router wird Gate von Modulationsprozessoren 9 und 10 auf Controller 0 + 1 gesetzt. Also 0, 1, 2 oder 3 können da dann erscheinen. 0, wenn nix gespielt wird, >0, wenn was gespielt wird. Das Gate der Modulationsprozessoren ist "offen", wenn der Wert > 0 ist, andernfalls zu. Gut. soweit einfach.
Trigger vom Modulationsprozessor 9 ist Controller 0 - 1. Also wird nur getriggert, wenn eine neue Note reinkomme, nicht, wenn schon eine gespielt wird und währenddessen eine neue reinkommt.
Trigger vom Modulationsprozessor 10 ist Controller 0 direkt. Also Trigger sowohl bei neuen als auch bei überlappenden Noten.
Dann kommt der Rechenlauf. Dabei sieht MP 9 so aus:
Code:
.byte SET(3)
.word VAL(0)
.byte SET(3)
.word VAL(500)
Im ersten Schritt wird also der Ausgangswert auf 0 gesetzt, beim nächsten Durchlauf auf 500 (bzw. 500 * 2, weil die Werte noch multipliziert werden, um den kompletten Wertebereich auszuschöpfen, und das oberste Bit für die Entscheidung Register/Wert benötigt wird), dann ist das Programm beendet.
Danach wird der MP 10 gerechnet:
Code:
.byte GLIDE(0)
.word MUL(17, 1)
.word TIME(MUL(1, 1))
Ein Glide auf den Wert des Registers 17. Das ist das Register, wo wir im Router vorhin mal den Controller 1 hingepackt haben. Die Zeit des Glides wird von Register 1 bestimmt. Das ist der Modulationsprozessor 9, weil immer 8 unter sich sind, 9 - 8 = 1. Im ersten Durchlauf ist die 0, das Kommando ist also sofort fertig, der Ausgangswert ist gesetzt auf den Wert von Register 17.
Ab dem zweiten Durchlauf ist die Zeit für den Glide 1000, es dauert also immer 1000ms (in diesem Beispiel). Vorausgesetzt, MP 9 wird nicht neu getriggert.
Im Router wird der Ausgang vom MP 10 dann auf den VCO geschrieben, fertig ist der Ton
Und zusammengefasst:
Neue Note - beide MPs werden getriggert, es findet ein Glide vom aktuellen Pitch-Wert auf den neuen Pitch-Wert in Zeit 0 statt, also "sofort".
Legato, neue Note, während noch eine gespielt wird - MP 9 wird nicht neu getriggert, der große Zeitwert steht noch drin, der Glide von altem Notenwert auf den neuen findet also in einer vorhersehbaren Zeit statt - ein Glide.
Also Glide bei Legato, sonst nicht.
Und der Gag: die Zeit kann ich ja auch aus nem Controller holen, oder mit noch ein wenig mehr Rechenarbeit auch vom Velocity der überlappend neu angeschlagenen Note, ich kann auch statt der Unterscheidung nach dem Controller 0 irgendwas anderes nehmen, z.B. auch Velocity, bei hart angeschlagenen Tasten sofort hin, bei weich angeschlagenen nen Glide, oder irgendnen MIDI-Controller, der aus nem Pedal kommt, oder von mir aus auch den digitalisierten Modulationsbus, auf den mal den Noise geschaltet hat, umd zufällig zu steuern
Nur mal als kleines Beispiel, daß die einfachsten Sachen zwar relativ kompliziert zu lösen sind, aber man dafür nen Haufen Möglichkeiten hat. "Bau Deinen Synth doch selber, hier ist Dein Werkzeug". Ich wollte ja nen Modularen mit digitaler Steuerung...
Aber keine Angst. Für all son Kram wirds Templates geben. Und aufgrund der eher geringen Stückzahlen gibs auch persönlichen "Programmiersupport", wenns nicht aus der Anleitung hervorgeht, wie man was macht.
Edit: Ach ja... Man kann den Pitchbender vor oder nach dem Glide aufaddieren. Davor hat der dann quasi auch nen Glide (braucht nur nen zweiten Glide-Schritt im Programm), danach wirkt er "direkt". Kann man lustige Sachen mit machen