////////////////////////////////////////////////////////////////////////////////
// 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 MasterLimiter extends MasterComponent {
//--------------------------------------------------------------------------
// API
//--------------------------------------------------------------------------
//----------------------------------
// pre
//----------------------------------
private float pre = -42f;
public float getPre() {
return pre;
}
float getPre(boolean restore) {
return MasterMixerMessage.LIMITER_PRE.query(getEngine());
}
public void setPre(float value) {
if (pre == value)
return;
if (value < 0f || value > 8f)
throw newRangeException("pre", "0..8", value);
pre = value;
MasterMixerMessage.LIMITER_PRE.send(getEngine(), value);
}
//----------------------------------
// attack
//----------------------------------
private float attack = -42f;
public float getAttack() {
return attack;
}
float getAttack(boolean restore) {
return MasterMixerMessage.LIMITER_ATTACK.query(getEngine());
}
public void setAttack(float value) {
if (attack == value)
return;
if (value < 0f || value > 0.1f)
throw newRangeException("attack", "0..0.1", value);
attack = value;
MasterMixerMessage.LIMITER_ATTACK.send(getEngine(), value);
}
//----------------------------------
// release
//----------------------------------
private float release = -42f;
public float getRelease() {
return release;
}
float getRelease(boolean restore) {
return MasterMixerMessage.LIMITER_RELEASE.query(getEngine());
}
public void setRelease(float value) {
if (release == value)
return;
if (value < 0f || value > 0.5f)
throw newRangeException("release", "0..0.5", value);
release = value;
MasterMixerMessage.LIMITER_RELEASE.send(getEngine(), value);
}
//----------------------------------
// post
//----------------------------------
private float post = -42f;
public float getPost() {
return post;
}
float getPost(boolean restore) {
return MasterMixerMessage.LIMITER_POST.query(getEngine());
}
public void setPost(float value) {
if (post == value)
return;
if (value < 0f || value > 2f)
throw newRangeException("post", "0..2", value);
post = value;
MasterMixerMessage.LIMITER_POST.send(getEngine(), value);
}
//--------------------------------------------------------------------------
// Constructor
//--------------------------------------------------------------------------
public MasterLimiter() {
bypassMessage = MasterMixerMessage.LIMITER_BYPASS;
}
public MasterLimiter(ICaustkController controller) {
super(controller);
bypassMessage = MasterMixerMessage.LIMITER_BYPASS;
}
@Override
public void restore() {
super.restore();
setAttack(getAttack(true));
setPost(getPost(true));
setPre(getPre(true));
setRelease(getRelease(true));
}
}