Turing's Slow Progress: Auf dem Weg zum eigenen Softsynth

T
Turing
Thou shalt not loop
Wie ja verschiedentlich schon erwähnt, schreibe ich an einem eigenen Softsynth.
Realisiert wird das Plugin in C++ mit JUCE, so dass es für Windows, Mac und Linux verfügbar sein wird.
Der Thread steht im Bereich "Nerdiges", weil ich das "Softsynth"-Unterforum nicht mit Posts zu einem unfertigen Plugin zumüllen möchte, das es möglicherweise nie von meinem PC in die Welt hinaus schafft.
"Slow Progress", weil das Plugin selbst im positiven Fall noch eine ziemlich lange Zeit für seine Fertigstellung brauchen wird.
Grundsätzlich funktionsfähig ist der PoC allerdings schon. Die ersten Töne waren im Film Score Battle zu hören (3 Spuren, Hall aus Eventide Blackhole):



Und inzwischen ist das Plugin natürlich weiter gediehen und wird beständig erweitert und verbessert.
Was das eigentlich Besondere an diesem Softsynth werden soll, verrate ich an dieser Stelle noch nicht, weil es auch noch nicht umgesetzt ist.
Hier aber ein paar Infos, die eine Vorstellung von den zu erwartenden Merkmalen des Plugins geben:

MODERN

Ziel ist ein moderner Synth, der Funktionalitäten umsetzt, die nur mit digitaler Signalverarbeitung möglich sind.
Die bereits realisierten Oszillatoren nähern sich dem mathematischen Ideal, sie schneiden an der Nyquist-Frequenz scharf ab, sind phasentreu, weitgehend aliasing-frei und zudem effizient implementierbar. Genutzt werden sie als ein erstklassiger Wavetable-Player.
Zur Klangformung dienen spektrale Transformationen, wie man sie z.B. aus Vital kennt. Bereits jetzt gibt es 5 Regler, mit denen das Spektrum eines Oszillators geformt werden kann. Weitere Spectral-Warp-Arten werden im Laufe dieses Jahres hinzukommen.
Daneben gibt es eine Unison-Engine, die aktuell durch 7 Regler gesteuert wird und ein bis zu 8000-faches Unisono pro Oszillator erzeugen kann.
Die Oszillatoren sollen später durch Operatoren flexibel verknüpft werden können.
Das stelle ich mir grob wie beim opsix vor, der ja neben FM z.B. auch die Anwendung von Ringmodulation, eines Filters oder eines Effekts als Operator darstellt. Ich denke, ein solcher Operator-basierter Ansatz ist potenziell leichter zu nutzen als ein Aufbau wie ein Modular-System mit komplett freier Verdrahtung.
Im Moment gibt es aber nur einen Oszillator pro Stimme und noch keine Operator-Matrix.

EIN ECHTES MPE-INSTRUMENT

Der Softsynth ist als ein "echtes", live und per MPE spielbares Instrument ausgelegt. Der Synth soll "musikalisch" auf Änderungen der MPE-Dimensionen wie MPE-Timbre ansprechen und sich dadurch wie ein reales Instrument anfühlen.
Da es noch kein Modulationssystem gibt, ist die direkte Formung jeder Note mit den Fingern über einen MPE-Controller auch bisher die einzige Möglichkeit, die Töne zu beleben.
Im Moment reagiert jede Stimme auf die Anschlagstärke und auf Bewegungen in X-Richtung (Bend/Vibrato). Durch die Y-Dimension (Slide CC74) wird die Wavetable-Position gesteuert. Die Z-Dimension für Per-Note Aftertouch wird im Moment nicht genutzt, weil mich die gleichzeitige Kontrolle von Vibrato/seitlicher Bewegung und Anpressdruck motorisch überfordert.
Andere Modulationen sind derzeit nicht möglich.
Natürlich werden diese Dinge später frei konfigurierbar sein und ein Modulationssystem einschließlich Envelope Gates, LFOs usw. ist in Planung.

Da ich MPE bei "Extinction" noch nicht zum Laufen gekriegt hatte und es daher noch ein paar störende Artefakte des Controllers enthält, hier eine neue spontane Demo, wie das Plugin mit MPE-Nutzung klingen kann (1 Spur mit Joué Scaler, Absolute Y Control, Hall aus 7th Heaven Professional):

Anhang anzeigen MPE-Demo-2023-07-25.mp3

Im Sinne der Live-Spielbarkeit würde ich gerne mehr Zeit in Play Modes und diverse Spielhilfen stecken, leider fehlen mir dazu einfach die Ressourcen. So gibt es aktuell nur zwei Play Modes: den normalen polyphonen Mode und einen dem Trident Mode 2 nachempfundenen Hybrid-Mode.

EIN SOFT-SYNTH ZUM "SCHRAUBEN"

Der Synth soll sich zum spontanen Erstellen von Patches eignen und zum "Schrauben" an den Knöpfen einladen.
Hierzu soll es für alle wichtigen Einstellmöglichkeiten ein GUI-Element geben, jedoch auch insgesamt eine Beschränkung der Freiheitsgrade. Jedes GUI-Element muss eine klare Aufgabe und hörbaren Effekt haben und es soll nicht zu viele Wege geben, dasselbe Ziel zu erreichen. Es soll also nicht ein eklektischer "Alleskönner" entstehen, solche Plugins empfinde ich persönlich als Kreativitäts-Killer.

KEINE BELIEBIGKEIT

Als Entwickler möchte ich natürlich, dass die besonderen Merkmale dieses Softsynths zur Geltung kommen und intensiv genutzt werden - und nicht Standard-Features, für die man dieses Plugin gar nicht bräuchte.
Deshalb gibt es kein subtraktives Filter, obwohl es ein leichtes wäre, ein Ladder-Filter oder State-Variable-Filter einzubauen. Es gibt nur die vorgegebenen (aktuell 5) synthetischen Factory-Wavetables und es ist nicht möglich, eigene Wavetables oder Samples zu laden und Wellenformen oder Spektren zu zeichnen. Auch gibt es vorerst keine Builtin-Effekte.
Ich hadere aber noch mit dieser puristischen Haltung, denn bei FM-Synths z.B. freue ich mich ja auch über ein subtraktives Filter, selbst wenn es technisch eigentlich unnötig ist.

KEIN PRODUKT

Mein Anspruch ist es nicht, ein fertiges kommerzielles Produkt zu entwickeln.
Zwar bemühe ich mich immer um rechnerische Effizienz, aber dies wird kein Rundum-Sorglos-Plugin, das einen die Grenzen der Hardware nicht spüren lässt. Es zielt kompromisslos auf die bestmögliche Audio-Qualität, selbst wenn potenzielle Nutzer mit älteren oder schwächeren Rechnern dadurch über die Kante fallen. Zudem enthält es experimentelle Features, die jede CPU an die Wand fahren können, und mit denen man erst etwas Erfahrung sammeln muss.
Mehr als eine primitive, funktionale GUI ist nicht zu erwarten, ich konzentriere mich lieber auf die "inneren Werte".
Das Thema Preset-Verwaltung wird aktuell der DAW überlassen.
Und es gibt vorerst keinerlei Visualisierung - für die Hörer eines Tracks entscheidet ja auch nur das klangliche Ergebnis.
Das schränkt den Benutzerkreis vermutlich auf einige wenige Enthusiasten ein, die bereit sind, sich auf diese Dinge einzulassen.
So lange ich das ganze in der Freizeit oder evtl. im Rahmen einer Nebentätigkeit entwickle, kann ich auch keinen Produkt-Support leisten.
Deshalb plane ich, das Plugin - sobald es einen entsprechenden Entwicklungsstand erreicht hat - als Donationware herauszubringen. So können es alle Interessierten frei nutzen und ggf. durch eine Spende die weitere Entwicklung unterstützen.

WIE ES WEITER GEHT

Bis zum Ende des Jahres werde ich den bestehenden Ansatz weiter ausbauen (z.B. Erweiterung auf Stereo-Unisono), die geplanten spektralen Transformationen umsetzen und Performance-Optimierungen vornehmen.
In 2024 möchte ich das Modulationssystem ergänzen und es ermöglichen, Oszillatoren in Form verschiedener Operatoren zu verknüpfen.
Wenn dies alles gut klappt, könnte im Anschluss eine erste Version an ausgesuchte Pilotbenutzer herausgehen.
Bis dahin werde ich Euch hier über den Stand der Entwicklung auf dem Laufenden halten und immer mal kleine Audio-Demos zu neuen Features einstellen. Auch freue ich mich über allgemeine Rückmeldungen und habe auch vor, gelegentlich Feedback von Euch einzuholen.
 
Zuletzt bearbeitet:
Am Wochenende habe ich noch das normale "brute force" Unisono ergänzt, bei dem jede Unisono-Stimme einzeln gerendert wird.
(Vorher gab es nur Multi-Unisono-Varianten, die nicht "naiv" implementiert sind und deren Rechenzeitbedarf nicht von der Stimmenzahl abhängt).
Aber es ist gut, auch die einfache Implementierung als Baseline zu haben.
Hier ein phasiges Beispiel mit dem 7-fachen brute force Unisono, Hall 7th Heaven Professional:

Anhang anzeigen 2023-08-06-BruteForce-Mode-Test.mp3
 
Hier ein kleines Update:
Seit dem letzten Beitrag war ich nicht untätig, sondern habe eine Idee verfolgt, wie man eines der Multi-Unisono-Verfahren verallgemeinern und dadurch mit zusätzlichen Klangformungs-Möglichkeiten ausstatten könnte. Das ganze war kompliziert und ich habe eine Menge Lehrgeld bezahlt, so dass die Fertigstellung mehr als einen Monat gebraucht hat.
Wie dem auch sei, hier eine kleine Demo:

Anhang anzeigen 2023-09-12-Gloria.mp3

(wie üblich ein improvisierter 1-Take, eine Spur, nur das Plugin und dazu Hall aus Seventh Heaven Professional).
Genutzt wird dieselbe Wavetable wie bei der vorigen Demo, nur durch die neuen Gestaltungsmöglichkeiten etwas anders in Szene gesetzt.

Weitere Planung: Aller Voraussicht nach werde ich mich bis Ende des Jahres ausschließlich auf Multi-Unisono konzentrieren.
Das zentrale Thema ist die Schaffung organischer und in sich texturierter Klänge.
Inzwischen hatte ich noch zwei neue Ideen für Crossover-Varianten aus bestehenden Ansätzen, dazu kommen die vorher bereits geplanten Features wie z.B. Stereo-Unisono.
Der nächste Themen-Schwerpunkt (Spectral Warp) verschiebt sich daher ins kommende Jahr.
 
Zuletzt bearbeitet:
Danke, freut mich!

Die Demo vom August hatte nur gezeigt, was sowieso praktisch jedes Plugin kann - 7 einzeln generierte Unisono-Stimmen, die dann summiert werden. Von daher war hier nichts aufregendes zu erwarten. Ich brauche diese Baseline-Methode zum Vergleich mit den Multi-Unisono-Ansätzen, die bei der Unisono-Umsetzung anders (mit der DSP-Trickkiste) vorgehen. Da möchte ich dann für geringe Zahlen von Unisono-Stimmen einen A/B-Vergleich mit der Baseline durchführen können. D.h. das komplexe Verfahren soll für niedrige Stimmenzahlen das gleiche oder ein ähnliches Ergebnis bringen können, wie man es bei der direkten Generierung und Summierung jeder einzelnen Unisono-Stimme erhalten würde.

In der Demo von gestern dagegen kam wieder ein Patch mit 8.000 Unisono-Stimmen zum Einsatz. Da ergibt sich ein deutlich komplexeres Klangbild.
 
Mal wieder ein Lebenszeichen.
Nach dem letzten Beitrag hatte ich zuerst die Konzeption für das angekündigte Hybrid-Verfahren zur Multi-Unisono-Erzeugung erstellt.
Als es dann an die Umsetzung ging, stand eine Menge Refactoring an - eine Tätigkeit, bei der eine IDE sehr viel und gut unterstützen kann - oder eben nicht.
Ich mochte Visual Studio noch nie, aber diesmal hat es mich so dermaßen genervt, dass ich beschlossen habe, mir das nicht länger zuzumuten.
Also habe ich einen Schlussstrich gezogen und bin zu CLion gewechselt, einer vernünftigen IDE, mit der das Entwickeln wieder Spaß macht.
Für Visual Studio hatte eigentlich nur gesprochen, dass es (in der Community Edition) für Privatanwender kostenlos ist und außerdem, dass es vom Projucer, dem Projektkonfigurations- und -generierungstool von JUCE, nativ unterstützt wird. D.h. man kann sich aus dem Projucer per Mausklick eine fertige Projektkonfiguration für Visual Studio erzeugen lassen, und das Projekt lässt sich dann über die erzeugte .sln-Datei in Visual Studio direkt laden und bauen. Das senkt die Einstiegshürde doch enorm.
Diesen Komfort gibt es nun für CLion nicht mehr. Der Projucer enthält keinen Exporter für CLion, und man muss stattdessen über die CMake-API von JUCE gehen.
CMake ist ein komplexes Thema und den Umgang damit hatte ich bisher immer gescheut. Nun aber führte kein Weg mehr daran vorbei.
Während die Anpassung von CLion nach meinen Vorstellungen nur einen Tag gebraucht hatte, dauerte der komplette Wechsel wegen der benötigten CMake-Konfiguration jetzt fast eine Woche.
Mit Hilfe eines Plugin-Beispiels zur CMake-Nutzung, das als Bestandteil von JUCE mit ausgeliefert wird, und auch mit dem Pamplemuse-Template auf github als Vorbild, hat der Umstieg aber letztlich geklappt.
Es war lästig, doch mit dem Wechsel zu CLion und CMake ist mein Projekt für die Zukunft viel besser aufgestellt.
Zum einen ist CLion eben m.E. eine um Klassen bessere IDE, mit der es sich angenehmer entwickeln lässt. Außerdem ist CLion für alle 3 Zielplattformen (Windows, Linux, Mac) verfügbar und eine einzelne persönliche Lizenz genügt, um die IDE auf den 3 Plattformen zu betreiben. So kann ich (sobald das relevant wird) auf allen drei Plattformen dieselbe IDE benutzen, um zu entwickeln oder zu debuggen.
Durch CMake habe ich jetzt alle Freiheiten, um Unit-Tests oder Benchmarks über gesonderte Targets zu behandeln und diese später auch für Continuous Integration zu nutzen.
Vor allem kann ich über CMake jetzt leichter externe Libraries einbinden.
Es ärgert mich schon lange, dass JUCE von Haus aus nur eine Single-Precision FFT mitbringt. Das Plugin könnte aber bei diversen Vorverarbeitungsschritten von einer FFT in höherer Genauigkeit profitieren.
Mit CMake sollte ich jetzt pffft, von dem es einen Double-Precision-Fork gibt, recht leicht einbinden können, weil auch pffft selbst bereits über CMake gebaut wird.
Es gibt also Fortschritte... wenn auch keine direkt hörbaren... und neue Möglichkeiten.
Mehr dann in ca. 2 Wochen, bis dahin sollte ich dann mit der eigentlich geplanten Implementierung weiter sein und wieder eine Demo erstellen können.
 
Zuletzt bearbeitet:
Dank guter IDE, guter Vorbereitung und dem Feiertag heute ist es mit dem geplanten nächsten Multi-Unisono-Verfahren doch schneller gegangen und ich habe es heute in einer Rohfassung umsetzen können.

Es ist ein Abkömmling des Verfahrens aus der letzten Demo und kann auch sehr ähnlich klingen:

Anhang anzeigen 2023-10-03-Gloria-Var2-0.91.mp3

(identische MIDI/MPE-Daten wie beim letzten Mal. Ich habe versucht, den Sound aus der letzten Demo zu reproduzieren und dieses leicht Mandolinenorchester-artige noch ein wenig mehr zu betonen).

Und hier noch eine "glattere" Variante ganz ohne die Mandolinen-/Tremolo-Textur:

Anhang anzeigen 2023-10-04-Gloria-Var3.mp3

Mit dem neuen Verfahren wird es jetzt möglich, noch ein paar weitere Parameter zur Beeinflussung des Klangcharakters und der Textur umzusetzen, was ich für die nächsten Tage auf dem Plan habe.
Meine Hoffnung war, dass es natürlicher und unauffälliger klingen würde als das vorherige Verfahren. Dafür ist aber noch einiges an Feinschliff erforderlich, bzw. ich muss auch an die Konzeption noch mal ran.
 
Zuletzt bearbeitet:
In den letzten Wochen habe ich mich weiter mit dem neuen Multi-Unisono- und Textur-Generierungs-Verfahren beschäftigt.
Es hatte mich erst einmal etwas enttäuscht, weil es zwar eine starke Erweiterung der Möglichkeiten gebracht hatte, darunter aber irgendwie fast keine Sweet-Spots. Deshalb bin ich dann noch einmal in mich gegangen und habe überlegt, wie ich zum einen noch weitere Möglichkeiten erschließen könnte, vor allem aber, woran es liegt, dass viele der neuen Sounds nicht gut geklungen haben und welche Gegenmaßnahmen man ergreifen könnte, um diese Probleme zu fixen.
Auf diese Weise sind jetzt 16 neue Parameter zur Klanggestaltung dazugekommen, 11 habe ich fertig umgesetzt, 3 sind aktiv, aber noch nicht über die GUI steuerbar, 2 sind in in Arbeit. Ich schätze, dass ich diese Arbeiten in der kommenden Woche abschließen kann, dann gibt es auch eine neue Demo.
Bisher ist eine Besonderheit dieses Softsynths somit, dass er ein komplexes Modell (mit aktuell 30 Parametern) besitzt, mit dem die statischen Wellenformen der Wavetables „animiert“ werden können. Dabei ist eine genaue Kontrolle über die Belebung im zeitlichen Bereich und in Bezug auf die Obertöne möglich.

An einem anderen Punkt war ich auch tätig: Bisher habe ich alle Demos mit dem Joué eingespielt, die meisten davon mit dem „Scaler“-Overlay, das in etwa wie ein Glockenspiel aussieht (unten im Foto der Scaler für den Joué Pro, oben das entsprechende Keys-Modul für den Joué Play):

Joue-Scaler.jpg

Das Scaler-Pad bietet einen absolute Y-Modus, bei dem das initiale Timbre (MPE Timbre bzw. "Slide" CC74) durch die Y-Position bestimmt wird, an der man die Taste trifft. Für mich ist der absolute Modus die bei weitem beste Methode, einen MPE-Klangerzeuger zu steuern.
Die anderen Joué-Overlays (wie das Grand Clavier/Piano-Modul) bieten diese Möglichkeit nicht und erlauben nur eine relative Y-Steuerung von einem festen Startwert für das Timbre aus.

Der Haken an der Sache: Der Scaler hat keine „schwarzen Tasten“ und ich habe ihn diatonisch (in C Dur) gestimmt. Auf Dauer wird es aber etwas langweilig, immer nur in C Dur oder in den entsprechenden Kirchentonarten (D Dorisch usw.) spielen zu können.
Zwar kann man den Scaler im Joué Editor umkonfigurieren, aber das ist umständlich. Ich wollte ad hoc in beliebigen anderen Skalen spielen können. Daher gibt es nun auch direkt im Synth-Plugin eine Möglichkeit, von einem diatonischen Controller aus andere Skalen anzusprechen. 175 Skalen sind auswählbar, da sollte nicht so schnell Langeweile aufkommen. Zudem sind die Skalen jetzt frei transponierbar.
 
Zuletzt bearbeitet:
Wegen eines beruflichen Erfolgs (dicken Auftrag an Land gezogen) muss ich das Softsynth-Thema ruhen lassen.
Wäre nicht sehr nachhaltig, sich in der knappen Freizeit auch wieder mit Software-Design und -Entwicklung zu beschäftigen.
Daher stelle ich das Softsynth-Projekt erst einmal ein, mit etwas Glück geht es in einem halben Jahr weiter.
Stattdessen werde ich mich (was ein besserer Ausgleich ist) eher in dem Skalen-Thread betätigen.
Die oben beschriebene Funktionalität (Multi-Unisono-Hybridverfahren) habe ich fertiggestellt, die versprochenen Demos kommen noch, sobald ich etwas Zeit finde.
 
Interessant, ich hab dass garnicht mitbekommen, hättest du dass mal im Softsynth Bereich geposted.

Eigene low-budget Softsynths haben es meiner Beobachtung nach, immer etwas schwer. Hast du mal überlegt, dass als VCV Rack Modul anzubieten?
 
Bisher nicht, es entspricht aber auch nicht meinem Konzept.
Die noch fehlenden logischen Einheiten können nicht einfach durch bestehende Module aus Modular-Synths ersetzt werden.
Ich habe bisher den Fehler gemacht, mich an einem Thema (Multi-Unisono-Erzeugung) festzubeißen und da immer mehr in die Tiefe zu gehen.
Eine spiralförmige Entwicklung wäre aber sinnvoller.
D.h. bzgl. Unisono-Modellierung erst einmal gar nichts mehr zu machen und stattdessen beim Spectral Warp, den geplanten Operatoren und dem Modulationssystem ein paar Pflöcke einzuschlagen.
 
Zuletzt bearbeitet:
Bisher nicht, es entspricht aber auch nicht meinem Konzept.
Die noch fehlenden logischen Einheiten können nicht einfach durch bestehende Module aus Modular-Synths ersetzt werden.
Ich habe bisher den Fehler gemacht, mich an einem Thema (Multi-Unisono-Erzeugung) festzubeißen und da immer mehr in die Tiefe zu gehen.
Eine spiralförmige Entwicklung wäre aber sinnvoller.
D.h. bzgl. Unisono-Modellierung erst einmal gar nichts mehr zu machen und stattdessen beim Spectral Warp, den geplanten Operatoren und dem Modulationssystem ein paar Pflöcke einzuschlagen.
Was ich meine, du könntest dass als komplette Stimme/Voice anbieten. Du hättest eine riesige Reichweite und müsstest dich nicht um das drumherum kümmern....

 
Ah verstehe. Im Moment denke ich ja noch gar nicht über eine Vermarktung nach. Das Ganze ist ein PoC für verschiedene Ideen, die ich ausprobieren möchte und die z.T. aufeinander aufbauen.
Wenn erst mal klar ist, was tatsächlich funktioniert und wenn ich eine Beispiel-Implementierung dazu habe, könnte ich Teile später auch auf ein anderes Gesamtkonzept übertragen.
 
Ich habe bisher den Fehler gemacht, mich an einem Thema (Multi-Unisono-Erzeugung) festzubeißen und da immer mehr in die Tiefe zu gehen.
Eine spiralförmige Entwicklung wäre aber sinnvoller.
D.h. bzgl. Unisono-Modellierung erst einmal gar nichts mehr zu machen und stattdessen beim Spectral Warp, den geplanten Operatoren und dem Modulationssystem ein paar Pflöcke einzuschlagen.
Ach, ich weiß nicht. Mir gehts schon auch so, dass ich mich erst in einen Aspekt vergrabe, und erst danach in die Breite schaue. Hat schon Vorteile.

Ich bin jedenfalls völliger Fan Deines Projektes und freu mich drauf wenn es wieder weitergeht. Und natürlich herzlichen Glückwunsch zum gewonnenen Projekt
 

Similar threads

Solar Chrome
Antworten
0
Aufrufe
1K
Solar Chrome
Solar Chrome
Solar Chrome
Antworten
16
Aufrufe
2K
Sulitjelma
Sulitjelma
Moogulator
Antworten
1
Aufrufe
4K
Moogulator
Moogulator


Neueste Beiträge

News

Zurück
Oben