FusionDsp : the complete Dsp center for Volumio3!

:+1:

As you can see, the difference is considerable. I study it better and listen. This is the maximum correction, the start of the function is set in 80/100. It’s not a wow effect like the original version, but for me it’s better tolerable in the long run. I’ll test for sure. If there was ever a version that sets the high band gain individually as well as where the end of the correction is, ie probably where the useful signal is no longer heard, it would be perfect (the starting point of the correction work is already in FusionDSP). I’ll try to think about the shape of the curve, I can’t comment on that right now. I think the only guide is ISO 226: 2003.
I’m going to test !!!

Greetings, if you have the time, here is an accurate overview of the ISO 226: 2003 standard.
http://www.macfreek.nl/memory/images/Equal-loudness_contours.xlsx

With the file we can easily read:
If we want to reduce the level from 80 Phons / 1kHz = 80dB to the level of 40dB then we reduce it roughly as follows:
20Hz - 19.1dB
100Hz - 28.1dB
250Hz - 33.9dB
400Hz - 36.7dB
1000Hz - 40.0dB
2000Hz - 41.4dB
5000Hz - 41.6dB
8000Hz - 40.4dB
10000Hz - 37.5dB
12500Hz - 33.9dB

The result is surprising, but if we realize how quiet it is, we come to the need for a dynamic volume change. It is a question of opinion, taste and habit. So what each of us actually imagines from the quiet reproduced sound and the Loudness function, this function should not be confused with a dynamic expander. However, if we succeed and we are a little lucky, it will allow us to hear in peace at home about the same ratio of low, middle and high tones as heard by the sound engineer in the studio at the working volume of “his” Genelec 1236A. :grinning:

What do you think about this feature and what shape should it have? I like to read opinions and experiences.

I present as one of the possible solutions with the help of ISO 226: 2003, it is a solution based on measurement, it is functional. The question of how it will be liked. I could imagine it, at night, in silence it works nicely, during the day it needs to be strengthened and I can’t, the curve is not dynamic in my case, of course, I don’t know how to do it.
Have a nice day and I look forward to your opinions
I apologize for the English, I use the translator and I also thank Google …

Thanks Petr

Thank for your post. I read it carefully. And I don’t if I want/can/know how to implement it in the plugin. I can try to improve the shape though and add more user settings. But I’m afraid it may be confusing for most of them…
But I’m open to any suggestion :wink:

Attempt to mimic the ISO curve for -40dB / 1kHz SPL: :laughing:

//------volume loudness section—

  let loudness = self.config.get('loudness')
  if (loudness) {
    self.logger.info('Loudness is ON ' + loudness)
    var composedeq = '';
    var pipelineL = '';
    var pipelineR = '';
    composedeq += '  highshelf:\n'
    composedeq += '    type: Biquad\n'
    composedeq += '    parameters:\n'
    composedeq += '      type: Highshelf\n'
    composedeq += '      freq: 10000\n'
    composedeq += '      q: 1.0\n'
    composedeq += '      gain: ' + (loudnessGain * 0.28).toFixed(2) + '\n'
    composedeq += '\n'
    composedeq += '  lowshelf:\n';
    composedeq += '    type: Biquad' + '\n';
    composedeq += '    parameters:' + '\n';
    composedeq += '      type: LowshelfFO\n';
    composedeq += '      freq: 75\n';
    composedeq += '      gain: ' + loudnessGain + '\n';
    composedeq += '' + '\n';
    composedeq += '  peakloudness:\n';
    composedeq += '    type: Biquad' + '\n';
    composedeq += '    parameters:' + '\n';
    composedeq += '      type: Peaking\n';
    composedeq += '      freq: 2000\n';
    composedeq += '      q: 0.9\n';
    composedeq += '      gain: ' + (loudnessGain * -0.04).toFixed(2) + '\n';
    composedeq += '' + '\n';
    composedeq += '  peakloudness2:\n';
    composedeq += '    type: Biquad' + '\n';
    composedeq += '    parameters:' + '\n';
    composedeq += '      type: Peaking\n';
    composedeq += '      freq: 4000\n';
    composedeq += '      q: 0.8\n';
    composedeq += '      gain: ' + (loudnessGain * -0.036).toFixed(2) + '\n';
    composedeq += '' + '\n';
    result += composedeq
    //-----loudness pipeline

------ actions tools------------

FusionDsp.prototype.playToolsFile = function (data) {
const self = this;
self.config.set(‘toolsfiletoplay’, data[‘toolsfiletoplay’].value);
let toolsfile = self.config.get(“toolsfiletoplay”);
let track = toolspath + toolsfile;
self.commandRouter.replaceAndPlay({ uri: track });
self.commandRouter.volumioClearQueue();
};

FusionDsp.prototype.sendvolumelevel = function () {
const self = this;

socket.on(‘pushState’, function (data) {
let loudnessVolumeThreshold = self.config.get(‘loudnessthreshold’)
let loudnessMaxGain = 26
let loudnessLowThreshold = 30
let loudnessRange = loudnessVolumeThreshold - loudnessLowThreshold
let ratio = loudnessMaxGain / loudnessRange
let loudnessGain

What do you think about it?
Thank you
Peter

Nice! I can’t test now but curve looks like Iso.
How does it sound for you?

I think it works, but it’s different. The problem is caused by unequal modular recordings, when the recording is weak so it needs to be amplified and at that moment the Loudness effect is weaker, it’s logical, it would want more controls …
But if the recording is good and well modulated, then even quiet listening is full of frequency and you can hear even 29Hz (I measured the spectrum and listened at night) and I would consider that a success. But it only works as Loudness, it does not serve to highlight the faint high tones that otherwise disappear in the noise of the day. At night, in complete silence, it’s great in my opinion. However, as I wrote, people may have different ideas about this feature. The whole Hi-Fi has been revolving around heights for the last 30 years, so the more heights the more Hi-Fi. I’m elsewhere.
In any case this is Loudness based on research, not some Loudness entirely fictional, without any justification, as can be seen with one unnamed brand producing DSP.
Peter

Yes it works, but what a massive attenuation!
IMHO, loudnessLowThreshold = 30 is to high. Effect is max below 30. I set it to 5.
I also adjusted a bit values for filters

 composedeq += '  highshelf:\n'
        composedeq += '    type: Biquad\n'
        composedeq += '    parameters:\n'
        composedeq += '      type: Highshelf\n'
        composedeq += '      freq: 10000\n'
        composedeq += '      q: 0.8\n'
        composedeq += '      gain: ' + (loudnessGain * 0.28).toFixed(2) + '\n'
        composedeq += '\n'
        composedeq += '  lowshelf:\n';
        composedeq += '    type: Biquad' + '\n';
        composedeq += '    parameters:' + '\n';
        composedeq += '      type: LowshelfFO\n';
        composedeq += '      freq: 75\n';
        composedeq += '      gain: ' + loudnessGain + '\n';
        composedeq += '' + '\n';
        composedeq += '  peakloudness:\n';
        composedeq += '    type: Biquad' + '\n';
        composedeq += '    parameters:' + '\n';
        composedeq += '      type: Peaking\n';
        composedeq += '      freq: 2000\n';
        composedeq += '      q: 1.1\n';
        composedeq += '      gain: ' + (loudnessGain * 0.06).toFixed(2) + '\n';
        composedeq += '' + '\n';
        composedeq += '  peakloudness2:\n';
        composedeq += '    type: Biquad' + '\n';
        composedeq += '    parameters:' + '\n';
        composedeq += '      type: Peaking\n';
        composedeq += '      freq: 4000\n';
        composedeq += '      q: 0.8\n';
        composedeq += '      gain: ' + (loudnessGain * -0.036).toFixed(2) + '\n';
        composedeq += '' + '\n';
        composedeq += '' + '\n';
        result += composedeq

The result with volume 5 Threshold 90

And with volume 35 Threshold 90

Yes I know. I set 30 because under 30 I basically can’t hear anything anymore. I have reduced the volume on the DAC so I can to 90 on the Volumio to have the resolution for the SW Volume. I understand that, but my monitors can no longer be set to a lower sensitivity. That’s why I work from 30 to 90 and I have a trial gain of Loudness 85 or 90.
I will definitely try your setup today. Wouldn’t it please do without that ripple? At 1kHz it should have 0.0dB, 2kHz -1.4dB, 4kHz -1.7dB, 6.3kHz -1.0dB, 10kHz 2.5dB and 12kHz 6.1dB.
I will try to attach an Excel graph from that standard.
Thanks so much for the discussion, I appreciate it
Peter

edit last ssettings from today, very close to yours…

Yes, of course I tested it right away. I see only one problem in the area above 1kHz. But this wave also occurs there of other manufacturers of the Loudness feature. I may be wrong, but I think I’m right, I’m still thinking about it. In my opinion, at least as I understand it, it is not our task to “straighten” these generally known curves of the sensitivity of the human ear, because firstly it is not and secondly that man is used to the characteristics of his ear. The point is that the master of sound aligns the recording according to his intention (as the artist does). However, it does so in some working sound pressure (SPL) and in an acoustically optimized studio environment. Suppose this happens at 85-90dB SPL. We then reproduce this recording in the evening / at night in our house / in the apartment with regard to other members of the household or neighbors in sound pressure (SPL) 45-50dB. Therefore, I opted for a curve with a maximum attenuation of -40dB, which is this Excel curve that shows the difference in ear sensitivity at 80 and 40dB. I don’t know if this is the right procedure or that this standard is correct, but we have nothing else. The last curve published looks great, do you have the settings for them? I would like to test it, my attempts will probably not be clean in terms of programming.
Thank you for the wonderful consultation.
Cheers Petr
Czech Republic


My last version
Peter


with

highshelf:\n'
  type: Biquad\n'
  parameters:\n'
    type: Highshelf\n'
    freq: 10000\n'
    q: 0.8\n'
    gain: ' + (loudnessGain * 0.28).toFixed(2) + '\n'
'
lowshelf:\n';
  type: Biquad' + '\n';
  parameters:' + '\n';
    type: LowshelfFO\n';
    freq: 75\n';
    gain: ' + loudnessGain + '\n';
+ '\n';
peakloudness:\n';
  type: Biquad' + '\n';
  parameters:' + '\n';
    type: Peaking\n';
    freq: 2000\n';
    q: 0.4\n';
    gain: ' + (loudnessGain * -0.04).toFixed(2) + '\n';
+ '\n';
peakloudness2:\n';
  type: Biquad' + '\n';
  parameters:' + '\n';
    type: Peaking\n';
    freq: 4000\n';
    q: 0.8\n';
    gain: ' + (loudnessGain * -0.036).toFixed(2) + '\n';

loudnessMaxGain = 23
Do I need to change the high?
I think I going to include these setting in next release…

3 Likes

FusionDsp v1.0.6

1 Like

Hello,

next week the officially Update for Volumio is comming. I hope that Fusion DSP will get the stable state soon😊.

Do you think it will be able to have an multichanel Setup with Volumio and Fusion DSP in future?
It will be nice to control a subwoofer alone.
I know, at first Volumio has to implement the feature.
Maybe a dream, But what will we be without dreams😊.

I have no plan to use multi channels in the UI. But FusionDsp gives you access to CamillaDsp GUI. Just choose Pure CamillaDsp GUI as DSP mode. From here, you can set all channels you need. :wink:
Edit but I’m still open to think, one day to implement this…

3 Likes

For me, the topic of volumio and FusionDsp is completely new.

I have installed volumio with FusionDsp on an old RPi 2 B Rev. 1.1 and connected it to an amplifier. On my terrace are 2 KEF Ventura 4 outdoor speakers mounted:

KEF
Product Specifications
Dimensions (HxWxD) in mm 230x171x154
Cross Over Frequency 3.5kHz
Recommended Amp Power 10 - 80 Watts
HF Driver 19mm Tweeter
LF Driver 115mm
Enclosure Type Two-Way Sealed Box
Frequency range 75Hz - 20kHz

With these I would like to boost the bass range. What is the best way to do this?

The easiest way is to use 15 bands Eq and increase a little low frequencies below 200Hz and test until it sounds at your taste…

Ok, then I’ll try this.

I read in a post about the Linkwitz Transform.
When I select the parametric equalizer and then select the Linkwitz Transform, I get a floating point error at eq1. It says 0,0,0 by default. What must be entered there and is it suitable at all?

Oh. I see. Even if 0,0,0 is displayed, you need 4 parameters for this filter.
Parameters:

freq_act: actual resonance frequency of the speaker.
q_act: actual Q-value of the speaker.
freq_target: target resonance frequency.
q_target: target Q-value.
Ex 70,2.2,80,3.1