//precalc m_pgf8k_scale=(4.0 /* this is +12dB or so)*0.5; m_pgf8k_scale_i = 0.5/m_pgf8k_scale; double b=m_pgf8k_scale; double tmp = b*b+4*b; if (tmp<0.0) tmp=0.0; b = (-b+sqrt(tmp)) * m_pgf8k_scale_i; if (b<0.0)b=0.0; m_pgf8k_actcenter = (int) (pow(b,0.3333333333333) * 1000.0); m_slider_center=max(m_pgf8k_actcenter,600); // dont give less than 60% of the fader to negative gains m_pgf8k_sc1 = m_pgf8k_actcenter/(double)m_slider_center; m_pgf8k_sc2 = (1000-m_pgf8k_actcenter)/(double)(1000-m_slider_center); m_pgf8k_sc1i=1.0/m_pgf8k_sc1; m_pgf8k_sc2i=1.0/m_pgf8k_sc2; // x is scale-factor (1.0 = +0dB, etc) double b=m_pgf8k_scale; double tmp = b*b+4*b*x; if (tmp<0.0) tmp=0.0; b = (-b+sqrt(tmp)) * m_pgf8k_scale_i; if (b<0.0)b=0.0; b = pow(b,0.3333333333333) * 1000.0; if (m_pgf8k_actcenter != m_slider_center) { if (b <= m_pgf8k_actcenter) b *= m_pgf8k_sc1i; else b = m_slider_center + m_pgf8k_sc2i*(b-m_pgf8k_actcenter); } return b; // 0..1000