static int Sound_into_BarkFilter_frame (Sound me, BarkFilter thee, long frame) { autoMatrix pv = Sound_to_spectralpower (me); long nf = pv -> nx; autoNUMvector<double> z (1, nf); for (long j = 1; j <= nf; j++) { z[j] = HZTOBARK (pv -> x1 + (j - 1) * pv -> dx); } for (long i = 1; i <= thy ny; i++) { double p = 0; double z0 = thy y1 + (i - 1) * thy dy; double *pow = pv -> z[1]; // TODO ?? for (long j = 1; j <= nf; j++) { // Sekey & Hanson filter is defined in the power domain. // We therefore multiply the power with a (and not a^2). // integral (F(z),z=0..25) = 1.58/9 double a = NUMsekeyhansonfilter_amplitude (z0, z[j]); p += a * pow[j] ; } thy z[i][frame] = p; } return 1; }
static double scaleFrequency (double f, int scale_from, int scale_to) { double fhz = NUMundefined; if (scale_from == scale_to) { return f; } if (scale_from == FilterBank_HERTZ) { fhz = f; } else if (scale_from == FilterBank_BARK) { fhz = BARKTOHZ (f); } else if (scale_from == FilterBank_MEL) { fhz = MELTOHZ (f); } if (scale_to == FilterBank_HERTZ || fhz == NUMundefined) { return fhz; } if (scale_to == FilterBank_BARK) { f = HZTOBARK (fhz); } else if (scale_to == FilterBank_MEL) { f = HZTOMEL (fhz); } else { return NUMundefined; } return f; }