package jass.generators;
import jass.engine.*;
import java.io.*;
/** Filter UG. One input only. Processes input through filter. Output is
mix of filtered and dry signal.
@author Kees van den Doel (kvdoel@cs.ubc.ca)
*/
public class FilterContainer extends InOut {
/** Add source to Sink. Override to allow only one input.
@param s Source to add.
@return object representing Source in Sink (may be null).
*/
public Object addSource(Source s) throws SinkIsFullException {
if(sourceContainer.size() > 0) {
throw new SinkIsFullException();
} else {
sourceContainer.addElement(s);
}
return null;
}
/** Filter */
Filter filter = null;
/** Mix. */
protected float dryLevel=0;
/** Mix level (default = 0)
@param level mix level. 0 is only filtered, 1 is only dry signal
*/
public void setDryLevel(float level) {
dryLevel = level;
}
/** Get mix level.
@return mix level. 0 is only filtered, 1 is only dry signal
*/
public float getDrylevel() {
return dryLevel;
}
/** Return Filter object contained.
@return Filter contained.
*/
public Filter getFilter() {
return filter;
}
/** SetFilter contained.
@param f Filter contained.
*/
public void setFilter(Filter f) {
filter = f;
}
/** Create container around Filter.
@param srate sampling rate in Hertz.
@param bufferSize Buffer size used for real-time rendering.
@param f Filter contained.
*/
public FilterContainer(float srate, int bufferSize, Filter f) {
super(bufferSize);
setFilter(f);
}
/** Compute the next buffer and store in member float[] buf.
*/
protected void computeBuffer() {
float[] tmpbuf = srcBuffers[0];
int offSet = 0;
int bufsz = getBufferSize();
filter.filter(this.buf,tmpbuf,bufsz,offSet);
// mix dry signal in accordingly
float wetLevel = 1.f -dryLevel;
for(int k=0;k<bufsz;k++) {
buf[k] = wetLevel*buf[k] + dryLevel*tmpbuf[k];
}
}
}