Bitte geben Sie einen Grund für die Verwarnung an
Der Grund erscheint unter dem Beitrag.Bei einer weiteren Verwarnung wird das Mitglied automatisch gesperrt.
Experimenteller GO-Fork – neues Crossfade-System zum Ausprobieren
#1
Hallo zusammen,
ich arbeite seit einiger Zeit an einem experimentellen GrandOrgue-Fork und möchte ihn hier kurz vorstellen – vor allem weil ich Tester suche, die mir ehrliches Feedback geben können.
Klar vorab: Das ist kein Konkurrenzprojekt zu GrandOrgue. Mein Ziel ist es, neue Features auszuprobieren und zu validieren, bevor ich sie als Pull Requests beim Upstream einreiche. Wer den Fork installiert, bekommt also im Grunde GrandOrgue – nur mit ein paar Extras zum Testen.
**Was ist anders?**
Das Herzstück ist ein neues Crossfade-System beim Übergang zwischen Attack- und Release-Samples. Statt der fest eingebauten Kosinuskurve kann man jetzt zwischen fünf verschiedenen Kurvenformen wählen:
- **Linear** – schlicht und direkt
- **Sin / Equal-Power** – klassisch, für die meisten Stimmen gut
- **Sin²** – weicher Einstieg, schnellerer Ausklang
- **Sqrt / Equal-Power** – das Gegenteil: schneller rein, weich raus
- **X²** – für besonders lange, weiche Übergänge
Die Umschaltung passiert live per Tastenkürzel (F7–F12) während die Orgel spielt. Wichtig: Der Fokus muss dabei auf dem GrandOrgue-Hauptfenster liegen, sonst reagieren die Tasten nicht. Einfach einmal ins Hauptfenster klicken, dann funktioniert es. So kann man direkt beim Spielen zwischen den Kurven hin- und herwechseln.
Daneben gibt es noch ein paar weitere Verbesserungen: eine Warnanzeige wenn das RAM-Limit zu knapp gesetzt ist, ein flüssigeres Ladefortschritts-Reporting, und überarbeitetes Polyphonie-Dropping das sanfter reagiert.
**Download**
Einen Windows-Build gibt es hier zum Ausprobieren:
https://github.com/sebion7125/grandorgue....17.2-XFadeDemo
**Was ich suche**
Ich würde gerne wissen: Hört man den Unterschied zwischen den Kurven überhaupt? Bei welchen Stimmen fällt er am meisten auf – Streicher, Flöten, Zungen? Klingt eine Kurve besser als die andere, oder ist es Geschmackssache?
Freue mich über jede Rückmeldung!
Hallo, ein herzliches Willkommen im Forum!
die letzten Punkte leuchten mir auf Anhieb ein, wenn die aktuelle Implementierung nicht so optimal ist.
Wie kommst du zu dem Schluss, dass es bei den Cross-Fades Verbesserungsbedarf gibt? Hast du Audio-Beispiele, bei denen es sich nicht gut anhört?
VG
montre
#3
Hallo montre, danke für die freundliche Aufnahme!
Mein Ausgangspunkt war teilweise theoretisch: GrandOrgue nutzt bereits für die Loop-Fades keine lineare Kurve — das zeigt dass die Entwickler wissen dass Linear nicht immer optimal ist. Beim Attack-Release-Crossfade ist es aber noch fest verdrahtet.
Konkreter Anlass war die Chamade der Hauptorgel der Laurenskerk Rotterdam — bei Zungenstimmen mit ihrem charakteristischen Attack hatte ich das Gefühl dass der Übergang zum Release-Sample nicht ganz sauber ist. Ich konnte das in eigenen Experimenten für mich plausibel machen, aber mir ist auch bewusst dass Psychoakustik kein einfaches Feld ist — was ich höre könnte auch durch andere Faktoren bedingt sein.
Deshalb bin ich den Weg gegangen: Feature implementieren, Tester suchen, und dann schauen ob andere dasselbe wahrnehmen.
Um die Unterschiede zwischen den Kurven hörbar zu machen ohne GrandOrgue installieren zu müssen, habe ich außerdem ein kleines Python-Tool entwickelt mit dem man verschiedene Kurvenformen mit einstellbaren Attack-Zeiten direkt vergleichen kann:
https://github.com/sebion7125/Crossfade-Simulator
Vielleicht hilft das beim Nachvollziehen der Idee!
VG
Lass den Code mal durch CHATGPT bewerten. Da kommen interessante Infos raus.
Ich will mich da fachlich nicht zu sehr aus dem Fenster lehnen. Hier nur einige KI-Infos zu GO und deiner guten Implementierung ("... ist akustisch sauber und professionell implementiert").
GrandOrgue verwendet bereits seit langer Zeit Release-Crossfades, um Sustain- und Release-Samples miteinander zu verbinden. Dabei spielte die Phasenlage eine große Rolle. Nick Appleton beschrieb schon 2014, dass schlecht ausgerichtete Releases zu Klicks, Auslöschungen oder „Pluck“-Artefakten führen können. Außerdem erwähnt er, dass GrandOrgue damals eine relativ einfache Lookup-Methode zur Release-Ausrichtung verwendete.
In neueren GrandOrgue-Versionen existieren ODF-Parameter wie „ReleaseCrossfadeLength“, was zeigt, dass Release-Crossfades ein fester Bestandteil der Engine sind.
Der von dir verlinkte Crossfade-Simulator scheint laut dem zugehörigen Reddit-Beitrag verschiedene Kurvenformen zu vergleichen: Linear, Equal-Power (Sinus), Sin², Sqrt und quadratische Verläufe. Das sind klassische DSP-Crossfade-Kurven, wie sie auch in professioneller Audiotechnik verwendet werden.
Was diese Algorithmen nicht leisten:
Sie modellieren nicht die tatsächliche Luftsäulenphysik einer Pfeife.
Sie simulieren keine Winddruckänderungen beim Loslassen.
Sie rekonstruieren keine reale Phasenentwicklung der Pfeife.
Sie lösen vielmehr das praktische Problem:
„Wie verbinde ich ein aufgenommenes Sustain-Sample mit einem aufgenommenen Release-Sample möglichst artefaktfrei?“
Genau dafür sind Equal-Power-, Sinus- und ähnliche Crossfades Stand der Technik.
Interessant ist allerdings, dass Appleton ausdrücklich darauf hinweist, dass die Phasenausrichtung wichtiger sein kann als die konkrete Kurvenform. Ein perfekter Equal-Power-Crossfade klingt schlecht, wenn Sustain und Release um eine halbe Periode gegeneinander verschoben sind.
DSP-Literatur und Audiotools verwenden typischerweise Sinus-, Cosinus-, Equal-Power-, Logarithmus- oder S-Kurven-Fades. Diese gelten als psychoakustisch sinnvoller als lineare Fades. Außerdem werden oft Nulldurchgänge gesucht, um Klicks zu vermeiden.
Für Pfeifenorgeln kommt noch etwas hinzu:
Der Release-Sample muss nicht nur lautstärkemäßig überblendet werden, sondern möglichst dieselbe Schwingungsphase wie das laufende Sustain besitzen. Genau dieses Problem hat Nick Appleton für GrandOrgue beschrieben. Dort zeigte sich, dass die Release-Positionierung oft wichtiger ist als die eigentliche Crossfade-Kurve. Ein perfekter Equal-Power-Fade klingt unnatürlich, wenn die Wellenzüge gegeneinander verschoben sind. (Appleton Audio, Release Alignment Artikel).
Das ist ein sauberer DSP-Crossfade-Simulator, aber kein phasenoptimierter Orgel-Release-Algorithmus.
Die implementierten Kurven
Linear
Energetisch nicht konstant.
Bei korrelierten Signalen oft ok.
Bei unkorrelierten Signalen entsteht in der Mitte ein Lautstärkeloch.
Equal Power Sinus
Das ist die klassische Profi-Lösung.
Die Leistung bleibt konstant.
Für Release-Crossfades meist die beste Wahl.
Sin²
Etwas weicher.
Verbringt mehr Zeit nahe 0 bzw. 1.
Kann bei längeren Fades natürlicher wirken.
√x
Ebenfalls Equal-Power.
Mathematisch genauso legitim wie Sin/Cos.
x²
Nicht Equal-Power.
Macht einen starken Pegelabfall in der Mitte.
Für Releases meist weniger überzeugend.
Was für Orgeln fehlt
Der kritische Teil:
fade_b = release[:fade_samples]
Hier wird immer der Anfang des Release-Samples genommen.
Es gibt keinerlei Analyse von
Phase
Wellenform
Nulldurchgängen
Periodenlänge
Beispiel
Angenommen Sustain endet mit
+0.9
und Release beginnt mit
-0.9
Dann entsteht trotz Equal-Power-Crossfade:
+0.9 -> 0 -> -0.9
Eine künstliche Auslöschung.
Genau dieses Problem beschrieb Appleton damals bei GrandOrgue.
Was Hauptwerk-artige Systeme zusätzlich machen. Typischerweise:
1. Grundfrequenz bestimmen
2. Release gegen Sustain verschieben
3. Kreuzkorrelation berechnen
4. Bestes Korrelationsmaximum suchen
5. Erst dann crossfaden
Interessant: die Haltezeit-Parabel
Dieser Teil ist ungewöhnlich:
scaling = 1.0 + a * (t_max - hold_time)**2
mit
a = -0.01 * a_percent / t_max**2
Das bedeutet:
kurze Tastendrücke → Release leiser
längere Tastendrücke → Release lauter
Das ist tatsächlich näher an einer echten Pfeife als ein statischer Release-Pegel.
Eine reale Pfeife entwickelt ihren stationären Zustand erst nach einigen hundert Millisekunden.
Der Ansatz ist zwar empirisch und nicht physikalisch modelliert, aber musikalisch durchaus plausibel.
Der Simulator ist also akustisch sauber und professionell implementiert, aber der große Sprung zu wirklich organistischen Releases würde erst kommen, wenn vor dem Crossfade eine automatische Phasen- bzw. Korrelationsausrichtung zwischen Sustain-Ende und Release-Anfang erfolgt. Genau dort steckt erfahrungsgemäß mehr Klanggewinn als in der Wahl zwischen Linear, Sinus, Sin² oder √x.
Wie gesagt - komplett von CHATGPT kommentiert und bewertet. Ziehe das Nützliche aus den Infos raus (Phasen- bzw. Korrelationsausrichtung).
VG
montre
#5
Danke für die ausführliche Rückmeldung und die ChatGPT-Analyse — sehr interessant!
Ein paar Ergänzungen dazu:
Die Haltezeit-Parabel im Simulator ist übrigens direkt aus GrandOrgue übernommen. In meiner eigenen Forschung hat sich der quadratische Term allerdings nicht als besonders nützlich erwiesen, weshalb ich ihn durch einen einfachen linearen Ansatz ersetzt habe. In diesem Zusammenhang habe ich mir auch Python-Tools gebaut, die automatisch über die Samples eines Sample-Sets gehen und deren Attack- und Release-Verhalten analysieren. Ziel ist es, für jede Pfeife individuell ein Modell des Einschwingvorgangs zu erzeugen — damit könnten später über zusätzliche ODF-Parameter bei kurzen Tönen realistischere Nachhallverläufe entstehen. Das ist aber ein längerfristiges Projekt das erst in den nächsten Ferien wieder weiterentwickelt werden kann.
Den Hinweis auf die Phasenausrichtung finde ich besonders spannend, weil ich rein zufällig vor zwei Tagen ebenfalls den Artikel von Nick Appleton gelesen hatte und seine Empfehlung zur Kreuzkorrelation notiert hatte. GrandOrgue hat zwar bereits ein primitives Release-Alignment, aber es arbeitet nur mit 32 Amplituden-Bins — das ist sehr grob. Ich arbeite gerade an einer Erweiterung die Kreuzkorrelation verwendet um eine bessere Phasenausrichtung zu erreichen, und die bisherigen Ergebnisse bestätigen was Appleton beschreibt: ein gutes Release-Alignment ist tatsächlich wichtiger als die Wahl der Crossfade-Kurve.
Das führt aber zu einem interessanten Nebeneffekt: bei phasenausgerichteten Releases ist Equal-Power paradoxerweise nicht unbedingt die beste Wahl. Korrelierte Signale erzeugen beim Überblenden einen unerwünschten Lautstärkepeak — in diesem Fall kann eine einfachere Kurve natürlicher klingen. Die Kurvenauswahl bleibt also auch bei besserem Alignment relevant, nur mit anderem Vorzeichen.
Entwickelt habe ich das übrigens mit Unterstützung von ChatGPT und Claude — die Tools haben den Prozess erheblich beschleunigt.
VG
#7
Sie haben vor allem dabei geholfen das große Projekt schnell zu durchblicken. Ist ja doch einiges historisch gewachsen und viele unerwartete Seiteneffekte bei Änderungen. Als ich angefangen hab war openai gerade so weit dass es halbwegs benutzbar war. Aber Claude ist echt ein anderes Level und ich hab so meine Tricks die KIs einzunorden 🤪
#8
hier mal ein schönes beispiel aus dem neuesten feature an dem ich gerade arbeite. Ich versuche ja das release alignment zu verbessern. Wer sich für die theorie interessiert kann hier näheres lesen: https://www.appletonaudio.com/blog/2014/...-organs-part-1/
man sieht sehr schön, wie in dieser Situation Grand-Orgue die falsche Phasenlage für das release sample erwischt. und es kommt trotz sin^2 kurve zu einem einbrechen in der amplitude. Mit dem neuen NDP-Korellations feature wird die Ähnlichkeit der Kurven über das Crossfade Fenster sicher gestellt und man sieht einen natürlichen übergang ohne einbruch.
Ist leider ein sehr komplexes feature, dass noch einige stunden entwicklungszeit brauchen wird. aber ich denke es wird eine lohnenswerte verbesserung.
#9
Hallo zusammen,
ich habe jetzt endlich die neue experimentelle GrandOrgue-Demo mit korrelationsbasiertem Release Alignment hochgeladen:
https://github.com/sebion7125/grandorgue...eleaseAlignDemo
Das ist eine Weiterentwicklung meiner früheren XFade-/Release-Scaling-Demo und basiert jetzt auf GrandOrgue 3.17.3.
Die wichtigste Neuerung ist das korrelationsbasierte Release Alignment. Wenn eine Taste losgelassen wird, muss GrandOrgue vom aktuell klingenden Attack-/Sustain-Sample auf ein separates Release-Sample umschalten. Wenn das Release-Sample dabei an einer ungünstigen Wellenformposition startet, kann der Übergang knacken, phasenmäßig unsauber wirken oder hörbare Auslöschungen erzeugen.
Der neue Code analysiert beim Laden der Orgel das Attack-/Sustain-Sample und das zugehörige Release-Sample. Daraus wird pro Pfeife eine kleine Lookup-Tabelle erzeugt, die die aktuelle Haltezeit bzw. Loop-Position auf einen Release-Offset mit hoher Korrelation abbildet. Zur Laufzeit verwendet GrandOrgue diese Tabelle, um das Release-Sample vor dem Crossfade an einer besser passenden Phasenposition zu starten.
Das Ziel ist, den Übergang ins Release-Sample glatter und weniger zufallsabhängig zu machen.
Ich habe außerdem einige Screenshots aus meinem analyze_lut-Tool angehängt. Sie zeigen, was der Algorithmus intern macht:
* Die Heatmap zeigt die Korrelationslandschaft.
* Die x-Achse ist der Periodenindex im Attack-/Sustain-Sample.
* Die y-Achse ist der mögliche Offset im Release-Sample.
* Grüne Bereiche zeigen hohe Korrelation, rote Bereiche niedrige oder negative Korrelation.
* Die eingezeichneten Punkte sind die Release-Offsets, die für die Runtime-LUT ausgewählt wurden.
Dadurch wird das Problem recht anschaulich: Der beste Release-Offset ist nicht immer konstant. Bei manchen Samples folgt er einem stabilen Ast, bei anderen driftet er mit der Zeit, und in schwierigeren Fällen gibt es mehrere mögliche Korrelationsäste. Der Algorithmus versucht, dem musikalisch sinnvollen Ast zu folgen, ohne im Audio-Thread teure Korrelationssuchen durchführen zu müssen.
Einige Screenshots zeigen zusätzlich einen direkten Wellenformvergleich:
* Blau = aktuelle Attack-/Sustain-Wellenform
* Rot = bisherige/Legacy-Release-Position
* Grün = korrelationsbasiert ausgerichtete Release-Position
In diesen Beispielen liegt die grüne Kurve sichtbar näher an der aktuellen Wellenformphase als die bisherige Release-Position. Genau das soll der Algorithmus erreichen.
Ein paar Hinweise:
* Das ist weiterhin experimentell und kein offizielles GrandOrgue-Release.
* Das Release Alignment ist dafür gedacht, zusammen mit den XFade-Kurvenverbesserungen zu arbeiten.
* F12 ist derzeit ein diagnostischer Sofortumschaltmodus ohne Crossfade. Dieser Modus darf und wird eher knacken als die eigentlichen Crossfade-Modi, ist aber nützlich, um zu hören, ob das Alignment selbst die Häufigkeit oder Stärke der Knackser reduziert.
* Ich habe die Funktion mit einigen größeren Samplesets getestet, aber es kann weiterhin Sonderfälle geben, besonders bei verrauschten Releases, ungewöhnlichen Loops, sehr kurzen Perioden oder schwierigen Mixturen.
Mich würde besonders Rückmeldung zu folgenden Punkten interessieren:
1. Samplesets oder Register, bei denen der Release-Übergang deutlich besser wird,
2. Fälle, in denen es weiterhin knackt oder sogar schlechter klingt,
3. reproduzierbare Notenhänger oder MIDI-Event-Probleme,
4. ob sich die verschiedenen Crossfade-Kurven zusammen mit dem Release Alignment weiterhin plausibel verhalten.
#10
Hallo zusammen,
ich habe einen neuen experimentellen Build veröffentlicht:
https://github.com/sebion7125/grandorgue...adeReleaseAlign
Die klanglichen Features wie Crossfade-Kurven, Release Alignment usw. sind weiterhin enthalten. Die wichtigste Änderung in diesem Build betrifft diesmal aber die Audio-Stabilität.
Die AudioWrapper-/Treiber-Aufrufe laufen jetzt über einen eigenen Worker-Thread. Öffnen, Schließen, Starten und Reconnect der Audio-Schnittstelle werden dadurch sauberer serialisiert und nicht mehr aus verschiedenen Kontexten heraus angestoßen.
Praktischer Effekt: GrandOrgue kann jetzt besser damit umgehen, wenn ein Audiointerface verschwindet, z.B. bei einem USB-Wackler oder wenn ein USB-Audiointerface abgezogen und wieder angesteckt wird. In meinem Testfall erkennt GO den Geräteverlust und verbindet sich automatisch wieder, ohne dass GrandOrgue neu gestartet werden muss.
Zusätzlich gibt es eine Suspend/Resume-Behandlung: Wenn GrandOrgue ein entsprechendes Systemereignis bekommt, wird die Audio-Schnittstelle vor dem Suspend geschlossen und nach dem Aufwachen wieder geöffnet. Das soll Treiberprobleme umgehen, bei denen Audiointerfaces nach Sleep/Resume in einem kaputten Zustand hängen bleiben.
Getestet habe ich das bisher vor allem unter Windows mit meinem USB-Audiointerface. Der automatische Reconnect ist aber nicht bewusst auf Windows beschränkt; wie gut das mit anderen Backends und Treibern funktioniert, müsste man ausprobieren.
Mich würden daher besonders Rückmeldungen interessieren zu:
USB-Audiointerface abziehen / wieder anstecken
Standby / Aufwachen
ASIO / WASAPI / ALSA / CoreAudio
ob GO danach automatisch wieder Ton ausgibt
ob es Hänger, Abstürze oder Notenhänger gibt
Wie immer: Das ist ein experimenteller Fork und keine offizielle GrandOrgue-Version.
- Hauptwerk
- Hauptwerk-Konfiguration, Diskussion
- Hauptwerk-Samplesets
- GrandOrgue
- GrandOrgue-Konfiguration, Diskussion
- GrandOrgue-Samplesets
- Sweelinq
- Sweelinq-Konfiguration, Diskussion
- Sweelinq-Samplesets
- Sonstige Orgelsoftware
- Organteq
- Sonstige Sampler
- Hardware
- Spieltische und Selbstbau
- Zubehör (PCs, Monitore, Interfaces etc.)
- Klangabstrahlung
- Musikalisches
- Noten, Einspielungen, Konzerte
- Sonstige Musikthemen
Jetzt anmelden!
Jetzt registrieren!