/// <summary>
        /// Calculates IIR.
        /// </summary>
        /// <param name="sample">sample rate</param>
        /// <param name="pBiquad">BiquadCoefficients pointer</param>
        public void BiQuad(ref byte sample, BiquadCoefficients* pBiquad)
        {
            // compute result
            double result = pBiquad->a0 * sample + pBiquad->a1 * pBiquad->x1 +
                pBiquad->a2 * pBiquad->x2 - pBiquad->a3 * pBiquad->y1 - pBiquad->a4 * pBiquad->y2;
            // shift x1 to x2, sample to x1
            pBiquad->x2 = pBiquad->x1;
            pBiquad->x1 = sample;
            // shift y1 to y2, result to y1
            pBiquad->y2 = pBiquad->y1;
            pBiquad->y1 = result;

            sample = (byte)result;
        }
 private static extern bool HeapFree(IntPtr hHeap, uint dwFlags, BiquadCoefficients* lpMem);
 /// <summary>Release heap memory</summary>
 /// <param name="pmem">memory address</param>
 private void Free(BiquadCoefficients* b)
 {
     HeapFree(GetProcessHeap(), 0, b);
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="b"></param>
 public void FreeMem(BiquadCoefficients* b)
 {
     Free(b);
 }