• 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!

DecayCore — Free FIR room correction with temporal decay control, automatic optimization and measurement workflow

@john61ct made me think. So v1.1.5 is out.

DecayCore v1.1.5

- Hybrid FIR-IIR modal cuts

The IIR search now always runs at higher resolution (262144 taps), even when the user's FIR filter tap count
is much lower, such as 2048 taps. This makes DecayCore's modal correction benefits more practical for
hardware DSP setups as well. IIR filter details are shown in the UI and included in the filter package
generated by the application.

- HPF

When the tap count is below 65536, DecayCore now creates the HPF in IIR form. This leaves more FIR taps
available for phase correction.

---

- Hybrid FIR-IIR modal cuts

IIR haku toimii nyt aina suuremmalla tarkkuudella (262144 tapsia) vaikka käyttäjän FIR-filtterin tapsi määrä
on huomattavasti matalampi (esim 2048). Tämä tuo ohjelman hyödyt myös käyttöön rautapohjaisilla DSP-ratkaisuilla.
IIR filtterien tiedot löytyvät UI:sta sekä filtteri paketista, jonka ohjelma tekee.

- HPF

Jos tapsien määrä on alle 65536 niin ohjelma tekee HPF:n IIR-muodossa. Näin vaiheen korjaukselle jää enemmän tapseja käyttöön.

---
 
I'm flattered but confused. So far I have put off DRC, focused on the "speaker building" anechoic EQ, crossovers mostly bass management, especially the time domain, trying to make sense of XO phase tuning vs flight time delays

Using DSP as a general singular noun I guess meant to refer to the hardware doing the convolving, actual filtering.

I plan to use multiple RPi units in separate layers dedicated to DSPing, located at different points in the multichannel system, stereo source vs maybe 24 endpoint channels.

No PC-as-player, except as an occasional option, not on all the time.

Obviously DecayCore just generates filters. I was thinking to dedicate an RPi unit to just one such tool at a time, rather than mixing say REW filters and MSO filters up in just one DSP

So when you refer to "the user's DSP" I take it you mean "tools other than DecayCore", both hardware and software?

Besides that Q, all feedback welcome, correcting my misconceptions please.

If too far off topic, feel free to jump over to this thread to respond

 
I was going to git clone the repo and use a Pi agent to help me understand this in more detail and I thought I’d ask, can this be used with multi channel surround setups? Also, would I need to integrate the subwoofers and speakers before measuring with Decay Core?
 
I was going to git clone the repo and use a Pi agent to help me understand this in more detail and I thought I’d ask, can this be used with multi channel surround setups? Also, would I need to integrate the subwoofers and speakers before measuring with Decay Core?
Pi agent? Do you mean "AI" agent?
 
Ah, I thought the "pi" referred to a Raspberry Pi. Remember that LLMs only produce stuff that sounds right, not stuff that is right.
I work in Data Science and AI. I agree with that statement and that is not true if you inject the correct context. In this case, I was going to git clone the repo and then use a Pi agent to explain to me what it does which means it would just be interpreting the code and not anything from its internal knowledge/training data.
 
Have you read this thread?
Sure okay, I’ve seen mention of subwoofer measurements and I suggest this is a valid question. Also I’ve not seen mention of multi channel surround.

Would you please be more helpful next time? Perhaps something like it’s been mentioned earlier in the thread.
 
I would if my brain kept better track, I would need to re-read it myself
 
I was going to git clone the repo and use a Pi agent to help me understand this in more detail and I thought I’d ask, can this be used with multi channel surround setups? Also, would I need to integrate the subwoofers and speakers before measuring with Decay Core?
For surround, yes. You must feed the program one pair of speakers at a time: (FL, FR), (SLA, SRA), etc.
Integration. No, you don't have to. The program suggests what it considers to be the optimal delay (+/- 15ms), level and phase.
 
What is the purpose of the XO options in the advanced tab?
You can only set it up properly if you're drinking XO Cognac at the same time.

1782025868163.jpeg



Really cool program, @VilhoValittu
Thanks for developing it and for all the effort you put into it.
 
So when you refer to "the user's DSP" I take it you mean "tools other than DecayCore", both hardware and software?
When I say “the user’s DSP”, I don’t mean DecayCore itself. DecayCore only generates correction filters and export data. By “DSP” I mean the actual place where those filters are applied in the playback chain: for example CamillaDSP on an RPi, a FIR-capable hardware DSP, a convolver on a PC, or some other software/hardware stage.
 
Hi,

I'm a DecayCore user from China. I originally discovered DecayCore because SoundID does not allow exporting FIR .wav files for use with EasyEffects, so I started looking for alternatives and eventually chose DecayCore.

I have encountered a somewhat strange issue on a Chinese-language operating system. Parts of the interface are displayed in Danish instead of English. English itself is not a problem for me, but my browser's translation tool cannot properly translate Danish, which makes some parts of the workflow difficult to understand.

That said, I would also like to thank you for creating DecayCore. The calibration results on my Adam T5V monitors have been genuinely impressive.

Since I did not perform an extensive multi-point measurement like the 37-point process used in SoundID, I would naturally expect somewhat less consistency when moving around the listening area. However, at my primary listening position, the listening experience is every bit as good as what I achieved with SoundID.

Compared with the filters I generated myself using REW, the improvement is honestly huge.

As someone who has spent time experimenting with REW, SoundID, and FIR-based room correction workflows, I think DecayCore strikes an excellent balance between ease of use and final results.

I believe DecayCore is an excellent tool for the vast majority of users who want high-quality room correction without excessive complexity.

Thank you for your work and for making it available to the community.
 
I have encountered a somewhat strange issue on a Chinese-language operating system. Parts of the interface are displayed in Danish instead of English. English itself is not a problem for me, but my browser's translation tool cannot properly translate Danish, which makes some parts of the workflow difficult to understand.
Hi, that's strange. Btw language is Finnish.

And thanks for the feedback.
 
Thank @VilhoValittu for a great tool!

Hi, I’m planning to run DecayCore on the following system:


Mac mini (2018, Intel i3) → CamillaDSP → MOTU Ultralite Mk5 → KEF R3 (mains) + SVS PB-1000 (sub)

Source is Tidal via BlackHole into CamillaDSP. I’ve already tested DecayCore successfully on a temporary 2.0 setup, but haven’t bought the MOTU yet so I haven’t been able to test the full 2.1 chain. A few questions before I commit:

1. Sub measurement and CamillaDSP export for 2.1

Can DecayCore measure the subwoofer on macOS with a multichannel interface like the MOTU Mk5, where all output channels are individually addressable via Core Audio (not a Windows-style 5.1/7.1 virtual device)? I understand the built-in sub measurement was previously Windows-only, but the recent Linux improvement allowing explicit channel selection made me wonder if macOS is now viable too.

When exporting, does DecayCore generate a complete CamillaDSP YAML config that includes the sub channel, crossover filters, and mixer routing — or does the user need to integrate those manually?

2. HPF/LPF: user-defined or auto-recommended?

Do users set the crossover frequency and slope manually, or does DecayCore recommend values after measuring mains and sub separately? Is LR4 (24 dB/oct Linkwitz-Riley) the recommended slope for the crossover between sub and mains?

3. Custom house curve import

I can only see Harman as a target curve option. Is there a way to import a custom house curve? I have several curves collected from ASR that I’d like to try as targets.


4. Correction frequency range

Can the user define a custom correction range?

5. Sample rate

My current configuration: BlackHole at 48 kHz, MOTU Mk5 at 48 kHz, DecayCore at 48 kHz with 72,000 taps (auto-scaled from 65,536 reference at 44.1 kHz to preserve ~1,500 ms time window), CamillaDSP at 48 kHz, chunksize 1024.


Does this look reasonable? My content is mostly Tidal lossless (44.1 kHz) with some hi-res (96 kHz). I chose 48 kHz because 96→48 is a clean 2:1 downsample, and the 44.1→48 SRC is inaudible at good resampler quality. Is there a reason to prefer 44.1 kHz as the fixed pipeline rate instead?


Thanks for the tool — the temporal decay control and auto-optimization mode are genuinely well-designed.
 
Thank @VilhoValittu for a great tool!

Hi, I’m planning to run DecayCore on the following system:


Mac mini (2018, Intel i3) → CamillaDSP → MOTU Ultralite Mk5 → KEF R3 (mains) + SVS PB-1000 (sub)

Source is Tidal via BlackHole into CamillaDSP. I’ve already tested DecayCore successfully on a temporary 2.0 setup, but haven’t bought the MOTU yet so I haven’t been able to test the full 2.1 chain. A few questions before I commit:

1. Sub measurement and CamillaDSP export for 2.1

Can DecayCore measure the subwoofer on macOS with a multichannel interface like the MOTU Mk5, where all output channels are individually addressable via Core Audio (not a Windows-style 5.1/7.1 virtual device)? I understand the built-in sub measurement was previously Windows-only, but the recent Linux improvement allowing explicit channel selection made me wonder if macOS is now viable too.

When exporting, does DecayCore generate a complete CamillaDSP YAML config that includes the sub channel, crossover filters, and mixer routing — or does the user need to integrate those manually?

2. HPF/LPF: user-defined or auto-recommended?

Do users set the crossover frequency and slope manually, or does DecayCore recommend values after measuring mains and sub separately? Is LR4 (24 dB/oct Linkwitz-Riley) the recommended slope for the crossover between sub and mains?

3. Custom house curve import

I can only see Harman as a target curve option. Is there a way to import a custom house curve? I have several curves collected from ASR that I’d like to try as targets.


4. Correction frequency range

Can the user define a custom correction range?

5. Sample rate

My current configuration: BlackHole at 48 kHz, MOTU Mk5 at 48 kHz, DecayCore at 48 kHz with 72,000 taps (auto-scaled from 65,536 reference at 44.1 kHz to preserve ~1,500 ms time window), CamillaDSP at 48 kHz, chunksize 1024.


Does this look reasonable? My content is mostly Tidal lossless (44.1 kHz) with some hi-res (96 kHz). I chose 48 kHz because 96→48 is a clean 2:1 downsample, and the 44.1→48 SRC is inaudible at good resampler quality. Is there a reason to prefer 44.1 kHz as the fixed pipeline rate instead?


Thanks for the tool — the temporal decay control and auto-optimization mode are genuinely well-designed.
Thanks,

1. Sub measurement / macOS / MOTU
Important notice: DecayCore’s built-in measurement workflow is available only in the packaged application version. On macOS, the supported packaged builds are for Apple Silicon / M-series Macs only. A 2018 Intel Mac mini is therefore not a supported macOS target for the built-in measurement workflow.

If you use a supported packaged Apple Silicon Mac, subwoofer measurement with a multichannel Core Audio interface should be viable when the interface exposes individually addressable output channels. DecayCore does not require a Windows-style 5.1/7.1 virtual device for that path. I don't have any Apple's machines so I cannot test this feature personally.

For your Intel Mac mini: use externally captured measurements/imported IRs, or run the packaged measurement workflow on a supported Apple Silicon Mac.
You can run program direct from python basicly with any machine. Program work's this way almost with any machine. Installation instructions

One practical alternative: if you already have a good main/sub integration outside DecayCore, I recommend measuring the speakers with the subs playing together as the actual playback system, then using normal L/R correction filters only. In that workflow the sub contribution is already included in the left and right measurements. In my testing this approach can give excellent results, provided the crossover, delay, phase/polarity and sub level are already well set before measurement.
For CamillaDSP export: in Direct DAC / bass integration mode, DecayCore can export the 2-in / 3-out CamillaDSP DSP structure: mixer routing, main HPF, sub LPF/HPF, sub FIR, delay, polarity/gain and optional allpass where applicable. You may still need to adapt the device section to your own CamillaDSP/CoreAudio setup.

2. Crossover / HPF / LPF
In Direct DAC sub mode, DecayCore is intended to recommend/apply the main-sub integration automatically: crossover, sub LPF overlap, delay, polarity and gain. The final values are reported in the bass integration results and in zip-package.
LR4 / 24 dB/oct is the sensible default for the main HPF / sub LPF crossover. The subsonic sub HPF is separate and typically around 20 Hz / 12 dB/oct.

3. Custom house curve
Yes. In the Target tab, select `Upload Custom`. The format is a simple text file with frequency and dB pairs, for example:
20 6
100 3
1000 0
10000 -4
Comments after `#` are ignored. DecayCore needs at least two valid points and interpolates the curve.

4. Correction frequency range
Yes. Magnitude correction has userdefined min/max limits. Phase correction has separate transition controls in Advanced mode. Defaults are conservative and mainly focused on the low-frequency/modal region.

5. Sample rate / taps
Your 48 kHz plan is reasonable. 65,536 taps at 44.1 kHz scales to about 72,000 taps at 48 kHz, preserving roughly a 1.5 s FIR time window. The linear-phase latency component is roughly half of that, about 750 ms. Asymmetric/mixed filters has ~85ms delay regardless of tap count.
There is no DecayCore-specific reason that forces 44.1 kHz. 48 kHz is a valid fixed pipeline rate, especially with pro-audio interfaces and 96 → 48 material.

Also, CamillaDSP can select the matching filter for the active samplerate as long as the correctly named filter file exists for that samplerate. DecayCore’s `$samplerate$` filename option is meant for this: the YAML can reference the samplerate token, and CamillaDSP resolves it to the actual runtime samplerate. I suggest to use 'Generate all common filter sample rates' option in DecayCore.
 
Thanks,

1. Sub measurement / macOS / MOTU
Important notice: DecayCore’s built-in measurement workflow is available only in the packaged application version. On macOS, the supported packaged builds are for Apple Silicon / M-series Macs only. A 2018 Intel Mac mini is therefore not a supported macOS target for the built-in measurement workflow.

If you use a supported packaged Apple Silicon Mac, subwoofer measurement with a multichannel Core Audio interface should be viable when the interface exposes individually addressable output channels. DecayCore does not require a Windows-style 5.1/7.1 virtual device for that path. I don't have any Apple's machines so I cannot test this feature personally.

For your Intel Mac mini: use externally captured measurements/imported IRs, or run the packaged measurement workflow on a supported Apple Silicon Mac.
You can run program direct from python basicly with any machine. Program work's this way almost with any machine. Installation instructions

One practical alternative: if you already have a good main/sub integration outside DecayCore, I recommend measuring the speakers with the subs playing together as the actual playback system, then using normal L/R correction filters only. In that workflow the sub contribution is already included in the left and right measurements. In my testing this approach can give excellent results, provided the crossover, delay, phase/polarity and sub level are already well set before measurement.
For CamillaDSP export: in Direct DAC / bass integration mode, DecayCore can export the 2-in / 3-out CamillaDSP DSP structure: mixer routing, main HPF, sub LPF/HPF, sub FIR, delay, polarity/gain and optional allpass where applicable. You may still need to adapt the device section to your own CamillaDSP/CoreAudio setup.

2. Crossover / HPF / LPF
In Direct DAC sub mode, DecayCore is intended to recommend/apply the main-sub integration automatically: crossover, sub LPF overlap, delay, polarity and gain. The final values are reported in the bass integration results and in zip-package.
LR4 / 24 dB/oct is the sensible default for the main HPF / sub LPF crossover. The subsonic sub HPF is separate and typically around 20 Hz / 12 dB/oct.

3. Custom house curve
Yes. In the Target tab, select `Upload Custom`. The format is a simple text file with frequency and dB pairs, for example:
20 6
100 3
1000 0
10000 -4
Comments after `#` are ignored. DecayCore needs at least two valid points and interpolates the curve.

4. Correction frequency range
Yes. Magnitude correction has userdefined min/max limits. Phase correction has separate transition controls in Advanced mode. Defaults are conservative and mainly focused on the low-frequency/modal region.

5. Sample rate / taps
Your 48 kHz plan is reasonable. 65,536 taps at 44.1 kHz scales to about 72,000 taps at 48 kHz, preserving roughly a 1.5 s FIR time window. The linear-phase latency component is roughly half of that, about 750 ms. Asymmetric/mixed filters has ~85ms delay regardless of tap count.
There is no DecayCore-specific reason that forces 44.1 kHz. 48 kHz is a valid fixed pipeline rate, especially with pro-audio interfaces and 96 → 48 material.

Also, CamillaDSP can select the matching filter for the active samplerate as long as the correctly named filter file exists for that samplerate. DecayCore’s `$samplerate$` filename option is meant for this: the YAML can reference the samplerate token, and CamillaDSP resolves it to the actual runtime samplerate. I suggest to use 'Generate all common filter sample rates' option in DecayCore.


Thank you for your kind feedback.

Sorry for the long questions, actually, I have used your software, and I find it very interesting. I tried to learn and use REW before, but very simple. With REW, I could only create a PEQ filter and apply it to my Wiim Ultra. It is very easy to use with the 2.0 system, but with the 2.1 system and Multichannel DAC, it is totally new to me, so sorry for noob questions. I have a MacBook M2 and a Mac mini Intel, which is planned to be used as a streamer for Camilladsp. I will measure with M2 and apply it to the Mac mini.

Regarding the target curve and the house curve, I don't know why I couldn't load it into MacOS (Safari) like this: (Target curve and phase corr limit are gray and cannot be used)

1782715990542.png

1782716369429.png
 
Last edited:
Thank you for your kind feedback.

Sorry for the long questions, actually, I have used your software, and I find it very interesting. I tried to learn and use REW before, but very simple. With REW, I could only create a PEQ filter and apply it to my Wiim Ultra. It is very easy to use with the 2.0 system, but with the 2.1 system and Multichannel DAC, it is totally new to me, so sorry for noob questions. I have a MacBook M2 and a Mac mini Intel, which is planned to be used as a streamer for Camilladsp. I will measure with M2 and apply it to the Mac mini.

Regarding the target curve and the house curve, I don't know why I couldn't load it into MacOS (Safari) like this: (Target curve and phase corr limit are gray and cannot be used)

View attachment 541761
View attachment 541763
Automatic mode with automatic target selection or adaptive target? Change to basic (very limited range) or advanced mode, then those features will work.
 
Back
Top Bottom