public override WWUtil.LargeArray <double> FilterDo(WWUtil.LargeArray <double> inPcmLA)
        {
            var inPcm = inPcmLA.ToArray();

            double [] outPcm = new double[inPcm.Length];

            for (long i = 0; i < outPcm.Length; ++i)
            {
                mDelay.Filter(inPcm[i]);
                outPcm[i] = Convolution();
            }
            return(new WWUtil.LargeArray <double>(outPcm));
        }
        public override WWUtil.LargeArray <double> FilterDo(WWUtil.LargeArray <double> inPcmLA)
        {
            var inPcm  = inPcmLA.ToArray();
            var outPcm = new double[inPcm.Length];

            for (int i = 0; i < inPcm.Length; ++i)
            {
                double x = inPcm[i];

                double delayedY = mDelayX.Filter(x);

                for (int j = 0; j < MOVING_AVERAGER_NUM; ++j)
                {
                    x = mMovingAveragerList[j].Filter(x);
                }

                double y = delayedY - x;
                outPcm[i] = y;
            }

            if (0 < mDiscardSamples)
            {
                if (outPcm.Length < mDiscardSamples)
                {
                    mDiscardSamples -= outPcm.Length;
                    return(new WWUtil.LargeArray <double>(0));
                }
                else
                {
                    var outPcm2 = new double[outPcm.Length - mDiscardSamples];
                    Array.Copy(outPcm, mDiscardSamples, outPcm2, 0, outPcm2.Length);

                    mDiscardSamples = 0;
                    return(new WWUtil.LargeArray <double>(outPcm2));
                }
            }

            return(new WWUtil.LargeArray <double>(outPcm));
        }