Ejemplo n.º 1
0
        static public void Resample(short[] source, int minSample, int maxSample, short[] dest)
        {
            var numSourceSamples = maxSample - minSample;
            var ratio            = numSourceSamples / (float)dest.Length;

            // Linear filtering, will suffer from aliasing when downsampling by less than 1/2...
            for (int i = 0; i < dest.Length; i++)
            {
                var srcPos = minSample + i * ratio;

                var idx0 = Math.Min((int)Math.Floor(srcPos), source.Length - 1);
                var idx1 = Math.Min((int)Math.Ceiling(srcPos), source.Length - 1);

                var s0    = source[idx0];
                var s1    = source[idx1];
                var alpha = Utils.Frac(srcPos);

                dest[i] = (short)Utils.Lerp(s0, s1, alpha);
            }
        }