Permit rational precision to vary by quality setting in RatioOftenChanging mode

This commit is contained in:
Chris Cannam
2022-08-04 13:31:33 +01:00
parent 7833e1bff1
commit 76ee5998f1
2 changed files with 5 additions and 1 deletions

View File

@@ -122,6 +122,7 @@ BQResampler::QualityParams::QualityParams(Quality q)
k_snr = 70.0; k_snr = 70.0;
k_transition = 0.2; k_transition = 0.2;
cut = 0.9; cut = 0.9;
rational_max = 48000;
break; break;
case FastestTolerable: case FastestTolerable:
p_multiple = 62; p_multiple = 62;
@@ -129,6 +130,7 @@ BQResampler::QualityParams::QualityParams(Quality q)
k_snr = 90.0; k_snr = 90.0;
k_transition = 0.05; k_transition = 0.05;
cut = 0.975; cut = 0.975;
rational_max = 96000;
break; break;
case Best: case Best:
p_multiple = 122; p_multiple = 122;
@@ -136,6 +138,7 @@ BQResampler::QualityParams::QualityParams(Quality q)
k_snr = 100.0; k_snr = 100.0;
k_transition = 0.01; k_transition = 0.01;
cut = 0.995; cut = 0.995;
rational_max = 192000;
break; break;
} }
} }
@@ -375,7 +378,7 @@ BQResampler::pick_params(double ratio) const
{ {
// Farey algorithm, see // Farey algorithm, see
// https://www.johndcook.com/blog/2010/10/20/best-rational-approximation/ // https://www.johndcook.com/blog/2010/10/20/best-rational-approximation/
int max_denom = 192000; int max_denom = m_qparams.rational_max;
double a = 0.0, b = 1.0, c = 1.0, d = 0.0; double a = 0.0, b = 1.0, c = 1.0, d = 0.0;
double pa = a, pb = b, pc = c, pd = d; double pa = a, pb = b, pc = c, pd = d;
double eps = 1e-9; double eps = 1e-9;

View File

@@ -71,6 +71,7 @@ private:
double k_snr; double k_snr;
double k_transition; double k_transition;
double cut; double cut;
int rational_max;
QualityParams(Quality); QualityParams(Quality);
}; };