package com.nerdscentral.audio.core; import java.util.ArrayList; import java.util.List; import com.nerdscentral.sython.Caster; public abstract class SFMultipleTranslator extends SFGenerator { @Override public void release() { // no-op } private final List<SFSignal> signals; private final int length; protected int getNMembers() { return signals.size(); } protected double getInputSample(int memberIndex, int index) { return getInputSample(memberIndex, index, 0); } protected double getInputSample(int memberIndex, int index, double otherwise) { // Resource managed at class level SFSignal ret = signals.get(memberIndex); if (index < 0) return otherwise; if (index >= ret.getLength()) return otherwise; return ret.getSample(index); } protected SFMultipleTranslator(List<SFSignal> input) { int len = 0; signals = new ArrayList<>(); for (SFSignal signal : input) { signals.add(Caster.incrReference(signal)); int l1 = signal.getLength(); if (l1 > len) len = l1; } length = len; } @Override public abstract double getSample(int index); @Override public int getLength() { return length; } }