package advanced.gestureSound.gestures; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import org.mt4j.input.inputData.InputCursor; import advanced.gestureSound.gestures.qualities.Curvature; import advanced.gestureSound.gestures.qualities.Quality; import de.sciss.jcollider.Synth; public class GestureEngine { public static class SynthInfo { public Synth synth; public String parameter; public ParamMap pMap; public SynthInfo(Synth synth, String param, ParamMap pMap) { this.synth = synth; this.parameter = param; this.pMap = pMap; } } public static interface ParamMap { /** * Map from the range [-1..1] to whatever the synth param takes * @param in * @return */ public float map(float in); } public HashMap<String, ArrayList<SynthInfo>> map; public Quality[] qualities; public GestureEngine() { map = new HashMap<String, ArrayList<SynthInfo>>(); qualities = new Quality[1]; qualities[0] = new Curvature(this) ; } public void addToMap(String quality, Synth synth, String param, ParamMap pMap) { if (!map.containsKey(quality)) map.put(quality, new ArrayList<SynthInfo>()); map.get(quality).add(new SynthInfo(synth,param,pMap)); } public void updateEngine(InputCursor in) { for (Quality q : qualities) { q.update(in); } } public void gestureQualityChange(String quality, float val) { for (SynthInfo info : map.get(quality) ) { try { info.synth.set(info.parameter, info.pMap.map(val)); } catch (IOException e) { /** * oops. not our problem. */ e.printStackTrace(); } } } }