/*
* 21.04.2004 Original verion. davagin@udm.ru.
* ----------------------------------------------------------------------- This
* program is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version. This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details. You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation, Inc.,
* 675 Mass Ave, Cambridge, MA 02139, USA.
* ----------------------------------------------------------------------
*/
package call.jeq;
/**
* Constols of equalizer Author: Dmitry Vaguine Date: 02.05.2004 Time: 12:00:29
*/
public class IIRControls {
/**
* Volume gain values should be between 0.0 and 1.0
*/
private float preamp[];
/**
* Gain for each band values should be between -0.2 and 1.0
*/
private float bands[][];
/**
* Creates new IIRControls object for given number of bands
*
* @param bandsnum
* is the number of bands
* @param channels
* is the number of channels
*/
public IIRControls(int bandsnum, int channels) {
preamp = new float[channels];
bands = new float[bandsnum][channels];
for (int j = 0; j < channels; j++) {
preamp[j] = 1.0f;
for (int i = 0; i < bandsnum; i++)
bands[i][j] = 0f;
}
}
/**
* Returns the maximum value for band control
*
* @return the maximum value for band control
*/
public float getMaximumBandValue() {
return 1.0f;
}
/**
* Returns the minimum value for band control
*
* @return the minimum value for band control
*/
public float getMinimumBandValue() {
return -0.2f;
}
/**
* Returns the maximum value for band control (in Db)
*
* @return the maximum value for band control
*/
public float getMaximumBandDbValue() {
return 12;
}
/**
* Returns the minimum value for band control (in Db)
*
* @return the minimum value for band control
*/
public float getMinimumBandDbValue() {
return -12f;
}
/**
* Returns the maximum value for preamp control
*
* @return the maximum value for preamp control
*/
public float getMaximumPreampValue() {
return 1.0f;
}
/**
* Returns the minimum value for preamp control
*
* @return the minimum value for preamp control
*/
public float getMinimumPreampValue() {
return 0f;
}
/**
* Returns the maximum value for preamp control (in Db)
*
* @return the maximum value for preamp control
*/
public float getMaximumPreampDbValue() {
return 12f;
}
/**
* Returns the minimum value for preamp control (in Db)
*
* @return the minimum value for preamp control
*/
public float getMinimumPreampDbValue() {
return -12f;
}
/**
* Returns bands array
*
* @return bands array
*/
float[][] getBands() {
return bands;
}
/**
* Returns preamp array
*
* @return preamp array
*/
float[] getPreamp() {
return preamp;
}
/**
* Returns value of control for given band and channel
*
* @param band
* is the index of band
* @param channel
* is the index of channel
* @return the value
*/
public float getBandValue(int band, int channel) {
return bands[band][channel];
}
/**
* Setter for value of control for given band and channel
*
* @param band
* is the index of band
* @param channel
* is the index of channel
* @param value
* is the new value
*/
public void setBandValue(int band, int channel, float value) {
bands[band][channel] = value;
}
/**
* Setter for value of control for given band and channel (in Db)
*
* @param band
* is the index of band
* @param channel
* is the index of channel
* @param value
* is the new value
*/
void setBandDbValue(int band, int channel, float value) {
/* Map the gain and preamp values */
/* -12dB .. 12dB mapping */
bands[band][channel] = (float) (2.5220207857061455181125E-01 * Math
.exp(8.0178361802353992349168E-02 * value) - 2.5220207852836562523180E-01);
}
/**
* Returns value of preamp control for given channel
*
* @param channel
* is the index of channel
* @return the value
*/
public float getPreampValue(int channel) {
return preamp[channel];
}
/**
* Setter for value of preamp control for given channel
*
* @param channel
* is the index of channel
* @param value
* is the new value
*/
public void setPreampValue(int channel, float value) {
preamp[channel] = value;
}
/**
* Setter for value of preamp control for given channel (in Db)
*
* @param channel
* is the index of channel
* @param value
* is the new value
*/
public void setPreampDbValue(int channel, float value) {
/* -12dB .. 12dB mapping */
preamp[channel] = (float) (9.9999946497217584440165E-01 * Math
.exp(6.9314738656671842642609E-02 * value) + 3.7119444716771825623636E-07);
}
}