Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: Dynamic Loudness Control (Read 13816 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Re: Dynamic Loudness Control

Reply #25
@Rollin , man, you're awesome. Huge thanks for your help and advice.
I have followed your instructions from A to Z and everything seems to work perfectly ! :D
I am familiar with Audacity so the whole operation was easy.
Now I only need to repeat the EQ operation with the same "Unitpulse2K.wav" start impulse file for every Fletcher-Munson curve.
I am very grateful. In this topic I have learned how to achieve Dynamic Loudness, but also how to use a resampler and a convolver ! :D

BTW you said that the impulse must be of the same sample rate and channel count as the signal that is processed. A majority of my files are of course 16/44.1 (mostly EAC-ripped CDs), but I have other sample rates up to 24/192. Which raises two questions :
1. Should I create a single set of impulse files in the highest possible sample rate rather than in 44.1 ? Or should I create several sets of impulse files ? (44.1, 48, 88.2, 96, 176.2, 192)
2. The resamplers (dbpoweramp/SSRC and PPHS) seem to go "only" to 96 KHz. How could I handle 192 KHz data ?

If it's of any help, my foobar outputs to a USB DAC (Topping E30) that can theoretically go up to 768 KHz (even if absolutely nobody can hear the difference, lol).


Re: Dynamic Loudness Control

Reply #27
1. Should I create a single set of impulse files in the highest possible sample rate rather than in 44.1 ? Or should I create several sets of impulse files ? (44.1, 48, 88.2, 96, 176.2, 192)
To simplify, i would just use resampler before convolver and resample everything to 44.1. There will be no audible differences.
If you are going to create impulses for all samplerates, you can use foo_dynamicdsp to automate switching. https://hydrogenaud.io/index.php?topic=96094.0 https://hydrogenaud.io/index.php?topic=96094.msg956094#msg956094

2. The resamplers (dbpoweramp/SSRC and PPHS) seem to go "only" to 96 KHz. How could I handle 192 KHz data ?
Use keybooard and enter any samplerate manually.
But i would use SoX resampler because it is fastest.

BTW, you can also try to draw curves in MathAudio Room EQ - https://mathaudio.com/room-eq.htm

Re: Dynamic Loudness Control

Reply #28
Maybe I'm getting lost here. Why should I resample after all ?  O:)  Maybe I should just make sure to get all the necessary impulse files, in all sample rates and channels, and never have to resample. It would be a bit of work, but then I wouldn't have to resample at all. Wouldn't that be better ?

If I created impulses for all samplerates (I know, no audible difference but at least it could be intellectually satisfying to have everything work), should I always use the same "Unitpulse2K.wav" source file? Isn't it only 44.1 KHz? Aren't there other impulses for higher frequencies?

BTW if I absolutely had to resample, my concern wouldn't be about a fast resampler, since my PC is recent and has a lot of computing power.
My concern would be about (1) best audio quality, (2) no audible glitches between songs, (3) easy to set up, and (4) 192 KHz compatibility.
Which resampler should I use then ? dbpoweramp/SSRC ? Ivcql's SoX ? Or the more recent Case's SRC ?

Thanks for the DRC part, that will be useful in a few months when I get my new active monitors.

Re: Dynamic Loudness Control

Reply #29
Of course you can create impulses for all samplerates.

You can resample this impulse to needed samplerate and use it. Or, if you want absolutely perfect impulses for all samplerates, you can create them in Audacity.

BTW if I absolutely had to resample, my concern wouldn't be about a fast resampler, since my PC is recent and has a lot of computing power.
My concern would be about (1) best audio quality, (2) no audible glitches between songs, (3) easy to set up, and (4) 192 KHz compatibility.
Which resampler should I use then ? dbpoweramp/SSRC ? Ivcql's SoX ? Or the more recent Case's SRC ?
1) No audible differences between all these resamplers. 2)No audible glitches on playback with all these resamplers (although glitches on tracks transition are possible on conversion (when using Converter) with dbpoweramp/SSRC) 3) All three are easy to set up 4) All are 192 kHz compatible. So why not use fastest? And SoX can have higher bandwidth than SRC (with 99% it is almost as high as dbpoweramp/SSRC) and at the same time it has less ringing than dbpoweramp/SSRC.

Thanks for the DRC part, that will be useful in a few months when I get my new active monitors.
Did you actually read description of foo_dynamicdsp? It has nothing to do with DRC. It is to automate switching of DSP depending on properties of playing file.

Re: Dynamic Loudness Control

Reply #30
Did you actually read description of foo_dynamicdsp? It has nothing to do with DRC. It is to automate switching of DSP depending on properties of playing file.
Haha, I was only talking about https://mathaudio.com/room-eq.htm which is the other link you provided. I didn't say anything about foo_dynamicdsp, and it will indeed be very helpful to automate switching.  ;)
BTW, the original foo_dynamicdsp by popatr doesn't seem to be available anymore, but there's a v2 fork by Mario66 that can be found here : https://hydrogenaud.io/index.php?topic=108904.0

So why not use fastest? And SoX can have higher bandwidth than SRC (with 99% it is almost as high as dbpoweramp/SSRC) and at the same time it has less ringing than dbpoweramp/SSRC.
I can use SoX, no problem :) I was just wondering : what's the use of Case's SRC then ? He developed it more recently than SoX, so if it's slower than SoX and with less performance, I don't understand...

About impulses for all sample rates, I can create them in Audacity (and then avoiding all resampling). I just have a question about the number of samples. For "Unitpulse2K.wav", there are 4096 samples and the impulse is of course in the middle (sample #2048). But why 4096 ? And is that number related to the sample rate ? Should I double it if I double the sample rate ? I'm sorry, I'm new to convolver and I haven't found any info on that.

Re: Dynamic Loudness Control

Reply #31
I guess that for simple EQ 4096 samples is enough for any samplerate. If you will multiply quantity of samples, there will be no negative effects for sure. But, probably, no positive effects too.

Re: Dynamic Loudness Control

Reply #32
OK, so in that case I just have to open "Unitpulse2K.wav" in Audacity, change the sample rate, and export as wav32. Seems easy. :)

Re: Dynamic Loudness Control

Reply #33
so in that case I just have to open "Unitpulse2K.wav" in Audacity, change the sample rate, and export as wav32.
This way you just resample impulse. So don't forget to set Audacity Sample Rate Converter to Best Quality

Re: Dynamic Loudness Control

Reply #34
Oh, you're right ! That wasn't good at all !!  :o
I had the settings to Best Quality and No Dither, but still the results weren't accurate.
So I have redone all the pulses by hand, from scratch. These should really be accurate, feel free to check. :)

Re: Dynamic Loudness Control

Reply #35
Looks OK.

Re: Dynamic Loudness Control

Reply #36
Great! So now the final step is that for every sample rate (44.1, 48, 88.2...), I have a set of DSP presets (for 0dB, -5dB, -10dB...), based on the relevant convolver EQ files corresponding to the equal loudness curves.
So e.g. if I have 6 frequencies and 9 volume steps, I will need 54 convolver EQ files. It's a lot, but I can do it.
So if I play a 48 KHz song @ -5 dB, foobar would switch automatically to the corresponding DSP preset (48 KHz and -5 dB), without resampling. The signal would then be output in WASAPI to USB, and the external DAC would take care of it.
I know, it may seem crazy, but it should work.

Now I just have to figure how to use Dynamic DSP and the JScript Panel script together. I still need them both, right ?
The JScript Panel script requires presets to be called "dsp 0", "dsp -5" and so on.
But I need a "dsp 0" for 44.1, plus another "dsp 0" for 48, and so on.
How can I achieve this ?

I know that with Dynamic DSP I can do something like this, but it's not enough :

Code: [Select]
$if2([%trackdsp%],$ifgreater(%sameplerate%,191999,'192 preset',$ifgreater(%sameplerate%,176399,'176 preset',$ifgreater(%sameplerate%,95999,'96 preset',$ifgreater(%sameplerate%,88199,'88 preset',$ifgreater(%sameplerate%,47999,'48 preset',$ifgreater(%sameplerate%,44099,'44 preset','Low preset')))))))

Re: Dynamic Loudness Control

Reply #37
https://youtu.be/F9Ma9veA4jQ

And so on...

By the way, i found that version of Dynamic DSP by Mario66 is not compatible with fb2k 1.6, but original version by popatr is compatible.

Re: Dynamic Loudness Control

Reply #38
Amazing. Simpy amazing. Now I finally understand. Huge thanks!!! :D
You, my friend, have rightfully earned the "employee of the month" award for the "most helpful comments" in foobar's forum ! Bravo ! ;)



BTW, what if a samplerate isn't in the list ? (e.g. some old 22050 Hz file that I just don't want to handle DSP-wise, but that I still want to play). Is there a code to say "if %samplerate% isn't in the list, then just play without any DSP stuff" ?

Re: Dynamic Loudness Control

Reply #39
If samplerate is not in the list, then no DSP will be applied.


Re: Dynamic Loudness Control

Reply #41
Great ! Thanks to both of you :)

Now I'm only missing one thing : either a table with the numeric values of the Fletcher-Munson curves, or at least a hi-res Fletcher-Munson diagram.
I have found a lot of diagrams online, but they are all low-res, very pixelated, with non-parallel axes if we look accurately, and of course no numeric values.
I suppose the original Fletcher-Munson study has some numeric values, but I haven't been able to find it yet.
Is there some serious source for such material ?
Once I can get such material and create all the relevant EQ files, I'll be happy to share them here for future usage. ;)

PS : I have read about the ISO 226-2003 standard, but I'm not convinced at all (there's too much controversy around it), so I'd prefer to stick with good old Fletcher-Munson.

Re: Dynamic Loudness Control

Reply #42
At least for ISO curves you can find this

Re: Dynamic Loudness Control

Reply #43
Yes, I've had it already for a few days. It's really nice. Too bad it's only for the ISO curves, they could at least have compared ISO with Fletcher-Munson.
I'm really surprised that we can't find any hi-res info on Fletcher-Munson. There must be a way.

Re: Dynamic Loudness Control

Reply #44
For the record, it took me nearly a month but I finally found a way. With the help of some knowledgeable folks at ASR (credits to them) and some clever work, we came up with this (see attached Excel file).

FINALLY, some real accurate numerical data on Fletcher-Munson curves. It's a good start.

Problem solved !  :D

Re: Dynamic Loudness Control

Reply #45
Here's a short addendum about Convolver.

@Rollin , you always suggested that I create basic pulses of for example 4096 samples, with the pulse in the middle (sample #2048).
However, I have been to the Inner Fidelity website, where the guy offers not only PEQ settings but also ready-to-use convolver wavs. I've looked at one of them with Audacity, and the pulse is situated right at the beginning !  :o  So I don't understand : who's right, who's wrong, and why ?

Here's an attached wav file from Inner Fidelity. Thanks.

Re: Dynamic Loudness Control

Reply #46
For such simple task as equalization, both kinds of impulses will work OK. For some complex effects (when you need to add some pre-echo, for example), impulses that start right at beginning will not be suitable.
Also, be careful, you don't know how precisely was these impulses created  - https://hydrogenaud.io/index.php?topic=119860.msg988070#msg988070 (i only compared impulses for m50, though. do you need picture for proof?)


Re: Dynamic Loudness Control

Reply #48
I have tried to check the frequency response of my elderly AKG550 using Esser Audio Test Tone Generator and my own ears. The corrective filters I have downloaded seem to be way off for my ears.

 

Re: Dynamic Loudness Control

Reply #49
Also, be careful, you don't know how precisely was these impulses created
Yes, I remember your post. And don't worry, I won't use their wav files. I intend to create mine, as precisely as possible, following your instructions.  ;)

Curve from Oratory. Red - iir filter from foo_dsp_effect, orange - ffmpeg parametric eq, yellow - QRange, green - impulse from https://github.com/jaakkopasanen/AutoEq/tree/master/results
Wow. I see your curves, but I'm not sure I understand them well. You mean that red = the "theoretic ideal" curve ?
Do you mean that QRange is really bad then ? I'm very surprised !

So I still don't know what would be the best way to go. I was leaning towards foo_convolver, but I was using QRange to generate the impulse responses. So if QRange not good, then I'll have to use another PEQ (or not use foo_convolver at all).

There's another PEQ VST that I could try with Audacity. It's DDMF IIEQPro ( https://ddmf.eu/iieqpro-equalizer-plugin/ ).
I could also try Toneboosters Morphit ( https://www.toneboosters.com/tb_morphit_v1.html ), but it's not a VST but an app.

Would you like me to generate an impulse response with IIEQPro and send it to you, so you could check it against the "theoretic ideal" ? What would you do ?
As always, I will listen to your suggestions.