Subcontrols

Im Panelmodus lässt sich im Menü der rechten Maustaste via Skin eine Grafik hinterlegen, die man vorher unter C:\Program Files (x86)\SynthEdit\skins\ (und ein individueller Ordner für die Projektgrafiken) gespeichert mit dem Namen background.bmp oder background.png abgespeichert hat.

mit Hilfe von Textdateien und global.txt kann festgelegt werden, ob der Background gekachelt werden soll (in background.txt) und welches Format die Schrift haben soll etc. (in global.txt)

Programme (GUI-Maker), um Hintergründe und Knöpfe zu designen:

Die einzelnen Bedienelemente lassen sich im Aussehen über Subcontrols verändern:

Subcontrols = Module, mit denen das Aussehen der Benutzeroberfläche verändert werden kann bzw. mit deren Hilfe man die Standardmodule von Synthedit ersetzen kann (immer hellblauer Hintergrund, können nicht mit Audio-Modulen direkt verschaltet werden).

Normale Controller-Module besitzen zwar eine Reihe von Einsatz- und Aussehensmöglichkeiten, jedoch ist die Auswahl für die graphische Oberfläche sehr begrenzt:


verschiedene grafische Oberflächen für das Slider-Modul

 

Aus Subcontrols zusammengesetzte Controller-Module (in einem Prefab) sind in ihrem Aussehen hingegen beliebig variabel und erweiterbar:


Beispiel für einen aus Subcontrols zusammengesetzten Controller (controls/knob)

Bitmap Image = man kann beliebige bmp oder png-Bilder einfügen (auch Animationsserien sind möglich). Bei Animationsserien wird über "Animation Position" die Position innerhalb der Frames zwischen 0 (= erstes Frame) und 1.0 (= letztes Frame) verändert. Das jeweilige Animationsframe wird über "Animation Position" im Modul "Patch Mem - Float" aus den Werten von "Min Value" und "Max Value" ausgerechnet.

Module, die in ihrem Namen ein "Patch Mem" haben, sind die Verbindungsstellen zwischen den Vorgängen bei der Audioverarbeitung und denen auf der Benutzeroberfläche. Über "Patch Mem" werden die einzelnen Variablen Ausgabeelementen zugewiesen.

Wenn man wissen möchte, welche Variablen (oder "Parameter") von einem Modul verändert werden können, kann man sich das am besten über die rechte Maustaste im Automation-Fenster ausgeben lassen:


Knob-Prefab und dazugehörendes Automation-Window

  • Label = Bezeichnung des Parameters
  • Value = Wert des Parameters
  • Controller = zuweisbarer MIDI-Controller
  • Ignore PC = true (Program Change-Daten werden ignoriert) oder false (Program Change-Daten werden zugelassen)(am besten auf true lassen)
  • Private = true (Parameter werden von VST-Automation ausgeschlossen) oder false (Parameter werden zur VST-Automation zugelassen)(am besten auf true lassen)

Man kann sich eigene Controller-Prefabs aus Subcontrols zusammensetzen und sie als Prefab abspeichern (und so immer wieder verwenden).

Umrechnungen (z.B. Volt in Hz oder dB) können auf die Benutzeroberfläche gelegt werden und stören dadurch nicht den Ablauf während der Klanggenerierung (GUI und DSP werden völlig unabhängig voneinander verarbeitet)

 

Anschlüsse und Datentypen:

Datentyp Anschluss
float (in blau) für jede Art von Zahlen
int (in gelb) für ganze Zahlen (integer)
bool (schwarz) für logische Variablen (true, false)
text (dunkelrot) für jede Art von Text
list (grün) für Listen, Dropdown-Auswahlen etc.

Im Gegensatz zum Bereich der Audioverarbeitung: Module der GUI arbeiten mit bidirektionalen Verbindungen (= wird eines verändert, dann wird gleich das gegenüberliegende verständigt) = die GUI-Verbindungen haben zwei Pfeile, während DSP-Verbindungen nur einen Pfeil haben.

Auch wenn die GUI-Module bidirektional arbeiten gibt es eine Flussrichtung:
Aus-/Eingänge auf der linken Seite = Master
Aus-/Eingänge auf der rechten Seite = Slave

 

Verschiedene Arten von Modulen:

  • Parameter-Schnittstelle (Patch Mem)
  • Daten manipulieren
  • Daten konvertieren
  • GUI Input/Output
  • Datenfluß (routing)
  • System Command

Parameter-Schnittstelle (Patch Mem)

Patch Mem = Schnittstellen zwischen DSP und GUI. Diese können entweder Fließkommazahlen, Listen oder Text von der einen auf die andere Seite übertragen. Alle anderen Variablenarten (wie Volt, int oder bool) müssen vorher konvertiert werden:


Verschiedene Arten von Patch Mem-Schnittstellen

Über "Patch Mem - Text" lassen sich auch Windows-Dialogfenster öffnen:


Struktur, um Windows-Dialogfenster zu öffnen
dialogfenster.se1

Daten manipulieren

Bools to list und List to Bools

dient dazu, um Listenelemente zusammenzustellen oder um aus schon vorhandenen Listen nur eine Auswahl anzubieten. Typische Verschaltung:


typische Anwendung für Bools to List und List to Bools-Module
bools2list.se1

dB to Animation

dB-Umfang von -20 bis +3 dB wird konvertiert zu einer Animation zwischen den Positionen 0,0 und 1,0. Werte unterhalb von -20 dB und oberhalb von +3 dB werden automatisch abgeschnitten. Gutes Beispiel für einen Einsatz: das VU-Meter von SynthEdit (unter "Controls/VU meter")


interne Struktur des Controls/VU meter

Float Scaler

mit Float Scaler kann man den Bereich von Fließkommazahlen durch Multiplikation mit einem Faktor beliebig vergrößern/verkleinern sowie einen Offset hinzuaddieren (dass z.B. eine Skala nicht bei 0 anfängt, sondern z.B. bei 10).

Value Out = Value in * Multiply by + Add

Float Scaler funktioniert bidirektional: wenn sich an einer Seite der Wert ändert, wird er auf der anderen Seite automatisch angepasst.

 


Float Scaler innerhalb einer Struktur
floatscaler.se1

Image to Frame

Image to Frame gibt die aktuelle Frame-Nummer einer Animation wieder, wird meistens mit einem Bitmap Image verbunden (Umwandlung der Integers und Ausgabe des Textes geschieht hier über DH_Sub-ControlPak_v2.0.zip)


Image to Frame, um die aktuelle Frame-Position wiederzugeben
image2frame.se1

Increment2

Mit Increment2 kann man eine Liste durchsteppen und jeweils zum nächsten oder vorangegangenen Wert gehen (springt am Ende der Liste automatisch auf den Anfang, bzw. beim Decrement am Anfang der Liste automatisch auf das Ende). Im Prefab Controls/List Entry2 kann man die Funktionsweise und den Einbau des Moduls gut sehen

 


interne Struktur des Controls/List Entry2

Spring

Spring setzt einen durch Mausklick veränderten Wert auf einen Default-Wert zurück, sobald die Maus wieder losgelassen wird. Findet besonders bei Modulationsrädern seine Anwendung


interne Struktur des Controls/Pitch Bender (und Properties für das Modul "Spring")

 

Daten konvertieren

Float to Bool

Float to Bool wandelt Fließkommazahlen in Boolsche Variablen um, also:

wenn In > 0, dann Out = True
wenn In <= 0, dann Out =False

und:

wenn Out = True, dann In = 10
wenn Out = False, dann In = 0

Lässt sich z.B. gut dafür verwenden, Peaks ab einer bestimmten Schwelle anzuzeigen (z.B. für die Frequenz eines LFOs):


Float to Bool in einer Struktur, in der das LED im Rhythmus des LFOs mitschwingt
float2bool.se1

Int to List2

Konvertiert eine Liste in eine Reihe von Zahlen bzw. eine Zahl in eine Auswahl aus einer Liste. Dabei gibt es zwei Modi für die Auswahl: Index und Value:

Index: es wird nach der Reihenfolge in der Liste ausgewählt (also 0 für den ersten Eintrag der Liste, 1 für den zweiten usw.)

Value: es wird nach dem internen Wert der Liste ausgewählt (also 1 für den ersten Eintrag der Liste, 2 für den zweiten usw. Wenn jedoch z.B. zwischendurch ein Eintrag in der Liste gelöscht wurde (z.B. mit dem internen Wert 4), so kann dieser nicht mehr erreicht werden, sondern nur noch die drum herum liegenden Werte (z.B. 3 und 5)).


Int to List2 in einer Struktur, um z.B. die Wellenform über einen Schieberegler auswählen zu können
int2list.se1

Text to Float

Text to Float verwandelt Text in Fließkommazahlen und umgekehrt Fließkommazahlen in Text


Text to Float innerhalb einer Struktur mit Float Scaler
floatscaler.se1

GUI Input/Output

Bitmap Image

Bitmap Image ermöglicht, statische oder animierte Bilder hinzuzufügen (bmp oder png; bei statischen Bildern einfach in den Properties das Bild hinzuladen).

Bei animierten Bildern: erst die einzelnen Bilder erstellen und untereinander in einem statischen Bild zusammengefasst abspeichern, z.B.:


Bilderfolge von 7 Bildern, untereinander angeordnet als ein Bild abgespeichert

Dann in den gleichen Ordner eine Textdatei mit dem gleichen Namen wie das Bild legen (Endung .txt) und in diese Textdatei Anweisungen für die Animation schreiben. In diesem Fall:

type animated
mouse_response horizontal
frame_size 94, 94
; Dies ist ein Kommentar

Zeile 1: Es handelt sich um ein animiertes Bild

Zeile 2: das Bild reagiert bei gedrückter Maustaste auf eine horizontale Mausbewegung (alternativen: rotary, vert, stepped, click)

Zeile 3: Größe eines einzelnen Frames (Höhe, Breite)

Zeile 4: Kommentar

Zusätzlich ginge auch eine Zeile wie

padding 5, 2, 5, 3

also Platz lassen an den Kanten (top, bottom, left, right)

oder, wenn es sich um eine Hintergrundgrafik handelt:

tiled true

also, ob die Grafik gekachelt wiederholt wird (true) oder nicht (false). Danach kann die Grafik via "Image to Frame"-Modul mit den steuernden Variablen verbunden werden:


Bitmap Image innerhalb einer Struktur, um eine Wellenform auszuwählen
bitmapimage.se1

Joystick Image

Joystick Image bietet die Möglichkeit beliebig aussehende Schieberegler (bei Bewegungen in eine Richtung (Position x oder y)) und Joysticks (bei Bewegungen in zwei Richtungen (Position x und y)) zu erzeugen (mit bmp oder png)


Joystick Image zur Erzeugung eines Theremin-Instruments
joystickimage.se1

Tintet Bitmap Image

Über Tintet Bitmap Image kann man Farbton (Hue), Sättigung (Saturation) und Helligkeit (Brightness) eines Bildes in Abhängigkeit von den daran angeschlossenen Parametern/Modulen verändern; z.B. als im Rhythmus eines LFOs blinkendes Bild:


Tintet Bitmap Image in einer Struktur mit einem LFO
tintetbitmapimage.se1

Dropdown list

Ersatz für List Entry unter Controls. Hier können (wie bei Text Entry2) Textformat, -farbe etc verändert werden unter
C:\Programme\SynthEdit\skins\default\global.txt
unter den Einstellungen

FONT_CATEGORY "Normal"
font-family "MS Sans Serif"
font-size 12
font-color #000000
background-color #ffffff
text-align center

FONT_CATEGORY "Heading 1"
font-family Arial, Verdana
font-size 28
font-color #fff7f7
text-align center
text-decoration underline
;font-style italic
font-weight 900

FONT_CATEGORY "Heading 2"
text-align center
font-family Arial
font-size 18

FONT_CATEGORY "Heading 3"
text-align center
font-family Arial
font-size 14

FONT_CATEGORY "User 1"
font-family Arial, "sans-serif"
font-size 14
font-color #000000
background-color #ffffff
text-align left

FONT_CATEGORY "User 2"
font-family Courier

FONT_CATEGORY "User 3"
font-family Fixedsys


Dropdown List mit veränderbaren Texteigenschaften
dropdownlist.se1

Text Entry2

Textein- und -ausgabefeld. Hier können (wie bei Dropdown List) Textformat, -farbe etc verändert werden unter
C:\Programme\SynthEdit\skins\default\global.txt
unter den Einstellungen

FONT_CATEGORY "Normal"
font-family "MS Sans Serif"
font-size 12
font-color #000000
background-color #ffffff
text-align center

FONT_CATEGORY "Heading 1"
font-family Arial, Verdana
font-size 28
font-color #fff7f7
text-align center
text-decoration underline
;font-style italic
font-weight 900

FONT_CATEGORY "Heading 2"
text-align center
font-family Arial
font-size 18

FONT_CATEGORY "Heading 3"
text-align center
font-family Arial
font-size 14

FONT_CATEGORY "User 1"
font-family Arial, "sans-serif"
font-size 14
font-color #000000
background-color #ffffff
text-align left

FONT_CATEGORY "User 2"
font-family Courier

FONT_CATEGORY "User 3"
font-family Fixedsys


Text Entry2 innerhalb einer Struktur mit Float Scaler
floatscaler.se1

Mit dem Modul DH_TextIO gelingt die Textformatierung um einiges einfacher, z.B.:


DH-TextIO mit verschiedenen Veränderungsmöglichkeiten
DH_TextIO.se1

Datenfluß (routing)

Bool Splitter

Über Bool Splitter kann eine Entscheidung (True/False) auf beliebig viele Kanäle weitergegeben werden


Boolsplitter in einer Struktur, um beliebig viele LEDs anzusteuern
boolsplitter.se1

Von David Haupt gibt es für die anderen Variablen-Arten ebenfalls Splitter:

System Command

Über das "System Command2"-Modul lassen sich verschiedene Windows-Befehle ausführen, wie

  • Edit
  • Explore
  • Find
  • Open
  • Print
  • Properties

Über Open "http//www.beliebige-adresse.at" lassen sich auch beliebige Internet-Adressen mit dem systemeigenen Browser öffnen


Button, mit dem man eine Webseite öffnen kann
systemcommand.se1