Eine Frage ist ja, wie oder worüber man sich überhaupt sinnvoll austauschen kann.
Ich hatte ja mal an einem Softsynth gearbeitet:
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...
Der basierte auf spektraler Synthese einschließlich Spectrum Squash/Stretch und bot verschiedene Verfahren zur Erzeugung von Unisono-Effekten/Texturen.
Dafür war zwar die MPE-Implementierung von JUCE die Basis, aber ich habe eine Menge eigenen Code implementiert wie z.B. spektrale Oszillatoren, diverse Verfahren zur Textur-Generierung, dazu Basis-Funktionalität wie kubische Spline-Interpolation, einen counter-basierten Pseudozufallszahlen-Generator uvm.
Wegen der mir eigenen Sprunghaftigkeit ruht das Ganze allerdings im Moment.
Frustriert hatten mich bei der Entwicklung letztlich die folgenden Punkte:
- Ich wollte als Erweiterung der bestehenden Funktionalität auch noch spektrale Transformationen in Realtime einbauen, diese waren dann aber so rechenaufwendig, dass am Ende nur noch eine Stimme gleichzeitig gerendert werden konnte - also leider nicht praktisch einsetzbar.
- Es sollte zur Ergänzung noch ein normales subtraktives Filter dazu, wofür ich das Ladder-Filter von JUCE genommen habe. Mit dieser Entscheidung war ich dann aber unglücklich, weil mich die Qualität des Filters nicht überzeugt hat.
- Ich wollte bei der FFT auf double precision gehen, habe es aber bisher nicht geschafft.
Dazu wollte ich den double precision PFFFT-Fork nehmen, habe ihn aber mit der LLVM/MSVC Toolchain nicht compilieren können.
Mir fehlte dann leider die Kraft für den Versuch, komplett auf die MingGW-Toolchain zu gehen (also mit PFFFT, JUCE und meinem eigenen Projekt) und auch für CMake alles entsprechend anzupassen, oder aber den PFFFT-Fork mit LLVM/MSVC compilierbar zu machen.
- Ich hatte es versäumt, frühzeitig ein Modulationssystem einzubauen, und nachdem ich dann schon zig Parameter hatte, wurde es schwierig, das nachträglich noch hinzuzufügen.
- Trotz der in JUCE schon vorhandenen Widgets ist es mir nicht gelungen, eine vernünftige GUI aufzubauen.
Falls ich noch einmal in dem Vorhaben einsteige, würde ich von null anfangen und alles aus dem alten Projekt schrittweise übernehmen.
Zuerst müsste ich aber das Problem mit dem Umstieg auf double precision FFT lösen (davon verspreche ich mir viel, weil sehr viel durch FFT vorberechnet und bzw. aus den FFT-Koeffizienten abgeleitet und neu synthetisiert wird, und weil durch Oversampling die benötigten FFT-Frames noch einmal größer werden).
Diesmal würde ich auch von Anfang an das Modulationssystem anlegen und diesen Punkt nicht aufschieben.
Außerdem würde ich das JUCE Ladder Filter durch ein selbst implementiertes Zero-Delay Feedback-Filter ersetzen, müsste mich dafür aber erst in die Materie einlesen.
Bedenkenswert wäre auch, sich von der Idee zu lösen, ein komplettes Plugin zu realisieren, und stattdessen nur einen Oszillator für VCV Rack zu schaffen, wie schon mal jemand angeregt hatte, das würde die Aufgabe deutlich vereinfachen. Allerdings hat allein die Kombi aus Oszillator und Texturgenerator bereits zig Parameter, das lässt sich in einem herkömmlichen Modul kaum unterbringen.
Sollte jemand hier ähnliche Interessen haben oder mit ähnlichen Problemen kämpfen, dann wäre ich an einem Austausch sehr interessiert.
Das betrifft vor allem die Nutzung des PFFFT Double-Precision-Forks mit LLVM/MSVC und evtl. auch die anderen genannten Themen.