package com.teotigraphix.caustk.tone.components.padsynth;
import com.teotigraphix.caustk.core.osc.PadSynthMessage;
import com.teotigraphix.caustk.tone.ToneComponent;
public class LFO1Component extends ToneComponent {
//--------------------------------------------------------------------------
// Properties API
//--------------------------------------------------------------------------
//----------------------------------
// target
//----------------------------------
protected Target target = Target.Off;
public Target getTarget() {
return target;
}
Target getTarget(boolean restore) {
return Target.fromInt(PadSynthMessage.LFO1_TARGET.query(getEngine(), getToneIndex()));
}
public void setTarget(Target value) {
if (value == target)
return;
target = value;
PadSynthMessage.LFO1_TARGET.send(getEngine(), getToneIndex(), target.getValue());
}
//----------------------------------
// rate
//----------------------------------
protected int rate = 6;
public int getRate() {
return rate;
}
int getRate(boolean restore) {
return (int)PadSynthMessage.LFO1_RATE.query(getEngine(), getToneIndex());
}
public void setRate(int value) {
if (value == rate)
return;
if (value < 0 || value > 12)
throw newRangeException("lfo1_rate", "0..12", value);
rate = value;
PadSynthMessage.LFO1_RATE.send(getEngine(), getToneIndex(), rate);
}
//----------------------------------
// depth
//----------------------------------
protected float depth;
public float getDepth() {
return depth;
}
float getDepth(boolean restore) {
return PadSynthMessage.LFO1_DEPTH.query(getEngine(), getToneIndex());
}
public void setDepth(float value) {
if (value == depth)
return;
if (value < 0f || value > 1f)
throw newRangeException("lfo1_depth", "0..1", value);
depth = value;
PadSynthMessage.LFO1_DEPTH.send(getEngine(), getToneIndex(), depth);
}
//----------------------------------
// phase
//----------------------------------
protected float phase;
public float getPhase() {
return phase;
}
float getPhase(boolean restore) {
return PadSynthMessage.LFO1_PHASE.query(getEngine(), getToneIndex());
}
public void setPhase(float value) {
if (value == phase)
return;
if (value < 0f || value > 1f)
throw newRangeException("lfo1_phase", "0..1", value);
phase = value;
PadSynthMessage.LFO1_PHASE.send(getEngine(), getToneIndex(), phase);
}
public LFO1Component() {
}
@Override
public void restore() {
setDepth(getDepth(true));
setPhase(getPhase(true));
setRate(getRate(true));
setTarget(getTarget(true));
}
public enum Target {
Off(0), Morph(1), Pitch(2), Volume(3);
private int value;
public int getValue() {
return value;
}
Target(int value) {
this.value = value;
}
public static Target fromInt(float value) {
for (Target target : values()) {
if (target.getValue() == value)
return target;
}
return null;
}
}
}