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

GSonic Reference – Free Stereo Room Correction Tool (Measurement + FIR Export)

I found out what was wrong, the measurements were completely unusable, and thus the generated convolution files were bogus.

Can anyone provide some guidance? The test sweeps are clearly audible, so are the white noise test. The microphone works for REW on the same computer on Win 11. But GSonic doesn't seem to pick up signal with it.

And more oddly, with the output at -0 dB, both Peak and RMS are about 20 dB higher than with the output at -30 dB.

2VyafCP.png
 
I found out what was wrong, the measurements were completely unusable, and thus the generated convolution files were bogus.

Can anyone provide some guidance? The test sweeps are clearly audible, so are the white noise test. The microphone works for REW on the same computer on Win 11. But GSonic doesn't seem to pick up signal with it.

And more oddly, with the output at -0 dB, both Peak and RMS are about 20 dB higher than with the output at -30 dB.

2VyafCP.png
Did you give exclusive access to Umik and SMSL in WIndows sound settings? Are they both set to 48kHz?
Also check gsonic_debug.log file to see the full Wasapi enumeration on your PC.
 
I found out what was wrong, the measurements were completely unusable, and thus the generated convolution files were bogus.

Can anyone provide some guidance? The test sweeps are clearly audible, so are the white noise test. The microphone works for REW on the same computer on Win 11. But GSonic doesn't seem to pick up signal with it.

And more oddly, with the output at -0 dB, both Peak and RMS are about 20 dB higher than with the output at -30 dB.
The -120ish dB is a strong indicator that nothing at all is measured and you're just capturing the digital noise floor.

Have you tried dis- and then reconnecting the UMIK's USB?
I sometime had this issue in REW, when the connections was faulty

What do your windows settings say? Are you using +0dB boost or is the mic turned down by accident?

1775914338588.png
 
  • Like
Reactions: OCA
Did you give exclusive access to Umik and SMSL in WIndows sound settings? Are they both set to 48kHz?
Also check gsonic_debug.log file to see the full Wasapi enumeration on your PC.

I tried both with exclusive access and not allowing exclusive access. Both at 48 kHz

This is the log:

GSonic starting...
1. Calling glfwInit...
2. glfwInit OK
3. Creating window...
4. Window created OK
5. DPI scale: 1.25
6. ImGui configured, initializing backends...
7. Constructing MeasureApp...
7a. MeasureApp constructed, calling init()...
Loading settings...
Enumerating audio devices...
Enumerating ASIO drivers...
Enumerating RtAudio devices...
Found 9 RtAudio devices
No ASIO drivers found, defaulting to RtAudio backend
Generating measurement signal...
Init complete.
8. MeasureApp initialized OK. Entering main loop.
Sweep ready: 14.1s signal, 523193 sample inverse filter
[initBackend] Out: 'SMSL USB Audio (2- SMSL USB AUDIO)' id=132 (2 ch), In: 'Microphone (Umik-1 Gain: 18dB)' id=137 (2 ch)
Playing 3s white noise...
Peak: -122.9 dBFS | RMS: -140.7 dBFS
Warning: Level very low
[initBackend] Out: 'SMSL USB Audio (2- SMSL USB AUDIO)' id=132 (2 ch), In: 'Microphone (Umik-1 Gain: 18dB)' id=137 (2 ch)
Playing 3s white noise...
Peak: -106.4 dBFS | RMS: -128.9 dBFS
Warning: Level very low
The -120ish dB is a strong indicator that nothing at all is measured and you're just capturing the digital noise floor.

Have you tried dis- and then reconnecting the UMIK's USB?
I sometime had this issue in REW, when the connections was faulty

What do your windows settings say? Are you using +0dB boost or is the mic turned down by accident?

View attachment 523839

This is playing music at ~80 dB volume. As I said earlier, it works with REW.

kNj5UCy.png
 
I tried both with exclusive access and not allowing exclusive access. Both at 48 kHz

This is the log:

GSonic starting...
1. Calling glfwInit...
2. glfwInit OK
3. Creating window...
4. Window created OK
5. DPI scale: 1.25
6. ImGui configured, initializing backends...
7. Constructing MeasureApp...
7a. MeasureApp constructed, calling init()...
Loading settings...
Enumerating audio devices...
Enumerating ASIO drivers...
Enumerating RtAudio devices...
Found 9 RtAudio devices
No ASIO drivers found, defaulting to RtAudio backend
Generating measurement signal...
Init complete.
8. MeasureApp initialized OK. Entering main loop.
Sweep ready: 14.1s signal, 523193 sample inverse filter
[initBackend] Out: 'SMSL USB Audio (2- SMSL USB AUDIO)' id=132 (2 ch), In: 'Microphone (Umik-1 Gain: 18dB)' id=137 (2 ch)
Playing 3s white noise...
Peak: -122.9 dBFS | RMS: -140.7 dBFS
Warning: Level very low
[initBackend] Out: 'SMSL USB Audio (2- SMSL USB AUDIO)' id=132 (2 ch), In: 'Microphone (Umik-1 Gain: 18dB)' id=137 (2 ch)
Playing 3s white noise...
Peak: -106.4 dBFS | RMS: -128.9 dBFS
Warning: Level very low


This is playing music at ~80 dB volume. As I said earlier, it works with REW.

kNj5UCy.png
The mic is not picking up anything acoustic, the differences you see is just crosstalk bleeding.

Since it works with REW, the only possibility that comes to my mind is blocked Windows mic access.

Settings → Privacy & Security → Microphone:

Microphone access: must be On
Let desktop apps access your microphone: must be On
 
The mic is not picking up anything acoustic, the differences you see is just crosstalk bleeding.

Since it works with REW, the only possibility that comes to my mind is blocked Windows mic access.

Settings → Privacy & Security → Microphone:

Microphone access: must be On
Let desktop apps access your microphone: must be On
This is right as Gsonic is playing white noise. But Gsonic isn't picking up anything. Still getting "Warning: Level very low"



iKi05kG.png
 
This is playing music at ~80 dB volume. As I said earlier, it works with REW.

kNj5UCy.png
More of a side note, but you wouldn't want to boost the UMIK-I level, cause this will give wrong SPL values.
 
Added advanced HF correction options (3 new parameters under the collapsible Advanced section on the Generate tab):
  • Correction Strength (0.0-1.0) — Scale room correction intensity. Bass correction always stays at 100%; the strength only fades above the room's transition frequency. Default: 1.0 (full correction, same as before).
  • HF Correction Limit (Hz) — Fade out all EQ above this frequency for a true bypass. Useful for electrostatic panels where dipole behavior should not be corrected. Default: Full Range.
  • HF Phase Limit (Hz) — Bypass phase correction above this frequency, preserving the speaker's native transient response. Default: Full Range.
Sorry for asking again.
As these are options for advanced configuration it would be helpful if you could elaborate a bit about what exactly these options do.
Maybe I missed it, but how does the app know/calculate the transition frequency?
I tested with measurements I coughed up from my Macbook with earphone mic (amazing experience BTW as first I was reluctant from being directed to terminal, but the everything went amazingly smooth, great work!).

Then I generated filters with target "Auto" [meaning -1db/oct] and "standard"settings (strength 1.00 and full range) and in comparison with different "advanced" options, setting "Strength" to 0.00 and limiting EQ and/or Phase to below 300Hz.

Turns out that setting "Phase Limit" to 300Hz results in the filter significantly modifying GD/phase up to 600Hz.
Setting "Correction Limit" to 300Hz results in the filter modifying magnitude up to about 550Hz.

Setting strength to 0.00 and "Correction Limit" to 300Hz results in a filter with a tilt that will darken (instead of "correcting") the sound. [This tilt does not happen with "not Dr Toole" as target, whatever that means]

In this crude case the point where filters with strength 1.00 and from Strength 0.00 deviate from another is around 125Hz.
Is this a fixed value?

SPL2.png
GD2.png
 
This is right as Gsonic is playing white noise. But Gsonic isn't picking up anything. Still getting "Warning: Level very low"



iKi05kG.png
That Windows host process using the mic simultaneously does not look normal (at least for Windows 10). Something else might be using the mic in the background which may be causing the issue. GSonic uses rtAudio for Wasapi backend which seems to have issues with exclusive mode in Win 11 so you will need to find out and make sure your mic is not shared with anything else during measurements. Or try installing ASIO4All and use ASIO.
 
The mic is not picking up anything acoustic, the differences you see is just crosstalk bleeding.

Since it works with REW, the only possibility that comes to my mind is blocked Windows mic access.

Settings → Privacy & Security → Microphone:

Microphone access: must be On
Let desktop apps access your microphone: must be On
More of a side note, but you wouldn't want to boost the UMIK-I level, cause this will give wrong SPL values.
Thanks to both of you, I found the culprit, it was Windows sound enhancements, which REW seems to discard automatically with its Exclusive Mode, but that Gsonic is still not playing nice with.

Is this the correct EQ APO setting? I think I'm loosing a decent amount of SPL with the convolution files loaded. Screenshot is slightly wrong, left is selected for the top chanel filter, right for the bottom.

u6bxehn.png


And also, this a before and after measurement with the auto - 1dB curve. Not convinced it is better I will have to try other curves.

sSlWHlP.png


Another thing @OCA, could you add a setting for a delay before the sweeps? As is it, I'm just sitting on the ground trying to minimize my profile before the sweeps start instead of properly walking to a place I don't interfere with the speakers.
 
Last edited:
Sorry for asking again.
As these are options for advanced configuration it would be helpful if you could elaborate a bit about what exactly these options do.
Maybe I missed it, but how does the app know/calculate the transition frequency?
I tested with measurements I coughed up from my Macbook with earphone mic (amazing experience BTW as first I was reluctant from being directed to terminal, but the everything went amazingly smooth, great work!).

Then I generated filters with target "Auto" [meaning -1db/oct] and "standard"settings (strength 1.00 and full range) and in comparison with different "advanced" options, setting "Strength" to 0.00 and limiting EQ and/or Phase to below 300Hz.

Turns out that setting "Phase Limit" to 300Hz results in the filter significantly modifying GD/phase up to 600Hz.
Setting "Correction Limit" to 300Hz results in the filter modifying magnitude up to about 550Hz.

Setting strength to 0.00 and "Correction Limit" to 300Hz results in a filter with a tilt that will darken (instead of "correcting") the sound. [This tilt does not happen with "not Dr Toole" as target, whatever that means]

In this crude case the point where filters with strength 1.00 and from Strength 0.00 deviate from another is around 125Hz.
Is this a fixed value?

View attachment 523852 View attachment 523853
I am impressed that using a crude macbook mic, you've reverse-engineered the dynamic safety mechanisms of the app without ever seeing the code :)

When you set strength to 0, the app skips the tiny room-reflection EQ but still applies the target curve you chose. The default curve with a downward –1 dB/oct slope naturally sounds darker. If you pick a flat target like Toole instead, there’s no slope, so the tilt disappears. In short, it’s simply following the curve you selected.
You can’t sharply cut off an FIR filter at exactly 300 Hz without nasty artifacts like ringing. Instead, the algo applies a 1-octave raised-cosine fade and reaches full bypass by 600 Hz. 125 Hz in your case is not a fixed number. The algorithm finds your room’s transition frequency by looking at how coherent the measurements are in 1/3-octave bands. It then uses 100% correction below that frequency and gently fades to your chosen strength above it. Because you measured with a laptop mic (mic array probably), the coherence dropped around 126 Hz, so the system did full correction below 126 Hz and eased off above. Everything is automatic and adaptive and majority of users should never need to tweak advanced settings.

I’d recommend generating filters for your own real system, listening to them, and then we can discuss based on what you'll hear.

PS That curve is called “not Dr Toole” because it’s widely listed as “Dr Toole” in many target curve collections. However, after Mr. Toole himself told me he never actually designed a target curve, I slightly changed the name ;)
 
Thanks to both of you, I found the culprit, it was Windows sound enhancements, which REW seems to discard automatically with its Exclusive Mode, but that Gsonic is still not playing nice with.

Is this the correct EQ APO setting? I think I'm loosing a decent amount of SPL with the convolution files loaded. Screenshot is slightly wrong, left is selected for the top chanel filter, right for the bottom.

u6bxehn.png


And also, this a before and after measurement with the auto - 1dB curve. Not convinced it is better I will have to try other curves.

sSlWHlP.png


Another thing @OCA, could you add a setting for a delay before the sweeps? As is it, I'm just sitting on the ground trying to minimize my profile before the sweeps start instead of properly walking to a place I don't interfere with the speakers.
"L" should have been active in the below:

1775922557021.png

Noted your suggestion on sweep delayed start!
 
Crazy fast!

the strength only fades above the room's transition frequency
And how is that determined?

EDIT: Sorry some googling yielded that means Schroeder Frequency, found some REW HowTo's to determine that for each space.

What should it be set for outdoors? Or is Gsonic not applicable there?
 
Last edited:
"L" should have been active in the below:

View attachment 523881
Noted your suggestion on sweep delayed start!
Yes, I took the wrong screenshot, but corrected the thing before I listened and measured. The measurement shows the expected result I think.

Another suggestion, if you could attach a visual representation or a text description of the curves, that would be nice
 
if you could attach a visual representation or a text description of the curves, that would be nice
Drag and drop the target curve txt files onto REW and you can see them.
 
What should it be set for outdoors?
I don't think you will need any filters if you are using the speakers truly outdoors unless they are really bad speakers.
 
When you set strength to 0, the app skips the tiny room-reflection EQ but still applies the target curve you chose. The default curve with a downward –1 dB/oct slope naturally sounds darker. If you pick a flat target like Toole instead, there’s no slope, so the tilt disappears. In short, it’s simply following the curve you selected.
I understand. But normally I would not expect that a "target curve" will turn into a "filter curve" as typically the -1db/oct tilt is more or less the (smoothed) effect of the room already. A tilted FR at the listening position resulting from a flat on axis. Now on axis gets a tilt.
The algorithm finds your room’s transition frequency by looking at how coherent the measurements are in 1/3-octave bands. It then uses 100% correction below that frequency and gently fades to your chosen strength above it. Because you measured with a laptop mic (mic array probably), the coherence dropped around 126 Hz, so the system did full correction below 126 Hz and eased off above. Everything is automatic and adaptive and majority of users should never need to ever tweak advanced settings.
Ok, thanks for the explanation.
I would appreciate an option to manually input a "transition" frequency to shape the "Strength"-function.
This would perhaps be a nice possibility to implement the "Toole method" of equalising below transition (+ a taper of an octave) and use a good speaker with flat on axis (if necessary EQed from anechoic measurement) above that.

IMHO in the range above the "Correction Limit" the filter should be flat and thereby revert to the "natural" response of the room (Even when a non-flat target is chosen).
Now the algorithm seems to behave in this range as if the measured FR is (perfectly) flat and imposing the chosen "target" as filter. This will convolve the real room response with a modelled/preferred room response. This will systematically differ from either.
PS That curve is called “not Dr Toole” because it’s widely listed as “Dr Toole” in many target curve collections. However, after Mr. Toole himself told me he never actually designed a target curve, I slightly changed the name ;)
I know about this misunderstanding of this "target" that in fact is a result. But I still do not know what this curve actually looks like in the app. Is there somewhere to look the targets up?
EDIT: Found it in your answer to @kharan

I would be much more inclined in going through the motions of generating filters and installing convolution if I knew more about what is going on. I am getting there ;-)
 
Last edited:
in the range above the "Correction Limit" the filter should be flat and thereby revert to the "natural" response of the room
I was a firm defender of exactly that up until very recently and you will find that my older tools (a lot of A1 Evo's) strictly do not correct above Schroeder's. but I developed new algorithms for HF correction for this tool which seem to work great so far based on user feedback and my own auditions. I am sure you will be convinced when you try.

if necessary EQed from anechoic measurement
This would be a nice option to test.
 
GSonic Reference v1.0.21 released for all platforms.

Bug fix: Fixed measurement dropouts on macOS when measuring the second channel (FR). macOS CoreAudio was entering standby on the silent output channel, causing audio glitches near the end of the sweep. The fix adds inaudible dither (-100 dBFS) to the idle channel during playback to keep the audio engine active.

No other change from v1.0.20
 
Back
Top Bottom