mlochbaum/CrinGraph

[Suggestion] auto-normalisation when an additional comparison point is pinned

Closed this issue · 2 comments

Per title

I'm just not comfortable with normalizing at a particular frequency, so I've looked into alternatives before implementing this.

There are two loudness quantification methods that have any sort of justification:

The ISO spec is derived from measurements of sine waves with different frequencies and matched loudness, while K-weighting is a standard intended primarily for noise. Both have pretty major drawbacks: ISO isn't valid for frequency spectra as opposed to pure tones and K-weighting is kept very simple for hardware implementation and also just looks made up.

Looking at the graphs, I think it has to be the ISO spec. K-weighting peaks around 6kHz, which is pretty suspect for music as opposed to noise, and DF compensation doesn't really fix this but instead gives it a weird dip at 2.5k. FF compensation fits the ISO like a glove, producing a nice smooth family of curves with emphasis on the mids. At low volumes it peaks around 700Hz, and at high volumes it becomes flatter and the peak shifts slowly down to 200Hz. There's a rise after 10kHz which is probably due to the standard makers basically ignoring that region; I'll have to manually damp or kill it.

The obvious interface is to allow the user to set a desired loudness (default 60 phon). This is a total abuse of the standard but I will compute the loudness by RMS averaging the loudness at each frequency, even though the "SPL" there is not comparable to a pure tone. It corresponds to the assumption that the sounds played have the frequency distribution of pink noise. Maybe it would make sense to provide a selector for bright/dark music but that's probably too complicated.

Added ISO-based normalization and turned it on with target 60 phon by default. I've removed the option to reset the normalization because the dataset is normalized with an RMS average which is even worse than mine.

The offset of the y axis is arbitrary because there's no standard correspondence between speaker and in-ear volumes. I've chosen to use FF compensation with the bass (i.e. flat part) set to -7 dB because that looked about right to me. It also ends up putting the FF curve very close to 60dB at 1kHz when set to target 60 phon.