So, mal wieder Entwicklungsnews oder auch Architekturinfos...
Geht zwar im Moment eher schleppend voran, aber die ersten Slave-CPU-Updates per SysEx sind schon drin.
Mal meine Überlegungen zum Routing all der vielen möglichen Inputs zu ihren Outputs (also CVs und so Zeug)
Scope: Voice-Board (was ja nicht zwangsläufig eine Voice darstellt, man kann mehrere Voice Boards zu einer Voice zusammenfassen, um mehr Möglichkeiten zu bekommen)
Es wird 64 "Controller slots" geben. Dahin werden MIDI-Controller (normale Controller, RPN, NRPN) hingeroutet. Ein Slot hat die Informationen, welcher Controller da hin kommt, ob er 7 oder 14 Bit ist (in letztem Fall dann entsprechend 2 Controllernummern, Coarse und Fine), einige sind mit Defaults vorbelegt (Modulation, Volume und so, also die, die standardisiert sind), aber dennoch änderbar, den Pitchbender (der ja kein Controller ist, sondern ne eigene MIDI-Message besitzt) werde ich vermutlich auch da reinbringen, vermutlich fest auf Slot 0.
Diese Controller-Slots kennen auch Default-Werte, die gesetzt werden, wenn die MIDI-Message zum resetten aller Controller rüber kommt, bzw. beim Patch-wechsel (wo einfach der Master mehr oder weniger nen Reset ans Voice-Board schickt).
Es gibt also 64 Slots, in denen MIDI-gesteuert Werte drin stecken, die durch frei wählbare Controller beeinflusst werden. Dahinter stecken auch all die Knobs vom Bedienpanel, welches nix anderes als ein mit Ausgabefeatures ausgestatteter MIDI-Controller ist. Während der Entwicklung übernimmt das wohl ein BCR2000, evtl. bekommt der dann parallel für den Output noch ein LCD dran, was dann in der Endfassung auch eingebaut ist, und per SysEx gesteuert wird (interner Kram).
Neben diesen 64 Controller-Slots gibt es 64 weitere Slots, die die endgültigen Werte zum Formen des Klangs hergeben. Davon sind 24 (vermutlich) mit den Outputs der Modulationsprozessoren (formerly known as envelope processors) belegt, 8 sind die digitalisierten Werte der 8 Modulationsbusse, und 32 sind frei verfügbar. Diese können statisch gesetzt werden (für Offsets z.B.), Daten aus Controller slots holen oder Daten aus den Notenwerten, die per MIDI reinkommen. Diese Slots haben neben ihren Sourcen auch Destinations, die dann auch wild geroutet werden können. Die Modulationsprozessoren können auf die ersten 32 Slots zugreifen, insgesamt sieht das dann so aus:
0-7 -> Modulationsprozessor 1 Outputs
8-15 -> Modulationsbus digitalisierte Daten
16-31 -> frei zuweisbar
32-39 -> Modulationsprozessor 2 Outputs
40-47 -> Modulationsprozessor 3 Outputs
48-63 -> frei zuweisbar
Daraus ergibt sich dann, daß Modulationsprozessor 1 auf so ziemlich alles zugriff hat zum Modulieren, und Modulationsprozessor 2 und 3 auf die Outputs vom MP 1 und all die anderen Werte von 0-31 zugreifen können.
Die Slots bekommen im Zielrouting noch alle ein wenig Zusatzdaten für Skalierung (Multiplikation/Division), womit man sie auch invertieren kann (Mul/Div mit negativen Werten). Wenn mehrere Slots das selbe Ziel haben, werden die Werte entsprechend zusammenaddiert, so kann man mit statischen Werten Offsets bilden und auch mehrere Modulationsquellen auf ein Ziel wirken lassen. Was ja auch notwendig ist, wenn man mal vom Normalfall ausgeht, daß ein Slot den Notenwert bekommt und einer den Pitchbender-Wert, und evtl. noch den Ausgang eines Modulationsprozessors als LFO.
Als Ziele für das Routing gelten alle Steuerspannungen, also VCO-Pitch exponentiell und linear, Pulsweite, Filter-Cutoff, alle VCAs da drin (darunter neben den Ausgangsamplituden der Komponenten auch solche Dinge wie Filter-Reso, das gibt kein dediziertes Signal, weil quasi die Resonanz des Filters auch "verdrahtet" wird, indem der Ausgang über nen Audio-Bus wieder an den Eingang zugemischt wird).
Wenn ich merke, daß hier 64 Slots nicht reichen, gibts evtl. auch 128 davon.
Die Modulationsprozessoren besitzen ja neben den Registern zur Modulation (wenn nicht feste Werte im Modulationsprogramm verwendet werden) noch Gate und Trigger-Inputs, für diese wirds wohl auch ne eigene Slot-Batterie geben, womit man diverse Events an diese beiden Inputs routen kann. Als klassische Beispiele für Gate z.B. NoteOn/NoteOff, aber auch statische Werte, Controller (für Sustain-Pedal) und eine Mischung daraus (damit das Sustain-Pedal auch nen Sinn macht), Trigger kann auf Note-On gesetzt werden, Controller (bzw. Register, falls man seinen Trigger von irgendwas modulieren lassen will), oder auch MIDI-Clock mit einstellbarem Vorteiler (für LFO-Sync nach MIDI).
Und nachdem ich gestern meinen E-Bass mit dem StepFilter VST-Plugin beglückt hatte, hab ich beschlossen, daß ich noch 8 oder 16 einfache Pattern Sequencer einbauen werde, die man auch irgendwo hin routen kann. Deren Outputs fallen kann man wohl auch in der Modulationsmatrix verwenden, evtl. werden sie auch einfach in die Register schreiben, womit sie an allen Stellen verwendet werden können, wo Register zum Einsatz kommen (Zielregister ist dann einstellbar, um nicht alle wertvollen Register 0-31 zuzumachen, die die Modulationsprozessoren benutzen können), so kann man nicht nur Pitch, sondern auch alles Andere, wie Attack, LFO-Speed oder sonstigen Kram mit dem entsprechenden Pattern modulieren. Und da ich ja für alle Verrücktheiten zu haben bin, und die Pattern Sequencer im Prinzip vereinfachte Modulationsprozessoren sind, kann man die Werte im Pattern Sequencer wohl auch wieder modulieren. Diese Pattern Sequencer sind entsprechend auch mit Gate/Trigger ausgestattet und können dahingehend wie die Modulationsprozessoren gesteuert werden. Durch die Modulationsmöglichkeiten sind die Dinger im Prinzip auch als zusätzliche Sample&Holds verwendbar. Im Gegensatz zu den Modulationsprozessoren, die nur Trigger und Gate kennen, kommt hier noch ein Clock hinzu, der gesteuert werden kann wir der Trigger, also z.B. Sync auf MIDI-Clock oder durch Verwendung des Noise als Clock input auch zufällig, was die Verwendung als Sample&Hold dann auch interessanter macht. So sehr, wie da alles modulierbar ist, weiß ich noch nicht, ob ich evtl. auf den Hardware-Sample&Hold verzichte, da ich in den Pattern Sequencern (und dem anderen Zeug) ja auch Zugriff auf die analogen Modulationsbussen habe, wenn auch mit eingeschränkter Samplerate (vermutlich 1KHz).
Natürlich kann man die Pattern Sequencer auch als Arpeggiators benutzen, also z.B. Transponierwerte drin, der Grundoffset ergibt sich dann aus dem Notenwert, der aktuell im Register hängt.
Hm. Ja. Da brauch ich dann auch mehrere Notenwert-Register, die dann in Reihenfolge der einlaufenden NoteOns befüllt werden. Die Routine hatte ich schon in der Testversion damals drin, ein Notenstapel von 8 aktiven Noten hat sich da als sinnvoll erwiesen -> Controllerslots.
Und was vielleicht auch noch interessant ist: Ein Voice Board bekommt 2 Audio-Outs, jeder davon kann separat konfiguriert werden, aus welchen Audio-Bussen er sich bedient und einen VCA, der die Amplitude regelt. Wie bei den Modulationen regelt der Einspeisepunkt die Amplitude des jeweiligen Audio-Busses. Von diesen 2 Audio-Outs ist einer der endgültige Ausgang des Voice-Boards, der andere bekommt noch nen panning-VCA und geht auf die Stereooutputs des Gesamtkonstrukts.
Ein Voiceboard wird komplett im MIDI-Protokoll gesteuert, allerdings gestrippt, es kennt z.B. keinen Program Change, Patches gibts nicht, sondern eine Konfiguration, die per SysEx reingesteckt wird, außerdem wird hier MIDI über Synchron 1-4MBit gesprochen. Vor den Voice Boards (von denen man mit dieser Architektur theoretisch eine beliebige Anzahl installieren kann) steckt dann der Master Controller, der auf mehreren MIDI-Kanälen hören kann, das Routing auf die Voice Boards macht und auch die Patches verwaltet, ein Patch kann ja mehrere Voice Boards beinhalten, um dem Wahnsinn keine Grenzen zu setzen.
Alles in allem also eine technisch gesehen sehr simple Hardwarearchitektur, die durch die Software dann durchaus nette Möglichkeiten hergeben dürfte. Übrigens kann man auf Ebene Voiceboard wirklich jeden noch so winzigen Kram per SysEx umpopeln, im Extremfall sogar die internen Kalibrierungswerte für CV Scaling, VCA Offsets und all dieses Zeug. Jeder Analogschalter hat ein Bit im SysEx, und wenn irgendeine Eigenintelligenz eines Voice Boards eine kranke Funktion blockiert, kann man jederzeit die Firmware überbügeln, von jeder der verbauten CPUs, derer ein Voice Board 5 Stück besitzen wird.
In der geplanten Vollausstattung mit 8 Voice Boards bedeutet das dann mindestens 41 CPUs. In einem Analogsynthesizer. Klingt "ein wenig ungewöhnlich", aber im Audioweg ist kein einziges digitales Bauteil untergebracht (wenn man Analogschalter nicht in diese Kategorie zählt, von denen sind sehr viele verbaut
, wenn man das nicht will. Aber da man ja einen VCO auch von einer CPU syncen kann, geht hier der Spaß eh erst richtig los. Wie wärs mit VCO-Sync mit Delay? Also nicht einfach auf VCO2 draufhauen, wenn VCO1 grad entlädt, sondern noch einen Dalay dazwischen packen, um die Phasenlage zu beeinflussen?