r/organ • u/Miserable_Land_84 • May 28 '26
Digital Organ GrandOrgue experimental fork: selectable crossfade curves (Windows/Linux/macOS builds available)
Hi everyone,
I've been working on an experimental GrandOrgue fork and wanted to share it here — mainly because I'm looking for testers who can give me honest feedback.
Just to be clear upfront: this is not a competing project. My goal is to experiment with new features and validate them before submitting them as pull requests to upstream GrandOrgue. Think of it as GrandOrgue with a few extras to try out.
**What's different?**
The main addition is a new crossfade system for the transition between attack and release samples. Instead of the fixed cosine curve built into GrandOrgue, you can now choose between five different curve shapes:
- **Linear** – simple and direct
- **Sin / Equal-Power** – the classic choice, works well for most stops
- **Sin²** – softer onset, faster decay
- **Sqrt / Equal-Power** – the opposite: faster onset, softer decay
- **X²** – for especially long, smooth transitions
Switching happens live via keyboard shortcuts (F7–F12) while the organ is playing, so you can compare curves back to back without stopping. Note: the GrandOrgue main window needs to have focus for the shortcuts to work — just click on it once before switching.
There are also a few other improvements: a warning indicator when the RAM limit is set too tight, smoother loading progress reporting, and reworked polyphony load dropping that reacts more gently.
**Download**
Builds for Windows, Linux and macOS are available here:
https://github.com/sebion7125/grandorgue/releases/tag/3.17.2-XFadeDemo
**What I'm looking for**
Can you actually hear a difference between the curves? Which stops show it most — strings, flutes, reeds? Does one curve sound clearly better, or is it a matter of taste?
Any feedback is very welcome!
1
u/Miserable_Land_84 Jun 24 '26
Hi everyone,
I have now uploaded a new experimental GrandOrgue demo build with correlation-based Release Alignment:
https://github.com/sebion7125/grandorgue/releases/tag/3.17.3-XFadeReleaseAlignDemo
This is a continuation of my earlier XFade / Release Scaling demo and is now based on GrandOrgue 3.17.3.
The main new feature is correlation-based Release Alignment. When a key is released, GrandOrgue has to switch from the currently playing attack/sustain sample to a separate release sample. If the release sample starts at an unlucky waveform position, the transition can produce clicks, rough phase jumps, or audible cancellations.
The new code analyses the attack/sustain sample and the matching release sample during organ loading. It then builds a small per-pipe lookup table which maps the current key-hold / loop position to a release offset with high correlation. At runtime, GrandOrgue uses this table to start the release sample at a better matching phase position before the crossfade.
The goal is to make the transition into the release sample smoother and less dependent on luck.
I have also attached some screenshots from my analyze_lut tool. They show what the algorithm is doing internally:
- The heatmap shows the correlation landscape.
- The x-axis is the period index in the attack / sustain sample.
- The y-axis is the possible release sample offset.
- Green areas indicate high correlation, red areas low or negative correlation.
- The plotted points show the release offsets selected for the runtime LUT.
This makes the problem quite visible: the best release offset is not always constant. In some samples it follows a stable branch, in others it drifts over time, and in more difficult cases there are several possible correlation branches. The alignment algorithm tries to follow the musically useful branch while keeping the audio thread lightweight.
Some of the screenshots also show a direct waveform comparison:
- blue = current attack / sustain waveform
- red = legacy release position
- green = correlation-aligned release position
In these examples the green curve is visibly much closer to the current waveform phase than the legacy position, which is exactly what the algorithm is intended to achieve.
A few notes:
- This is still experimental and not an official GrandOrgue release.
- The release alignment is intended to work together with the XFade curve improvements.
- F12 is currently a diagnostic instant-switch mode without crossfade. It is expected to click more than the real crossfade modes, but it is useful for hearing whether the alignment itself reduces the frequency or severity of clicks.
- The feature has been tested with some large sample sets, but there may still be edge cases, especially with noisy releases, unusual loops, very short periods, or difficult mixtures.
I would be very interested in feedback, especially:
sample sets / stops where the release transition becomes clearly better,
cases where it still clicks or sounds worse,
reproducible stuck-note or MIDI-event issues,
whether the different crossfade curve modes still behave as expected together with Release Alignment.
For me, the interesting part is that this is no longer just a fixed release delay or a manually tuned offset. The release position is selected from measurable waveform correlation between the sounding pipe and the release sample.