Re: Dynamic Loudness Control
Reply #21 – 2020-08-26 16:10:10
Thanks ! That was easier than I thought. Here's the modified working script (I have done it between 0 and -60 dB which should be more than enough) :var dsp_active_name = ""; var dsp_str = fb.GetDSPPresets(); var dsp_arr = JSON.parse(dsp_str); var dsp_count = dsp_arr.length; function get_dsp() { dsp_active_name = ""; dsp_str = fb.GetDSPPresets(); dsp_arr = JSON.parse(dsp_str); dsp_count = dsp_arr.length; for (var i = 0; i < dsp_arr.length; i++) { //tt(">>> dsp presets name # " + i + ": " + dsp_arr[i].name); if (dsp_arr[i].active) { dsp_active_name = dsp_arr[i].name; } } tt('>>> dsp presets count = ' + dsp_count); tt(">>> dsp active name = " + dsp_active_name); }; //get_dsp(); function get_dsp_idx(dsp_name) { for (var i = 0; i < dsp_arr.length; i++) { if (dsp_arr[i].name == dsp_name) { return i } } }; function on_dsp_preset_changed() { get_dsp(); }; var vol_lvl = Math.ceil(fb.Volume); function on_volume_change(val) { //--- // 0 is max // -60 is min vol_lvl = Math.ceil(val); if (isNaN(vol_lvl)) vol_lvl = Math.ceil(fb.Volume); if (vol_lvl == 0) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp 0")); // set dsp preset 0 }; if (vol_lvl == -1) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp 0")); // set dsp preset 0 }; if (vol_lvl == -2) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp 0")); // set dsp preset 0 }; if (vol_lvl == -3) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp 0")); // set dsp preset 0 }; if (vol_lvl == -4) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp 0")); // set dsp preset 0 }; if (vol_lvl == -5) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -5")); // set dsp preset -5 }; if (vol_lvl == -6) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -5")); // set dsp preset -5 }; if (vol_lvl == -7) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -5")); // set dsp preset -5 }; if (vol_lvl == -8) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -5")); // set dsp preset -5 }; if (vol_lvl == -9) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -5")); // set dsp preset -5 }; if (vol_lvl == -10) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -10")); // set dsp preset -10 }; if (vol_lvl == -11) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -10")); // set dsp preset -10 }; if (vol_lvl == -12) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -10")); // set dsp preset -10 }; if (vol_lvl == -13) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -10")); // set dsp preset -10 }; if (vol_lvl == -14) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -10")); // set dsp preset -10 }; if (vol_lvl == -15) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -15")); // set dsp preset -15 }; if (vol_lvl == -16) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -15")); // set dsp preset -15 }; if (vol_lvl == -17) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -15")); // set dsp preset -15 }; if (vol_lvl == -18) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -15")); // set dsp preset -15 }; if (vol_lvl == -19) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -15")); // set dsp preset -15 }; if (vol_lvl == -20) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -20")); // set dsp preset -20 }; if (vol_lvl == -21) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -20")); // set dsp preset -20 }; if (vol_lvl == -22) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -20")); // set dsp preset -20 }; if (vol_lvl == -23) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -20")); // set dsp preset -20 }; if (vol_lvl == -24) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -20")); // set dsp preset -20 }; if (vol_lvl == -25) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -25")); // set dsp preset -25 }; if (vol_lvl == -26) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -25")); // set dsp preset -25 }; if (vol_lvl == -27) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -25")); // set dsp preset -25 }; if (vol_lvl == -28) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -25")); // set dsp preset -25 }; if (vol_lvl == -29) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -25")); // set dsp preset -25 }; if (vol_lvl == -30) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -30")); // set dsp preset -30 }; if (vol_lvl == -31) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -30")); // set dsp preset -30 }; if (vol_lvl == -32) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -30")); // set dsp preset -30 }; if (vol_lvl == -33) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -30")); // set dsp preset -30 }; if (vol_lvl == -34) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -30")); // set dsp preset -30 }; if (vol_lvl == -35) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -35")); // set dsp preset -35 }; if (vol_lvl == -36) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -35")); // set dsp preset -35 }; if (vol_lvl == -37) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -35")); // set dsp preset -35 }; if (vol_lvl == -38) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -35")); // set dsp preset -35 }; if (vol_lvl == -39) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -35")); // set dsp preset -35 }; if (vol_lvl == -40) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -40")); // set dsp preset -40 }; if (vol_lvl == -41) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -40")); // set dsp preset -40 }; if (vol_lvl == -42) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -40")); // set dsp preset -40 }; if (vol_lvl == -43) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -40")); // set dsp preset -40 }; if (vol_lvl == -44) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -40")); // set dsp preset -40 }; if (vol_lvl == -45) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -45")); // set dsp preset -45 }; if (vol_lvl == -46) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -45")); // set dsp preset -45 }; if (vol_lvl == -47) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -45")); // set dsp preset -45 }; if (vol_lvl == -48) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -45")); // set dsp preset -45 }; if (vol_lvl == -49) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -45")); // set dsp preset -45 }; if (vol_lvl == -50) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -50")); // set dsp preset -50 }; if (vol_lvl == -51) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -50")); // set dsp preset -50 }; if (vol_lvl == -52) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -50")); // set dsp preset -50 }; if (vol_lvl == -53) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -50")); // set dsp preset -50 }; if (vol_lvl == -54) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -50")); // set dsp preset -50 }; if (vol_lvl == -55) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -55")); // set dsp preset -55 }; if (vol_lvl == -56) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -55")); // set dsp preset -55 }; if (vol_lvl == -57) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -55")); // set dsp preset -55 }; if (vol_lvl == -58) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -55")); // set dsp preset -55 }; if (vol_lvl == -59) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -55")); // set dsp preset -55 }; if (vol_lvl == -60) { tt(">>> vol = " + vol_lvl); fb.SetDSPPreset(get_dsp_idx("dsp -60")); // set dsp preset -60 }; }; on_volume_change(); function tt(t) { console.log(t); }; As for the EQ part, sorry about that, but please note that I'm not an expert in such things. I'd just like the solution that will cause the less possible degradation to the signal, as all this is supposed to be for a Hi-Fi application. So what would you do if you were in my position and had to accurately reproduce those curves ? I love foobar and I'd never want to change it, but it's a pity that we have to do this by hand, when JRiver users can do it with the press of a button. I hope this can make a useful feature request ("dynamic loudness").