package com.teotigraphix.caustk.tone.components; import com.teotigraphix.caustk.core.osc.VolumeMessage; import com.teotigraphix.caustk.tone.ToneComponent; public class VolumeEnvelopeComponent extends ToneComponent { //-------------------------------------------------------------------------- // API :: Properties //-------------------------------------------------------------------------- //---------------------------------- // attack //---------------------------------- private float attack = 0.0f; public float getAttack() { return attack; } float getAttack(boolean restore) { return VolumeMessage.VOLUME_ATTACK.query(getEngine(), getToneIndex()); } public void setAttack(float value) { if (value == attack) return; if (value < 0 || value > 3.0625f) throw newRangeException(VolumeMessage.VOLUME_ATTACK.toString(), "0..3.0625", value); attack = value; VolumeMessage.VOLUME_ATTACK.send(getEngine(), getToneIndex(), attack); } //---------------------------------- // decay //---------------------------------- private float decay = 0.0f; public float getDecay() { return decay; } float getDecay(boolean restore) { return VolumeMessage.VOLUME_DECAY.query(getEngine(), getToneIndex()); } public void setDecay(float value) { if (value == decay) return; if (value < 0 || value > 3.0625f) throw newRangeException(VolumeMessage.VOLUME_DECAY.toString(), "0..3.0625", value); decay = value; VolumeMessage.VOLUME_DECAY.send(getEngine(), getToneIndex(), decay); } //---------------------------------- // sustain //---------------------------------- private float sustain = 1.0f; public float getSustain() { return sustain; } float getSustain(boolean restore) { return VolumeMessage.VOLUME_SUSTAIN.query(getEngine(), getToneIndex()); } public void setSustain(float value) { if (value == sustain) return; if (value < 0 || value > 1.0f) throw newRangeException(VolumeMessage.VOLUME_SUSTAIN.toString(), "0..1.0", value); sustain = value; VolumeMessage.VOLUME_SUSTAIN.send(getEngine(), getToneIndex(), sustain); } //---------------------------------- // release //---------------------------------- private float release = 0.0f; public float getRelease() { return release; } float getRelease(boolean restore) { return VolumeMessage.VOLUME_RELEASE.query(getEngine(), getToneIndex()); } public void setRelease(float value) { if (value == release) return; if (value < 0 || value > 3.0625f) throw newRangeException(VolumeMessage.VOLUME_RELEASE.toString(), "0..3.0625", value); release = value; VolumeMessage.VOLUME_RELEASE.send(getEngine(), getToneIndex(), release); } public VolumeEnvelopeComponent() { } @Override public void restore() { setAttack(getAttack(true)); setDecay(getDecay(true)); setRelease(getRelease(true)); setSustain(getSustain(true)); } }