Moin,
während einer Schulung in C++ fiel mir ein, dass ich ja auch mal ein VST-PlugIn mit juce geschrieben habe. Da meine dazugehörige ReadMe-Datei allerdings doch eher nichtssagend ist, wollte ich mir hier noch einmal die Zeit nehmen, um die Idee und die mathematischen Modelle dahinter genauer zu erklären. Alles für die Wissenschaft - Spaß, ich will nur Kryptowährungen ;).
Aber eins nach dem anderen. Also zuerst die Oberfläche des Programms:
Abbildung 1: Screenshot vom VST-Programm
Über VST und juce
Bei VST, Virtual Studio Technology, handelt es sich um eine Programmierschnittstelle der Firma Steinberg, die es erlaubt Musikprogramme dynamisch zu erweitern und die 1996 entwickelt wurde[1]. Dadurch können Instrumente und Effekte von unabhängigen Entwicklern geschrieben werden, die dann die Basisumgebung erweitern können.
Diese Schnittstelle ist allerdings sehr rudimentär und die Programmierung damit entsprechend anstrengend. Auch setzt es die Sprache C++ voraus. Der Hintergrund ist, dass C++ eine sehr effiziente Sprache ist, was Laufzeit angeht. Auch dürfte der Zeitpunkt der Entwicklung des Standards eine Rolle spielen.
Allerdings kennt C++ von Haus aus erstmal keine graphischen Benutzeroberflächen (GUI). Und da man sich das Leben nicht immer unnötig kompliziert machen muss, habe ich mich für das Framework juce entschieden, was diese beiden Probleme, VST und GUI, den Umständen entsprechend elegant vereint.
Für Entwickler wie mich, die das aus Spaß an der Freude machen ist dies auch ausreichend, allerdings sollte man sich die entsprechenden Lizenzbedingungen bei einer kommerziellen Nutzung anschauen. Dieses Prinzip kennt man auch von anderen Produkten, wie Qt.
Aber diese Umgebung kommt mit einer Vielzahl an vordefinierten graphischen Objekten, wie Slidern oder Comboboxen daher, die das Arbeiten doch erheblich vereinfachen.
Über eine Transistorkennlinie
Das Bauteil Transistor wird gerne genutzt um Verstärkungen in einer elektrischen Schaltung zu realisieren. Im Studium sprach ein Prof. immer salopp von einer Toilettenspülung. Das interessante ist, dass nichtharmonische (nichtlineare) Verzerrungen dabei stattfinden können, wie beispielsweise in [2] beschrieben. Sind die in dem dort erwähnten Fall unerwünscht, so sind sie bei musikalischen Anwendungen sehr beliebt, da diese ein warmes Gefühl vermitteln können [3].
Diese Verzerrungen lassen sich mittels einer sogenannten Kennlinie sehr gut darstellen.
Abbildung 2: Nichtlineare Verzerrung an einer Kennlinie; Vgl. S. 48 [4]
Das Eingangssignal, aufgetragen auf der Y-Achse, wird um die Kennlinie modifiziert auf die X-Achse geplottet und führt so zu Veränderungen des Signals, die sich nicht mehr mit linearen Systemen beschreiben lassen.
Dies ist deshalb interessant, da nichtlineare Systeme freundlich gesagt unschön mathematisch zu beschreiben sind. Ein möglicher Ansatz über beispielsweise Volterra-Reihen scheinen jedenfalls sehr aufwändig zu sein [5].
Über das PlugIn
Dieser kurze Exkurs führt mich zu meinem oben gezeigten PlugIn. Dieses macht sich das Prinzip des auf die X-Achse-Plottens zu nutze und probiert dies in eine graphische Oberfläche zu gießen. Dabei habe ich verschiedene Ausgangsfunktionen für die Kennlinie hinterlegt, die mittels der Schieberegler unten und links für den ersten und dritten Quadranten des kartesischen Koordinatensystems die Graphen verändern können. Dadurch kann der Nutzer sich seine eigene Kennlinie konstruieren, die live in der DAW gehört werden kann. Je nach gewählter Ausgangsfunktion kann man damit subtile bis völlig kaputte Verzerrungen erreichen.
Die dabei hinterlegten Funktionen sind:
- ArcTan 1
- ArcTan 2
- Strange
- LaGrange
- Gauß
Bei den ersten beiden handelt es sich um Arkustangens-Funktionen, die unterschiedliche Intensitäten annehmen können.
Die Strange-Funktion ist nicht zu beschreiben. Der Name ist Programm. Aber im Quellcode steht irgendwas von der e-Funktion.
Bei LaGrange handelt es sich um eine LaGrange-Interpolation durch den Koordinatenursprung, den Maximal- bzw. Minimalwerten der Graphen und durch den Nutzer steuerbare Slider. Diese ermöglicht besonders subtile Änderungen.
Die Gauß-Funktion bildet eine Gauß-Glocke deren Scheitelpunkt durch den Nutzer gesteuert werden kann.
Naja, falls ihr Bock habt, schaut mal bei dem github-Repo vorbei.
Bei Fragen, Kommentare und Kritik wisst ihr wo ihr mich finden könnt. Ansonsten noch n schönen Abend,
KonstIce
Quellen:
[1] steinberg.net
[2] Chapter 4 - CMOS power amplifier design for cellular applications
[3] soundonsound.com
[4] Handbuch der Tonstudiotechnik, Version 7
[5] Identifikation von nichtlinearen
mechatronischen Systemen
auf der Basis von
Volterra–Reihen