Room correction with Acourate

Ok good to know. Are you using a USB mic (eg. UMIK-1) and ASIO4ALL or something else with a separate outboard sound card? Apparently, a USB mic is not advised with Acourate as the dac/mic won’t be on the same clock …

One more question for you - from your graph, it looks like you set the target curve below any/all of your dips in your measured response. I am assuming that this resulted in a significant digital attenuation adjustment of up to -10db on many parts of the spectrum … resulting in a much quieter overall level? And you have to boost your pre-amp volume by up to 10 DB to get back the same levels as before?

I am concerned about losing dynamic range with a large digital gain adjustment from DRC … though I am still reading up on this and unclear as to whether or not there is really any loss using 24 bit + processing … similar to the headroom adjustment in Roon’s DSP engine … @brian can you provide any input on dynamic range loss from digital attenuation?

Yes, I’m using UMIK-1 and Asio4all. Discussed with @Uli_Brueggeman.
It’s not recommended because of the clock issue. Uli was prepared to help me with correcting for it: he can inspect the result, and if the number of samples from the mic doesn’t match what’s generated it can be re sampled. You can get a separate box to take care of this issue, although it becomes more expensive. A friend has a $500 box, plus mic.

But thinking about it, I realized that clock drift is a reality in my case, because my entire system is digital, all the way to the speakers. So there is no possibility for clock sync in a mic box.

So I went ahead with the UMIK-1, and the results without Uli’s resampling were good, so I decided not to worry about it.

Yes, Acourate reports an overall volume shift of 9.1 dB. (This is how it works, you don’t want to add peaking so the only way to straightening the response is to pull it all down. You can adjust the placement of the target curve.)

In addition I am now using Volume Leveling, which does an average reduction as well. (@Brian mentioned he is using it, it is less important for my kind of music but why not, am doing occasional excursions into new kinds of music inspired by recommendations here.)

Volume control is not a quality problem, because when doing EQ and other stuff the whole DSP engine is running 64-bit floating point.

And my Meridian system is accurate too.

A non-problem today.

Ok thanks for your responses - based on your usage report, I think I may dive in and give this a go. I have previously used Dirac and while the sonic results have been pretty good, the lack of integration with Roon and ongoing glitches have made it frustrating from a usability standpoint.

One last question if I may - did you measure with the Umik-1 pointing forward/horizontally with a 0 degree calibration file, or pointing vertically with a 90 degree calibration file? Dirac seems to suggest that a vertical/diffuse measurement is best for stereo, whereas Acourate suggests a horizontal in-line measurement is best … (maybe goes hand-in-hand with the apparent Dirac approach of averaging diffuse measurements throughout the room vs Acourate trying to get one single precise measurement)

Glad it worked out for you!

Yes, horizontal pointing forward per Acourate’s specifications.
Mitch’s book helps.
Acourate also includes an automated system for adjusting the mic placement with half an inch.

1 Like

EDIT Oops - as @rovinggecko points out, have to run the log sweep recording…

Wrt the process with Acourate:

REW is easier to understand as a program, although I found the results less good.
Acourate produces better results but it is quite difficult to understand as a program. Its process is based on naming conventions for files and directories, and that is not documented anywhere. You can try to reverse-engineer it, but I found that challenging. For example, the initial measurement file is called Pulse48L.dbl and Pulse48R.dbl. Ok, but along the way, the system generates files called Pulse48Lmp.dbl. I think those are Minimum Phase versions, but where do they come from? There is a macro for creating minimum phase filters, but I didn’t run that. Mysterious.

And the fundamental process is difficult to understand too. Acourate is really a tool kit for an expert, very powerful, but if you are not an expert and don’t want to become one, a tool kit is not very useful. So Acourate provides a set of macros that run through the process for doing room correction. Those work pretty well, helped by Mitch’s book. But as always, when a process is wrapped up in a macro (pre-packaged process) that runs over an underlying architecture that you don’t understand, you shouldn’t deviate from the process in the slightest. I had lots of errors in my trial-and-error process when I tried to modify or shortcut the process. I finally succeeded by completely starting over, creating a new work directory, starting afresh with new measurements and going through to the end.

So here goes:

Buy Mitch’s book.

Remove furniture between the speakers and the listening position, and the chair/sofa you sit on.

Place the mic centrally at the right distance and elevation, facing forward horizontally.

Create a new working directory and select it in Acourate.

Set up the output from the computer to your system, and the input from the mic. I used USB on both (as discussed above), and installed the Asio4All driver. Specify the mic calibration file (this involves inverting this curve, as documented in Mitch’s book).

Run Acourate’s mic alignment process (Logsweep/Microphone Alignment) and adjust the mic position until it shows an error of 0 samples. Volume must be pretty high, there is a volume slider, start low and bring it up.

EDIT Run the log sweep recorder, measuring what the room sounds like.
After this, you are done with the mic and the speakers, the rest is processing and analyzing the measurements.

Under the Room menu, run macros 1 - 5 in order. There are some controls you can adjust, I won’t explain them here, Mitch explains.

At the end, you look at the result of the Test Convolution macro, look at the step response and the group delay, and go back and generate new filters with adjusted settings, and iterate until the result is good.

To look at the amplitude response, you can rerun Macro 1 Amplitude Preparation, but it’s tricky, you have to point that macro at the Sweep48L file in the Test Convolution directory, and then when you want to run the whole process again you have to point the system back to the original file in the working directory. This is tricky, I am not quite sure I understand it myself. So I didn’t do that, you don’t have to view the amplitude response as you are iterating, then I did the amplitude preparation once and if I was not happy, I shut down the program and restarted it and ran the macros in order. When I tried to shortcut this process and guess what the program is doing, I failed completely, I think the program tried to correct an already corrected response or something.

When running Macro 4 Filter Generation and iterating, I selected only 48k. Then when I was happy, I ran that macro again and selected all the sample rates, 44 - 384. Acourate generated the filters in files Cor1S44.wav, Cor1S48.wav, etc. I zipped those 8 files up, and then started Roon, went to the DSP specification for convolution, clicked on Browse, and selected that zip file. Roon’s remote sends the zip file to the core and installs it.

Note that Test Convolution is a simulation. I also wanted to measure the actual result. I have described how to do that with REW, Uli has described how to do it in Acourate itself (although that applies the convolution in Acourate, it should be the same result as doing it in Roon because it is just math), and Mitch describes how to do a combination of REW to measure and Acourate to do deeper analysis including step response and group delay (I haven’t done this).

And listen.


Nice overview. I would suggest one essential extra step: after mic align i would add the logsweep.

Let me see if I can add some of my insights to Anders’ great overview.

Mitch’s book is great, there is just one drawback: it is monkey see, monkey do. Though it explains some audio fundamentals well, it doesn’t really explain the workings of the software.

Let me have a go at it:

  1. Set the working directory
  2. Align the mic
  3. Take the log sweep (48k is standard measuring frequency)
  • this will create a file Pulse48L.dbl & Pulse48R.dbl in your working directory
  • and you will see the curves in slots 1 (left) & 2 (right)
  1. Macro 1 ‘smooths’ the measurement out.
  • it uses the file pair you select. Default is your just created measurements, but you can also select another one (for example one you test convolved, from the sub directory). It remembers where you picked it last (in the working directory), so make sure you select the right one.
  • I use the standard settings here (15/15, 23k, psycho)
  • you get a new file Pulse48Lmp.dbl & Pulse48R.dbl and position 1 & 2 get replaced with this smoothed curve
  1. You set the target
  • Mitch’s recommendation is adding a joint at 1k and then trend down -6 db. Putting this under the lowest dip. For me this actually sounds quite ok, but you can make your own flavor here.
  • you create target.dbl file
  • it add the target in curve position 3
  1. You now invert
  • I use 21k limits
  • I aim to stay under above -10 db adjustment
  • this fills curve slots 5&6
  • and adds the Pulse48Linv.dbl & Pulse48Rinv.dbl files
  1. Filter generation time… and the fun begins
  • I straight away check all the sample rates I need as generation doesn;t take that long and I only go to 96k, but, as your settings are remembered, you can easily run it again with more sample rates
  • 64bit stereo wav
  • I typically start with 7/7 7/7 and subsonic 9, no pre-ring compensation
  • running this will generate the Cor wav and dbl files for the respective sample rates
  1. Simulate your filters with
  • it will ask to overwrite curve slots 1&2
  • It creates a new sub directory TestConvolution
  • and will create new ’ measurement’ file there: Pulse48L.dbl and Pulse48R.dbl
  • and load these into slots 1 & 2, replacing your original measurement or previous simulation
  • it gives you an IACC value. I am not putting too much weight on the values, but… you can also go make things worse, so good to keep an eye on.
  1. Evaluate the result
  • I first check the group response to avoid peaks above 100 Hz.
  • If no peaks then I increase the excessphase window values
  • If small group response peaks a little bit of preringing can help, smoothing the vout values.
  • I then will look at the step time alignment
  • before the big peak it should be smooth, if not -> tune with preringing
  • The step should have right curve behind the first peak, using the subsonic filter setting you can influence this (duration and smoothness)
  • I still dont have all the theory behind it sharp, so too much monkey see monkey do. That said, it seems to work :).
  1. Circle back to the filter generation and adjust your settings here.
  • You will overwrite your Cor files with the new settings
  1. Simulate again
  • you overwrite slots 1&2 again
  1. evaluate again and circle back again until happy with phase & time and then check amplitude result
  • go back to macro 1, and instead of the measurement pulse, go to the pulse in the testconvolution subfolder
  • slots 1 & 2 will now show the Pulse48Lmp.dbl file you just created in the testconvolution subfolder
  • remember to check next time you use macro 1 which folder you are using
  1. Zip up the Cor.wav file set and load into Roon
  2. Listen and Judge
  • Scotch and some decent cheese come in handy here
  1. Tuning further
  • I typically copy the previous working directory and strip it, leaving only the original measurement files
  • and try a new tuning angle
  • naming the directory decently helps distinguish between your versions

This is how I current ‘muck things up’. Curious whether others have a better \ other suggestion.


Steve, why is Dirac “out”? JCR

I think Dirac refers to a Dirac pulse, theoretically an infinitely narrow pulse, which is inserted to help Acourate with timing.
Not the Dirac app by another company.

I had Dirac set.

Uli suggested it when we were discussing the clock alignment issue, but as it happened I never used that

@Uli_Brueggeman wrote to me:

please select samplerate 48 kHz. Then load Cor1L48.dbl into curve1, Cor1R48.dbl into curve2. Save as stereo wav with 64bits, e.g. as Cor.wav. Then select a new workspace (to prevent overwriting of existing pulse responses), load Cor.wav as filter in the logsweep recorder and do a new recording. Thus the correction filters will get applied and you see the real behaviour of the filters and not a simulation.

@Jeffrey_Robbins, Dirac was in fact referring to the DRC software Dirac Live.

It’s ‘out’ because I use a RoonReady device, and despite the recent addition of convolution in Roon, it needs software like Acourate that can generate filters for use elsewhere. Dirac only creates proprietary filters for its own processor (apparently a unique combination of IIR and FIR), so to use it in Roon-land, I’d have to go back to direct connection from my Mac, via the Dirac software processor virtual output.

So I’ve been trying to convince myself to try Acourate, but sadly the more I read the less I think I’ll do it (but with huge thanks to @AndersVinberg and @rovinggecko for the above articles which are a great resource).

What the Dirac developers have done is quite remarkable it seems - taking a complex process and semi-automating it as much as possible to achieve the best SQ with the least input and knowledge. I’ll just wait until maybe one day there’s the option to run it via AU/VST, or they output filters (less likely), or go back to a direct connection.

I still enjoy reading what people are getting up to with Acourate, and the results seem great but I just don’t think it’s a process I want to (or have time to) get into.

I know this is an Acourate topic, but there was some discussion about the technical aspects of DRC and convolution. I came across a few Dirac documents which are quite interesting reading and relatively easy to digest. They’re Dirac specific but I’m sure the principle is the same for all more or less.

Here and a more technical one here

Jeffrey, I misunderstood your question: you were talking about Dirac the product, there is also a Dirac option in Acourate, totally unrelated.

Steve answered my actual question and you educated me. All good. Thanks. JCR

Yes, that is what I mentioned as well. However, you will see the convolution engine of Acourate, not the convolution engine of Roon.
Doubt there is a big difference between the convolution engine’s, but there could be.

Yeah. Math is math, but I have seen too much, want to see the actual implementation.

Roon’s convolution engine can load complex configurations that include many filters, routing, delays, mixing rules, etc. Lots of design work to visualize those effectively…probably not really our place.

That said, expensive tools like MATLAB aren’t needed to investigate what an FIR filter is doing. Most of the same functionality is available in scipy, which is freely available–and often functions are named the same thing.

There is no equivalent to fvtool, but the underlying functions that you use to figure out frequency/phase response (freqz and angle) are available, along with the necessary visualization tools.

[Source Code That Generated These]

1 Like

I’m looking into Accurate and Dirac.

Is there a basic difference of where Dirac uses an approach to measure and correct for multiple spaces in a room because as they put it, “a perfect correction in one single point most always implies degradation everywhere else.” And Acourate focuses on one ideal listening position.

Does the Dirac multi position approach produce a more even, and compromised, response? Does the Accurate approach produce a more ideal single listening position at a greater compromise to the rest of the room?

This specifically could apply to my room, I think, because it is a large workspace where I’m moving around a lot.

I have just received a beta version of Dirac, which should allow to produce the proper plugins for Roon.
It might take a bit to come back with results.