- Add a way to change filter oversampling factor through
FEEDER_RATE_PRESET "OVERSAMPLING_FACTOR:X .. .." where X = log2(oversampling factor). - Lower down default filter oversampling factor from 128 (log2 = 7) to 32 (log2 = 5), saving worth of 80 Kb. The use of better polynomial interpolator will raise its conversion quality/accuracy to match (or slightly better) with previous settings. - Bump driver version.
This commit is contained in:
parent
eedb75f16b
commit
164e1f20ec
sys
@ -37,6 +37,6 @@
|
|||||||
* Last 2 decimal places reserved for daily versioning, starting
|
* Last 2 decimal places reserved for daily versioning, starting
|
||||||
* with 0.
|
* with 0.
|
||||||
*/
|
*/
|
||||||
#define SND_DRV_VERSION 2009060800
|
#define SND_DRV_VERSION 2009061500
|
||||||
|
|
||||||
#endif /* !_SND_VERSION_H_ */
|
#endif /* !_SND_VERSION_H_ */
|
||||||
|
@ -379,8 +379,15 @@ function filter_parse(s, a, i, attn, alen)
|
|||||||
split(s, a, ":");
|
split(s, a, ":");
|
||||||
alen = length(a);
|
alen = length(a);
|
||||||
|
|
||||||
|
if (alen > 0 && a[1] == "OVERSAMPLING_FACTOR") {
|
||||||
|
if (alen != 2)
|
||||||
|
return (-1);
|
||||||
|
init_drift(floor(a[2]));
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
if (alen == 1 || alen == 2) {
|
if (alen == 1 || alen == 2) {
|
||||||
if (a[1] == "nyquist_hover") {
|
if (a[1] == "NYQUIST_HOVER") {
|
||||||
i = 1.0 * a[2];
|
i = 1.0 * a[2];
|
||||||
Z_NYQUIST_HOVER = (i > 0.0 && i < 1.0) ? i : 0.0;
|
Z_NYQUIST_HOVER = (i > 0.0 && i < 1.0) ? i : 0.0;
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -493,6 +500,33 @@ function genlerp(bit, use64, lerp)
|
|||||||
bit, (bit < 10) ? "\t" : "", lerp);
|
bit, (bit < 10) ? "\t" : "", lerp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function init_drift(drift, xdrift)
|
||||||
|
{
|
||||||
|
xdrift = floor(drift);
|
||||||
|
|
||||||
|
if (Z_DRIFT_SHIFT != -1) {
|
||||||
|
if (xdrift != Z_DRIFT_SHIFT)
|
||||||
|
printf("#error Z_DRIFT_SHIFT reinitialize!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Initialize filter oversampling factor, or in other word
|
||||||
|
# Z_DRIFT_SHIFT.
|
||||||
|
#
|
||||||
|
if (xdrift < 0)
|
||||||
|
xdrift = 1;
|
||||||
|
else if (xdrift > 31)
|
||||||
|
xdrift = 31;
|
||||||
|
|
||||||
|
Z_DRIFT_SHIFT = xdrift;
|
||||||
|
Z_DRIFT_ONE = shl(1, Z_DRIFT_SHIFT);
|
||||||
|
|
||||||
|
Z_SHIFT = Z_FULL_SHIFT - Z_DRIFT_SHIFT;
|
||||||
|
Z_ONE = shl(1, Z_SHIFT);
|
||||||
|
Z_MASK = Z_ONE - 1;
|
||||||
|
}
|
||||||
|
|
||||||
BEGIN {
|
BEGIN {
|
||||||
I0_EPSILON = 1e-21;
|
I0_EPSILON = 1e-21;
|
||||||
M_PI = atan2(0.0, -1.0);
|
M_PI = atan2(0.0, -1.0);
|
||||||
@ -511,25 +545,14 @@ BEGIN {
|
|||||||
Z_INTERP_COEFF_SHIFT = 24;
|
Z_INTERP_COEFF_SHIFT = 24;
|
||||||
Z_INTERP_COEFF_ONE = shl(1, Z_INTERP_COEFF_SHIFT);
|
Z_INTERP_COEFF_ONE = shl(1, Z_INTERP_COEFF_SHIFT);
|
||||||
|
|
||||||
#
|
|
||||||
# Filter oversampling factor.
|
|
||||||
#
|
|
||||||
# 6, 7, or 8 depending on how much you can trade off between memory
|
|
||||||
# consumption (due to large tables) and precision / quality.
|
|
||||||
#
|
|
||||||
Z_DRIFT_SHIFT = 7;
|
|
||||||
Z_DRIFT_ONE = shl(1, Z_DRIFT_SHIFT);
|
|
||||||
|
|
||||||
Z_SHIFT = Z_FULL_SHIFT - Z_DRIFT_SHIFT;
|
|
||||||
Z_ONE = shl(1, Z_SHIFT);
|
|
||||||
Z_MASK = Z_ONE - 1;
|
|
||||||
|
|
||||||
Z_LINEAR_FULL_SHIFT = Z_FULL_SHIFT;
|
Z_LINEAR_FULL_SHIFT = Z_FULL_SHIFT;
|
||||||
Z_LINEAR_FULL_ONE = shl(1, Z_LINEAR_FULL_SHIFT);
|
Z_LINEAR_FULL_ONE = shl(1, Z_LINEAR_FULL_SHIFT);
|
||||||
Z_LINEAR_SHIFT = 8;
|
Z_LINEAR_SHIFT = 8;
|
||||||
Z_LINEAR_UNSHIFT = Z_LINEAR_FULL_SHIFT - Z_LINEAR_SHIFT;
|
Z_LINEAR_UNSHIFT = Z_LINEAR_FULL_SHIFT - Z_LINEAR_SHIFT;
|
||||||
Z_LINEAR_ONE = shl(1, Z_LINEAR_SHIFT)
|
Z_LINEAR_ONE = shl(1, Z_LINEAR_SHIFT)
|
||||||
|
|
||||||
|
Z_DRIFT_SHIFT_DEFAULT = 5;
|
||||||
|
Z_DRIFT_SHIFT = -1;
|
||||||
# meehhhh... let it overflow...
|
# meehhhh... let it overflow...
|
||||||
#Z_SCALE_SHIFT = 31;
|
#Z_SCALE_SHIFT = 31;
|
||||||
#Z_SCALE_ONE = shl(1, Z_SCALE_SHIFT);
|
#Z_SCALE_ONE = shl(1, Z_SCALE_SHIFT);
|
||||||
@ -595,6 +618,8 @@ BEGIN {
|
|||||||
beta = Popts["beta"];
|
beta = Popts["beta"];
|
||||||
nmult = Popts["nmult"];
|
nmult = Popts["nmult"];
|
||||||
rolloff = Popts["rolloff"];
|
rolloff = Popts["rolloff"];
|
||||||
|
if (Z_DRIFT_SHIFT == -1)
|
||||||
|
init_drift(Z_DRIFT_SHIFT_DEFAULT);
|
||||||
ztab[imp["quality"] - 2] = \
|
ztab[imp["quality"] - 2] = \
|
||||||
mkfilter(imp, nmult, rolloff, beta, Z_DRIFT_ONE);
|
mkfilter(imp, nmult, rolloff, beta, Z_DRIFT_ONE);
|
||||||
imp["quality"]++;
|
imp["quality"]++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user