public unsafe override int Read(byte[] buffer, int offset, int count) { int length = count / 2; if (d == null || d.Length != length) d = new double[length]; fixed(byte *tmp = buffer) { short *data = (short *)(tmp + offset); int i; FFTFilter.GetNoise(d, equalizer, (uint)sampleRate); for (i = 0; i < length; i++) { data[i] = (short)(d[i] * short.MaxValue); } } return(count); }
public uint cb(byte *buf, uint length) { if (s != null) { lock (this.d) { if (tmp == null || tmp.Length != (length * 2)) { tmp = new byte[length * 2]; } uint __tmp = (uint)s.Read(tmp, 0, (int)length); fixed(byte *tmp2 = tmp) { //WaveOut.equalizer_process(eq, tmp2, buf); short *tmp3 = (short *)(tmp2); //if (_c == null || _c.Length != (int)(__tmp / 2)) _c = new Exocortex.DSP.ComplexF[(int)(__tmp / 2)]; if (_d == null || _d.Length != (int)(__tmp / 2)) { _d = new double[(int)(__tmp / 2)]; } //wave_lib2.VBFFT.to_complex(_c, (short*)(tmp2), (uint)(__tmp / 2)); /*//wave_lib2.VBFFT.forward(_c);*/ //wave_lib2.VBFFT.inverse(_c); to_double(_d, tmp3, (uint)_d.Length); /*wave_lib2.FFT2 f = new FFT2(_d.Length / 2); * f.transform(_d, false); * int j; * double __tmpd = 1.0; * int __tmpl=_d.Length; * for (j = 0; j < __tmpl; j++) * { * if (j > (__tmpl / ((double)(120.0 / 44100.0) * (double)sampleRate))) * { * __tmpd = 0.05; * } * else * { * __tmpd = 1.0; * } * _d[j] *= __tmpd; * //__tmpd /= 1.01; * } * double mult = 1; * // multiply transforms to get convolution * for (j = 0; j != _d.Length; j += 2) * { * double a = _d[j] - _d[j + 1]; * double b = _d[j] + _d[j + 1]; * _d[j] = a * mult; * _d[j + 1] = b * mult; * //mult += 0.001; * } * f.transform(_d, true);*/ FFTFilter.Process(_d, this._eq, this.sampleRate); to_short((short *)buf, _d, (uint)_d.Length); /*Exocortex.DSP.Fourier.FFT(_c, Exocortex.DSP.FourierDirection.Forward); * Exocortex.DSP.Fourier.FFT(_c, Exocortex.DSP.FourierDirection.Forward); * Exocortex.DSP.Fourier.FFT(_c, Exocortex.DSP.FourierDirection.Forward);*/ //Exocortex.DSP.Fourier.FFT(_c, Exocortex.DSP.FourierDirection.Backward); //wave_lib2.VBFFT.to_short(tmp3, _c, (uint)_c.Length); /*Exocortex.DSP.Fourier.FFT(_c, Exocortex.DSP.FourierDirection.Forward); * //__tmp /= 2; * //System.Array.Resize<Exocortex.DSP.ComplexF>(ref _c, _c.Length / 2); * Exocortex.DSP.ComplexF mult = new Exocortex.DSP.ComplexF(1, 0); * int j; * // multiply transforms to get convolution * for (j = 0; j != _c.Length; j += 2) * { * Exocortex.DSP.ComplexF a = _c[j] - _c[j + 1]; * Exocortex.DSP.ComplexF b = _c[j] + _c[j + 1]; * _c[j] = a * mult; * _c[j + 1] = b * mult; * //mult += 0.001; * } * Exocortex.DSP.Fourier.FFT(_c, Exocortex.DSP.FourierDirection.Backward); * wave_lib2.VBFFT.to_short(tmp3, _c, (uint)_c.Length);*/ /*byte* __src = (byte*)tmp2; * byte* __dst = (byte*)buf; * int i; * uint l = __tmp; * for (i = 0; i < l; i++) * { *(__dst + i) = *(__src + i); * }*/ } //if (__tmp == 0) throw new Exception(); return(__tmp); } } return(0); }