package org.jcodec.audio; import java.nio.FloatBuffer; import org.jcodec.common.AudioFormat; public class ChannelSplit implements AudioFilter { private AudioFormat format; public ChannelSplit(AudioFormat format) { this.format = format; } public void filter(FloatBuffer[] _in, long[] inPos, FloatBuffer[] out) { if (_in.length != 1) throw new IllegalArgumentException("Channel split invoked on more then one input"); if (out.length != this.format.getChannels()) throw new IllegalArgumentException("Channel split must be supplied with " + this.format.getChannels() + " output buffers to hold the channels."); FloatBuffer in0 = _in[0]; int outSampleCount = in0.remaining() / out.length; for (int i = 0; i < out.length; i++) { if (out[i].remaining() < outSampleCount) throw new IllegalArgumentException("Supplied buffer for " + i + "th channel doesn't have sufficient space to put the samples ( required: " + outSampleCount + ", actual: " + out[i] .remaining() + ")"); } while (in0.remaining() >= this.format.getChannels()) { for (int j = 0; j < out.length; j++) out[j].put(in0.get()); } } public int getDelay() { return 0; } public int getNInputs() { return 1; } public int getNOutputs() { return this.format.getChannels(); } }