package org.jcodec.algo; import org.jcodec.common.model.Rational; /** * This class is part of JCodec ( www.jcodec.org ) This software is distributed * under FreeBSD License * * Interpolates a sequence of signal samples into another sequence of samples * taken at a different frequency * * Interpolation algorithm depends on a specific implementation * * The input stream is supplied in chunks represented as integer arrays. The * output is produced in chunks as well. * * The first sample of each chunk is the next sample to the last sample of a * previous chunk in the sequence. * * The interpolator is stateful and each stream requires a separate instance. * * Example ( interpolates 48000 signal to 44100 ): * * <blockquote><pre> * * WavInput inp = null; * WavOutput out = null; * try { * inp = new WavInput(new File(args[0])); * out = new WavOutput(new File(args[1]), new WavHeader(inp.getHeader(), 44100)); * * StreamInterpolator in = new CubicSplineStreamInterpolator(new Rational(44100, 48000)); * * int[] samples; * while ((samples = inp.read(1024)) != null) { * int[] outSamples = in.interpolate(samples); * out.write(outSamples); * } * * } finally { * inp.close(); * out.close(); * } * * </blockquote></pre> * * * @author The JCodec project * */ public abstract class StreamInterpolator { protected Rational ratio; public StreamInterpolator(Rational ratio) { this.ratio = ratio; } public abstract int[] interpolate(int[] in); }