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); } }