package com.nerdscentral.audio.convolutions; import java.util.ArrayList; import java.util.List; import com.nerdscentral.audio.core.SFConstants; import com.nerdscentral.audio.core.SFData; import com.nerdscentral.audio.core.SFSignal; import com.nerdscentral.sython.SFPL_Operator; import com.nerdscentral.sython.SFPL_RuntimeException; public abstract class SFBodyImpluse implements SFPL_Operator { private static final long serialVersionUID = 1L; abstract double[][] getData(); public List<Object> getArrays() { double[][] arrays = getData(); int len = arrays[0].length; double rate = getRate() / SFConstants.SAMPLE_RATE; int outLen = (int) (len * (SFConstants.SAMPLE_RATE) / getRate()); List<Object> ret = new ArrayList<>(); for (double[] inData : arrays) { SFSignal signal = SFData.build(outLen); SFSignal in = SFData.build(inData); { double pos = 0; for (int i = 0; i < outLen; ++i) { signal.setSample(i, in.getSampleCubic(pos)); pos = pos + rate; } ret.add(signal); } } return ret; } @SuppressWarnings("static-method") protected int getRate() { return 44100; } public SFBodyImpluse() { super(); } @Override public Object Interpret(Object input) throws SFPL_RuntimeException { return getArrays(); } }