package com.teotigraphix.caustk.core.components.bassline; import com.teotigraphix.caustic.osc.BasslineDistortionMessage; import com.teotigraphix.caustk.core.components.ToneComponent; public class DistortionComponent extends ToneComponent { //-------------------------------------------------------------------------- // API :: Properties //-------------------------------------------------------------------------- //---------------------------------- // amount //---------------------------------- private float amount = 15f; public float getAmount() { return amount; } public float getAmount(boolean restore) { return BasslineDistortionMessage.DISTORTION_AMOUNT.query(getEngine(), getToneIndex()); } public void setAmount(float value) { if (value == amount) return; if (value < 0f || value > 20f) throw newRangeException(BasslineDistortionMessage.DISTORTION_AMOUNT.toString(), "0..20", value); amount = value; BasslineDistortionMessage.DISTORTION_AMOUNT.send(getEngine(), getToneIndex(), amount); } //---------------------------------- // postGain //---------------------------------- private float postGain = 0.2f; public float getPostGain() { return postGain; } public float getPostGain(boolean restore) { return BasslineDistortionMessage.DISTORTION_POSTGAIN.query(getEngine(), getToneIndex()); } public void setPostGain(float value) { if (value == postGain) return; if (value < 0f || value > 1f) throw newRangeException(BasslineDistortionMessage.DISTORTION_POSTGAIN.toString(), "0..1", value); postGain = value; BasslineDistortionMessage.DISTORTION_POSTGAIN.send(getEngine(), getToneIndex(), postGain); } //---------------------------------- // preGain //---------------------------------- private float preGain = 4.05f; public float getPreGain() { return preGain; } public float getPreGain(boolean restore) { return BasslineDistortionMessage.DISTORTION_PREGAIN.query(getEngine(), getToneIndex()); } public void setPreGain(float value) { if (value == preGain) return; if (value < 0f || value > 5f) throw newRangeException(BasslineDistortionMessage.DISTORTION_PREGAIN.toString(), "0..5", value); preGain = value; BasslineDistortionMessage.DISTORTION_PREGAIN.send(getEngine(), getToneIndex(), preGain); } //---------------------------------- // program //---------------------------------- private Program program = Program.OFF; public Program getProgram() { return program; } public Program getProgram(boolean restore) { return Program.toType(BasslineDistortionMessage.DISTORTION_PROGRAM.query(getEngine(), getToneIndex())); } public void setProgram(Program value) { if (value == program) return; program = value; BasslineDistortionMessage.DISTORTION_PROGRAM.send(getEngine(), getToneIndex(), program.getValue()); } public DistortionComponent() { } @Override public void restore() { setAmount(getAmount(true)); setPostGain(getPostGain(true)); setPreGain(getPreGain(true)); setProgram(getProgram(true)); } /** * @author Michael Schmalle * @copyright Teoti Graphix, LLC * @since 1.0 */ public enum Program { /** * */ OFF(0), /** * */ OVERDRIVE(1), /** * */ SATURATE(2), /** * */ FOLDBACK(3), /** * */ FUZZ(4); private int mValue; Program(int value) { mValue = value; } public int getValue() { return mValue; } public static Program toType(Integer type) { for (Program p : values()) { if (p.getValue() == type) return p; } return null; } public static Program toType(Float type) { return toType(type.intValue()); } } }