Optimierung der Funktionsweise

Sleep Mode

Wenn ein Modul nicht gebraucht wird, schaltet es automatisch in den Sleep Mode = verwendet keine Rechenleistung. Bei 3rd-Party-Modulen ist dies nicht immer der Fall, weswegen hier ein Anzeigeinstrument gut ist, das den aktuellen Zustand des Moduls verrät:

1. Über "Special -> Monitor" verrät eine Anzeige, ob das jeweilige Modul gerade etwas sendet oder nicht


Monitor, in den Signalweg eines einfachen Synthesizers eingebaut
sleepMode-Monitor1.se1

2. über das 3rd-Party-Modul "BookExamples -> sc:status" und einen davorgeschalteten Inverter (Modifiers -> Inverter) wird ein Signal (10 V) ausgegeben, sobald ein daran angeschlossenes Modul arbeitet (sonst 0 V; ohne Inverter wäre es umgekehrt). Damit kann man z.B. eine LED-Anzeige koppeln:


LED-Anzeige, in den Signalweg eines einfachen Synthesizers eingebaut
sleepMode-Monitor2.se1

Flow Control

Wenn es geht: lieber "1->Many"-Schalter verwenden und so wenig wie möglich "Many->1"-Schalter


links: ressourcensparend: "1->Many"
rechts: ressourcenverschwendend: "Many->1"

Schalter und Slider immer vor den Einsatz eines Moduls schalten (da, sobald der Regler oder Schalter auf 0 steht, das Modul in den Sleep Modus geht), nicht dahinter:


Beispiel für einen Bypass-Switch
immer: Effekt ist nachgeschaltet


Beispiel für eine Bypass-Schaltung mit Slider (Bypass, wenn Slider=0)
immer: Effekt ist nachgeschaltet

 

Special/Denormal Detector/Cleaner: Sehr hilfreich bei Modulen mit internen Feedbackschleifen wie z.B. Nachhallschaltungen, Filter o.ä. am Audioausgang zwar noch Werte anliegen, diese jedoch unhörbar klein sind und stärkere Rechenleistung verbrauchen (da, je geringer die Werte, desto größer die Präzision der Verarbeitung). Bei den normalen SynthEdit-Modulen sind diese Dinge schon eingebaut, bei 3rd-Party-Modulen hingegen können diese äußerst kleinen Werte auftauchen und zu einem enormen Ressourcenverbrauch führen


Denormal Detector und Cleaner im Signalweg


Bei Effekten: Über das 3rd-Party-Modul "Autosleeper" kann Rechenleistung gespart werden, indem es direkt an den Eingang angelegt wird und denn Effektweg nur freigibt, sobald die Spannung über einen bestimmt Wert steigt.

 


Stereo-Autosleeper-Modul

 

Bei Synthesizern:

Polyphonie: je mehr Stimmen ein Synthesizer hat, desto stärker der Ressourcenverbrauch. Deswegen: Polyphonie so weit es geht einschränken. Am besten: Polyphonie direkt im äußersten Container festlegen


Polyphonie am besten im äußersten Container einstellen, nicht zu viele Stimmen zulassen

Ressourcensparend ist es auf jeden Fall auch, einen Mono-Mode-Switch an den "MIDI to CV" anzulegen, so dass der User den Synthesizer monophon benutzen kann.


Mono-Mode-Schalter am VCO

Envelope: Ausschwingzeiten (im ADSR) sollten möglichst kurz gehalten werden: je länger die Ausschwingzeit, desto größer die Gefahr, dass viele Stimmen (auch unhörbar) übereinander liegen und je mehr Stimmen übereinander liegen, desto größer der Ressourcenverbrauch.

Lineare und nichtlineare Module: Bei "linearen" Modulen ist es egal, an welcher Position im Signalfluss sie stehen, sie verbrauchen immer die gleiche Rechenleistung. Lineare Module sind z.B. Delay2, Pan, Level Adj.

Bei "nichtlinearen" Modulen ist es entscheidend, wo sie im Signalverlauf stehen, da in ihnen meist davon ausgegangen wird, dass sie polyphon oder in mehreren Kanälen arbeiten. Nichtlineare Module sind z.B. VCA, VCO oder Waveshaper.

Daumenregel für ressourcensparendes Programmieren: Nichtlineare Module im Signalfluß möglichst weit hinten halten, so dass möglichst viel linear verarbeitet wird.

Special/Voice Combiner: Mehrere Quellen lassen sich in einem Voice Combiner zusammenführen und dann gemeinsam weiterverarbeiten (= ressourcensparend)


Voice Combiner im Signalfluss

Weniger ist mehr: Wenn mehrere Lösungswege möglich sind: möglichst den wählen, bei dem die wenigsten Module verwendet werden, da jedes Modul ein wenig Rechenleistung benötigt.

Waveshaper2: gut zum Umrechnen von Volt in Hz (oder andere rechenintensive Gegebenheiten, in denen eine Variable verändert wird): Waveshaper arbeitet mit Werten von -5 bis +5 Volt (Bereich lässt sich mit sc:Rescaler beliebig erweitern; zurückskalieren kann man dann in Waveshaper selbst, indem der Wert mit einem beliebigen Faktor multipliziert und/oder mit einer Konstante addiert wird). Sollen z.B. nur positive Zahlen verwendet werden: immer (x + 5) einsetzen.


Volt in Hz umrechnen mit dem Waveshaper2 (1 Hz=13,75 * 2 hoch x Volts)
waveschaper2_umrechnen.se1

Bei identischen oder synchron verlaufenden Stereo-Einstellungen: Wenn mit Frequenzen gearbeitet wird: diese immer vorher aus den Spannungswerten ausrechnen und dann gleichzeitig an beide Module verschicken (da die Umrechnung immer etwas aufwendig ist, s.o.), wie z.B. bei Stereofiltern:


Bei identischen Einstellungen: "Volt nach Hz"-Rechnung immer zuerst ausführen
(hier via KDL Volts2Hz-Modul), danach das Ergebnis durch 0,001 teilen

Gleiches gilt, wenn Werte synchron verändert werden, wie z.B. bei einem "detuned-Filter", in dem die eine Filtergrenzfrequenz in einer Oktave (hoch 2; oder einem anderen Intervall mit einem anderen Wert) parallel zur anderen verläuft. Über den Waveshaper2 kann der entsprechende Intervallwert eingestellt werden


Bei synchronen Einstellungen: "Volt nach Hz"-Rechnung immer zuerst ausführen
(hier via KDL Volts2Hz-Modul), danach das Ergebnis durch 0,001 teilen

Bei Filtern ist dies eine gute Methode, um mit Frequenzen umzugehen. Bei Oszillatoren lieber intern auf 1 Volt/kHz umschalten.

 

 

Als VST(i) bzw. dll abspeichern

bevor das VST erzeugt werden kann, müssen alle Elemente (bis auf die Audio- und MIDI-Ein- und Ausgänge) via "Edit -> Containerize Selection" in einen Container verpackt werden. Über die Properties des Containers sollte eingestellt werden, dass alle Bedienelemente sichtbar sind ("Controls on Module" und "Controls on Parent" = true).

Via File -> Save as VST öffnet sich ein Dialogfenster, in dem die Eigenschaften des VSTs eingestellt werden können, wie z.B. Produkt- und Dateiname oder eine ID, damit der spätere VST-Host anhand der ID das VST erkennen kann (hier einen beliebigen Code mit 4 Ziffern/Buchstaben eingeben).


Dialogbox, um den Quellcode als VST(i)-dll abzuspeichern

Wenn im Programmcode ein MIDItoCV-Modul enthalten ist, so wird das VST als MIDI-steuerbares Instrument abgespeichert ("Plugin is Synth" = VSTi), sonst wird es als VST-Effektgerät abgespeichert.

Man kann noch weiter einstellen, ob man einen Nag-Screen einbauen möchte (der immer wieder auftritt, um einem User zu sagen, dass man die Vollversion des gerade erstellten Synthesizers kaufen soll) und ob man das VST als mono- oder stereo-PlugIn verwenden möchte.

Unter "Embedded Files" kann man noch Grafiken, Sounds etc auswählen, die in das Modul mit eingebettet werden sollen.

Mit einem Klick auf OK wird das VST erzeugt und unter dem Pfad zum VST-Ordner abgespeichert. (Der Pfad zum VST-Ordner befindet sich unter "Edit -> Preferences -> File Locations")