• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

NatAmbio: Open-source DSP framework for stereo reproduction

Yes it does because you can use the NAE sliders in stereo as well to choose the amount of front and ambience you hear, the rear channels are not needed. NAE internally separates the input into principal and ambient stereo components, adjusts their relative levels, recombines them into the same two output channels, and then applies the front-dipole XTC. So it's not simply front = only front, rear = only ambience.

The extracted ambience is reproduced by the front speakers, where XTC helps it sound less localized. This is also the single-dipole configuration described in https://github.com/raul-fernandez-o...ion-of-nae-to-single--or-dual-dipole-natambio

Two instances of the current plug-in would not reproduce the intended four-channel arrangement. One, you cannot fully mute front or ambience at the moment, but more importantly, both instances would use the frontal/alpha NAE mode. The intended rear feed uses the separate beta mode, outputs only its ambient component, and applies XTC configured for the rear dipole. A genuine rear implementation would therefore need an explicit rear path either a 2-in 4-out version or a dedicated plugin just for rear-output variant.

So the short answer is: front-only NAE is intentional; the rear dipole remains a possible future extension.
 
First of all, thank you for your curiosity and for the effort you put into exploring an idea from someone who had just arrived at ASR, starting from a post that I wasn't even sure would be understandable.

Then, thank you for all the work involved in porting the algorithms to the much more widely used VST3 ecosystem. During that process you also helped verify that your implementation faithfully reproduces the behaviour of my own implementation, which gives me a lot of confidence in the underlying algorithms.

And finally, thank you for creating a GitHub repository and making your work freely available to the entire ASR community. I'm sincerely grateful for everything you've done.

Until you came along, there was only one NatAmbio implementation in the world. It wasn't the number of implementations that worried me, but the possibility that I might be the only person actually hearing what I was hearing.

My goal with this project has always been to bring XTC (and Ambiophonics in general) back into the conversation as a practical approach to spatial audio reproduction, while solving what I believe has historically been its biggest weakness: audible coloration.

We've already discussed several improvements that you found necessary for your own system, and I'm convinced that's exactly how an open-source project should evolve. New testers discover new needs, contribute new ideas, and gradually expand something that, until just a few days ago, existed only in my living room and was tuned specifically for my own setup.

I'm not interested in preserving my algorithms as something untouchable. Quite the opposite. The technical papers I published are there so that people can understand them, analyse them, challenge them and improve them.

So once again, digitalfrost, thank you for your trust, your work, and your contribution to NatAmbio.
 
Hi everyone,

I wanted to share my hands-on experience testing both the original NatAmbio framework by Raúl Fernández Ortega and the VST3 implementation created by @digitalfrost.

My Setup & Listening Environment

  • Monitors: IK Multimedia iLoud Micro Monitors on a desktop setup (nearfield listening).
  • DSP / Room Correction: Parametric EQ applied to correct bass room modes (50 Hz to 500 Hz).
  • OS: Ubuntu Linux.

1. Raúl's Original CLI Version (NatAmbio)

Getting the original C version running on Ubuntu took a bit of tweaking. Since the code was built around legacy JACK dependencies, it didn't run out-of-the-box with native PipeWire and pw-jack due to buffer/thread initialization quirks. With some assistance from Gemini, I made a few adjustments to the code to ensure seamless compatibility with PipeWire.

Listening Impressions:

  • Soundstage & Imaging: The expansion of the soundstage is remarkable on well-recorded tracks. The phantom center becomes considerably sharper and more distinct.
  • Clarity: On certain recordings, the improvement in spatial separation is striking—it feels as though the mix gains a new layer of transparency without introducing any artificial coloration or frequency tilt.
  • Isolating Ambience: I set up an XML configuration to route both the main front channels and the extracted ambience channels separately to audition what NAE (NatAmbio Ambient Extractor) extracts as diffuse field information. Hearing the extracted spatial cues isolated from the direct sound is fascinating.

2. The VST3 Implementation (by digitalFrost)

The VST3 version simplifies the workflow significantly. While it requires a host like Carla (or a DAW) to run on Linux, integrated setup within a plugin graph is much more flexible for daily use.

One highlight of the VST3 GUI is the NAE PCA Field visualizer (attached below). It offers a real-time representation of the spatial energy, soundstage width, and phase distribution between the speakers. It’s an exceptionally cool and helpful tool to visually confirm what you are hearing.

Overall, big thanks to Raúl for the original research/framework and to digitalFrost for bringing it into a modern VST3 format!
 

Attachments

  • VST3.png
    VST3.png
    73.3 KB · Views: 38
For the Windows platform, does the VST3 need to be built from source? I looked over the GIT and saw only pre-built for Linux Debian unless I missed it.
 
For the Windows platform, does the VST3 need to be built from source? I looked over the GIT and saw only pre-built for Linux Debian unless I missed it.
You can just download the prepared release here https://github.com/digitalfrost84/NatAmbio-VST3/releases/tag/v2026.7.21

Just get NatAmbio-VST3-2026.7.21-win64.zip

You only need NatAmbio.vst3 file. Copy it to

%LOCALAPPDATA%\Programs\Common\VST3

or

C:\Program Files\Common Files\VST3

And any VST3 host should be able to pick it up. For the modern VST3 system, you are supposed to use the NatAmbio.vst3 folder. Extract it to the same locations. But really, the NatAmbio.vst3 file is all you need.
 
Last edited:
I have a hard time calling something finished, but I didn't fiddle with this for some days now, so I guess it's time:

View attachment 546294

It's a stereo-in stereo-out plugin for Windows x64 and Linux x64 that implements the NatAmbio Ambient Extractor and crosstalk-cancellation in a VST3. That should make it much easier for people to test out NatAmbio without much setup. You can load it into any VST3 host, for example Audacity https://www.audacityteam.org is free and cross-platform. The VST3 should also compile on OSX, but I cannot provide a OSX binary at the moment.


For context, I made an ambiophonics plugin of my own based on the original algorithms with some custom tweaks. After seeing the post here I integrated NatAmbio into it and basically decided to abandon what I had built because NatAmbio was just that much better.

The ambiophonics effect you can achieve without coloration or affecting the timbre is the best I heard yet.

The plugin comes with a lot of tests to make sure it behaves well under strange, irregular or even dangerous signals, as well as that is is faithful to the original NatAmbio implementation.

The default settings are conservative. Be careful when increasing ILD GAIN it can start ringing.

You can slide the right side out to get more information. The idea is that stuff you rarely need is hidden on the right side, so unless you need the info or want some eye candy you can use the compact UI.

View attachment 546295

Just set the output trim in the beginning so it's not clipping depending on your gain staging and you are good to go.

As for the settings I've added a tuning guide here https://github.com/digitalfrost84/NatAmbio-VST3/blob/main/docs/TUNING.md but when in doubt always refer to the original https://github.com/raul-fernandez-ortega/natambio documentation.

I did extensive testing under Windows, I have not tested it under Linux. So if you encouter any issues feel free to open a github issue or DM me. If anybody manages to compile and run on OSX would also be interesting to hear from you.
I tried to compile it on OSX but the main issue is that Apple’s libc++ has't implemented the  atomic<shared_ptr<T>>  specialization, unlike libstdc++ (GCC 12+) and MSVC.
Claude and Grok suggested code changes to counter that and it compiles then with some warnings. But 2 tests fail:
13 - vst3_render_sanity (Failed)
14 - vst3_contract_probe (Failed)
And the resulting vst3 is evaluated as 'damaged' when loading it in Hang Loose (HLHost).
So not there yet.
 
Hi everyone,

Following several very inspiring private discussions with @digitalfrost over the last few days, I ended up revisiting the mathematical foundations of my XTC implementation.

One question kept coming back:

How can the recursive FIR construction be extended to asymmetric loudspeaker layouts while remaining fully consistent with the classical symmetric model?

That led me to develop a complete theoretical formulation for asymmetric XTC, which is now available here:

https://github.com/raul-fernandez-ortega/natambio/blob/main/docs/xtc/xtc_no_simetrico_en.md

The derivation is admittedly more mathematical than most of the NatAmbio documentation. The asymmetric case introduces left/right operators and several index manipulations that make the algebra a little harder to follow. However, after working through all the intermediate steps, the final result turns out to be surprisingly compact. The entire recursive FIR construction is ultimately based on just two normalized acoustic operators:

CodeCogsEqn.png


and one recursive round-trip operator:

CodeCogsEqn (1).png


from which the complete asymmetric FIR construction follows:

CodeCogsEqn (2).png


What I personally like about these equations is that they remain easy to interpret physically.
  • δ is simply the original direct signal.
  • G represents the first crosstalk cancellation.
  • P generates every successive round-trip cancellation.
  • The direct and cross filters are built from exactly the same recursive structure, only shifted by one propagation step
One aspect that I personally find satisfying is that the classical symmetric solution appears immediately by simply imposing:

CodeCogsEqn (3).png


An important point is that the normalized operators

CodeCogsEqn (4).png


are precisely where the HRTF modelling resides. Those operators may be generated from a simple empirical ITD/ILD approximation, a spherical-head model, KEMAR measurements, publicly available averaged HRTF datasets, or even personalized measurements.

In other words, improving the HRTF model does not require changing the recursive FIR generation algorithm. It simply provides better Gl and Gr operators to the same recursive framework.

so the new formulation naturally reduces to the original symmetric recursive model without requiring any additional derivation.



From the implementation point of view, this model is now fully integrated into NatAmbio. The original symmetric XTC generator remains completely unchanged. The asymmetric implementation has been added as a separate algorithm (xtc_asym.c/.h), together with an extension of the XML configuration format through a new <xtc_asym> tag.

The repository now also includes:
  • the complete mathematical derivation,
  • XML configuration documentation,
  • an example XML configuration,
  • and the new asymmetric FIR generation engine.

Over the next few days I also plan to publish standalone reference implementations of the asymmetric FIR generator in both C and Python, independent of the NatAmbio processing engine.

Many thanks again to @digitalfrost. Our discussions turned out to be an excellent catalyst for revisiting the theory and pushing it one step further.

As always, comments, criticism and alternative approaches are very welcome.
 
Natambio (VST3) now running on MacOS within HLHost.

But test 13 and 14 are still failing (are these OK on Windows and Linux?) and since I'm not a registered Apple developer I cannot sign the plugin as it should be.
So some fiddling with the com.apple.quarantine  attribute was needed.

Screenshot 2026-08-04 at 12.43.09.png
 
First of all, thank you very much for all the effort you've put into getting NatAmbio running on macOS. I honestly never imagined that other audio enthusiasts would one day be porting my NatAmbio algorithms to different environments such as VST3, Windows and now macOS. Seeing this happen is something I feel genuinely honoured and grateful for.

Looking at your screenshot, I think I can see HLConvolver placed before NatAmbio in the processing chain. I may be mistaken, as I'm not familiar with HLHost, but if HLConvolver is being used for room correction or DRC, I would generally recommend placing it after NatAmbio. Ideally, NAE/XTC should operate on the original stereo signal before any per-channel equalisation or room correction is applied. If HLConvolver is doing something else, then please ignore this comment.

I'd also be very interested in your listening impressions once you've had some time to experiment with it. Not only whether you like the spatial effect, but also whether you notice anything unusual: asymmetry, coloration, echoes, unstable phantom images, or anything else that catches your attention. Understanding how NatAmbio is perceived on systems other than my own is extremely valuable to me, both for learning and, hopefully, for improving it further.

And once again, thank you very much for taking the time to make this work on macOS and for sharing your progress with everyone.
 
First of all, thank you very much for all the effort you've put into getting NatAmbio running on macOS. I honestly never imagined that other audio enthusiasts would one day be porting my NatAmbio algorithms to different environments such as VST3, Windows and now macOS. Seeing this happen is something I feel genuinely honoured and grateful for.

Looking at your screenshot, I think I can see HLConvolver placed before NatAmbio in the processing chain. I may be mistaken, as I'm not familiar with HLHost, but if HLConvolver is being used for room correction or DRC, I would generally recommend placing it after NatAmbio. Ideally, NAE/XTC should operate on the original stereo signal before any per-channel equalisation or room correction is applied. If HLConvolver is doing something else, then please ignore this comment.

I'd also be very interested in your listening impressions once you've had some time to experiment with it. Not only whether you like the spatial effect, but also whether you notice anything unusual: asymmetry, coloration, echoes, unstable phantom images, or anything else that catches your attention. Understanding how NatAmbio is perceived on systems other than my own is extremely valuable to me, both for learning and, hopefully, for improving it further.

And once again, thank you very much for taking the time to make this work on macOS and for sharing your progress with everyone.
Thanks for the kind words and the correction to place HLConvolver after NatAmbio. I just plugged the VST3 in and was glad it worked from a technical point of view
:) . Next phase will be working on the sound. And thank you for bringing the algorithms in the open.
 
Is HLConvolver acting as the VST host?

Can that configure ordering when there are multiple plugins?
 
I have just published a new technical note on the parametrization of the XTC model used in NatAmbio:

Parametrization of the operator G in NatAmbio XTC

https://github.com/raul-fernandez-ortega/natambio/blob/main/docs/xtc/XTC_parametrization_en.md

The note tries to answer a fairly practical question: once the mathematical XTC model has been defined, how should its acoustic operator

1786352118806.png


actually be constructed and adjusted?

Very schematically, the main points are:

  • Analysis of five public HRTF databases (HUTUBS, RIEC, BiLi, CIPIC and ARI).
  • Separation of (G) into ITD, broadband ILD and spectral ILD components.
  • ITD and average ILD show sufficiently low inter-individual dispersion at typical stereo azimuths to allow a simple low-dimensional model.
  • The detailed spectral ILD is much more listener-dependent, so NatAmbio replaces it with a smooth monotonic approximation rather than introducing anatomy-specific peaks and notches.
  • The resulting practical model has only four adjustable parameters: ITD, ILD, loudspeaker azimuth
    equation
    , and spectral slope
    equation
    .
  • A practical tuning procedure is proposed, using the HRTF-derived model as the initial reference and listening/test signals for final adjustment.
  • The note also discusses the possible role of early room reflections in explaining why the ILD values that work best experimentally tend to be higher than those predicted directly from HRTF data.
There is also a section that may be particularly interesting for people familiar with previous XTC implementations such as RACE: why NatAmbio can operate with substantially wider loudspeaker angles than the very narrow Ambiodipole geometries traditionally associated with recursive XTC.

The proposed explanation is not simply greater processing power. NatAmbio explicitly includes the frequency-dependent ILD component in (G), which becomes increasingly relevant as loudspeaker azimuth increases. This allows the model to remain useful at moderate stereo angles — currently tested/modelled up to approximately ±30° (60° total separation) — while retaining the recursive interpretation of XTC.

With this note, the theoretical description of NatAmbio XTC is now essentially divided into three complementary documents:

  1. Design of a Convolution-Based Stereo Crosstalk Canceller (XTC) for NatAmbio
    Mathematical derivation of the recursive FIR XTC model.
    https://github.com/raul-fernandez-ortega/natambio/blob/main/docs/xtc/xtc_filters_en.md
  2. Applying NatAmbio XTC in non-symmetric setups
    Extension of the same model to asymmetric loudspeaker/listener geometries.
    https://github.com/raul-fernandez-ortega/natambio/blob/main/docs/xtc/xtc_no_simetrico_en.md
  3. Parametrization of the operator G in NatAmbio XTC
    Connection between the mathematical model, HRTF data and the practical parameters used to generate and tune the filters.
    https://github.com/raul-fernandez-ortega/natambio/blob/main/docs/xtc/XTC_parametrization_en.md
Together, the three notes are intended to form the theoretical corpus of the NatAmbio XTC model: derivation, generalization and practical parametrization.

As always, comments, criticism and experimental results are very welcome.
 

Attachments

  • 1786351909450.png
    1786351909450.png
    1.9 KB · Views: 3
Native OSX binary now available. It's not signed since I am not an apple developer, but I fixed the issues @PaulZH mentioned. Linux and Windows users don't really need to upgrade.

Paul if you could test it again, that would be great.

 
Last edited:
Back
Top Bottom