////////////////////////////////////////////////////////////////////////////////
// Copyright 2013 Michael Schmalle - Teoti Graphix, LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License
//
// Author: Michael Schmalle, Principal Architect
// mschmalle at teotigraphix dot com
////////////////////////////////////////////////////////////////////////////////
package com.teotigraphix.caustk.sound.master;
import com.teotigraphix.caustk.controller.ICaustkController;
import com.teotigraphix.caustk.core.osc.MasterMixerMessage;
public class MasterReverb extends MasterComponent {
//--------------------------------------------------------------------------
// API
//--------------------------------------------------------------------------
//----------------------------------
// preDelay
//----------------------------------
private float preDelay = -42f;
public float getPreDelay() {
return preDelay;
}
float getPreDelay(boolean restore) {
return MasterMixerMessage.REVERB_PRE_DELAY.query(getEngine());
}
public void setPreDelay(float value) {
if (preDelay == value)
return;
if (value < 0f || value > 0.1f)
throw newRangeException("pre_delay", "0..0.1", value);
preDelay = value;
MasterMixerMessage.REVERB_PRE_DELAY.send(getEngine(), value);
}
//----------------------------------
// roomSize
//----------------------------------
private float roomSize = -42f;
public float getRoomSize() {
return roomSize;
}
float getRoomSize(boolean restore) {
return MasterMixerMessage.REVERB_ROOM_SIZE.query(getEngine());
}
public void setRoomSize(float value) {
if (roomSize == value)
return;
if (value < 0f || value > 1f)
throw newRangeException("room_size", "0..1", value);
roomSize = value;
MasterMixerMessage.REVERB_ROOM_SIZE.send(getEngine(), value);
}
//----------------------------------
// hfDamping
//----------------------------------
private float hfDamping = -42f;
public float getHFDamping() {
return hfDamping;
}
float getHFDamping(boolean restore) {
return MasterMixerMessage.REVERB_HF_DAMPING.query(getEngine());
}
public void setHFDamping(float value) {
if (hfDamping == value)
return;
if (value < 0f || value > 0.8f)
throw newRangeException("hf_damping", "0..0.8", value);
hfDamping = value;
MasterMixerMessage.REVERB_HF_DAMPING.send(getEngine(), value);
}
//----------------------------------
// diffuse
//----------------------------------
private float diffuse = -42f;
public float getDiffuse() {
return diffuse;
}
float getDiffuse(boolean restore) {
return MasterMixerMessage.REVERB_DIFFUSE.query(getEngine());
}
public void setDiffuse(float value) {
if (diffuse == value)
return;
if (value < 0f || value > 0.7f)
throw newRangeException("diffuse", "0..0.7", value);
diffuse = value;
MasterMixerMessage.REVERB_DIFFUSE.send(getEngine(), value);
}
//----------------------------------
// ditherEchoes
//----------------------------------
private int ditherEchoes = -42;
public int getDitherEchoes() {
return ditherEchoes;
}
int getDitherEchoes(boolean restore) {
return (int)MasterMixerMessage.REVERB_DITHER_ECHOS.query(getEngine());
}
public void setDitherEchoes(int value) {
if (ditherEchoes == value)
return;
if (value < 0 || value > 1)
throw newRangeException("dither_echoes", "0,1", value);
ditherEchoes = value;
MasterMixerMessage.REVERB_DITHER_ECHOS.send(getEngine(), value);
}
//----------------------------------
// erGain
//----------------------------------
private float erGain = -42f;
public float getERGain() {
return erGain;
}
float getERGain(boolean restore) {
return MasterMixerMessage.REVERB_ER_GAIN.query(getEngine());
}
public void setERGain(float value) {
if (erGain == value)
return;
if (value < 0f || value > 1f)
throw newRangeException("er_gain", "0..1", value);
erGain = value;
MasterMixerMessage.REVERB_ER_GAIN.send(getEngine(), value);
}
//----------------------------------
// erDecay
//----------------------------------
private float erDecay = -42f;
public float getERDecay() {
return erDecay;
}
float getERDecay(boolean restore) {
return MasterMixerMessage.REVERB_ER_DECAY.query(getEngine());
}
public void setERDecay(float value) {
if (erDecay == value)
return;
if (value < 0f || value > 1f)
throw newRangeException("er_decay", "0..1", value);
erDecay = value;
MasterMixerMessage.REVERB_ER_DECAY.send(getEngine(), value);
}
//----------------------------------
// stereoDelay
//----------------------------------
private float stereoDelay = -42f;
public float getStereoDelay() {
return stereoDelay;
}
float getStereoDelay(boolean restore) {
return MasterMixerMessage.REVERB_STEREO_DELAY.query(getEngine());
}
public void setStereoDelay(float value) {
if (stereoDelay == value)
return;
if (value < 0f || value > 1f)
throw newRangeException("stereo_delay", "0..1", value);
stereoDelay = value;
MasterMixerMessage.REVERB_STEREO_DELAY.send(getEngine(), value);
}
//----------------------------------
// stereoSpread
//----------------------------------
private float stereoSpread = -42f;
public float getStereoSpread() {
return stereoSpread;
}
float getStereoSpread(boolean restore) {
return MasterMixerMessage.REVERB_STEREO_SPREAD.query(getEngine());
}
public void setStereoSpread(float value) {
if (stereoSpread == value)
return;
if (value < 0f || value > 1f)
throw newRangeException("stereo_spread", "0..1", value);
stereoSpread = value;
MasterMixerMessage.REVERB_STEREO_SPREAD.send(getEngine(), value);
}
//----------------------------------
// wet
//----------------------------------
private float wet = -42f;
public float getWet() {
return wet;
}
float getWet(boolean restore) {
return MasterMixerMessage.REVERB_WET.query(getEngine());
}
public void setWet(float value) {
if (wet == value)
return;
if (value < 0f || value > 0.5f)
throw newRangeException("wet", "0..0.5", value);
wet = value;
MasterMixerMessage.REVERB_WET.send(getEngine(), value);
}
//--------------------------------------------------------------------------
// Constructor
//--------------------------------------------------------------------------
public MasterReverb() {
bypassMessage = MasterMixerMessage.REVERB_BYPASS;
}
public MasterReverb(ICaustkController controller) {
super(controller);
bypassMessage = MasterMixerMessage.REVERB_BYPASS;
}
@Override
public void restore() {
super.restore();
setDiffuse(getDiffuse(true));
setDitherEchoes(getDitherEchoes(true));
setERDecay(getERDecay(true));
setERGain(getERGain(true));
setHFDamping(getHFDamping(true));
setPreDelay(getPreDelay(true));
setRoomSize(getRoomSize(true));
setStereoDelay(getStereoDelay(true));
setStereoSpread(getStereoSpread(true));
setWet(getWet(true));
}
}