package com.teotigraphix.caustk.tone.components.padsynth;
import com.teotigraphix.caustk.core.osc.PadSynthMessage;
import com.teotigraphix.caustk.tone.ToneComponent;
public class HarmonicsComponent extends ToneComponent {
//--------------------------------------------------------------------------
// Public API
//--------------------------------------------------------------------------
//----------------------------------
// harmonics
//----------------------------------
private float[][] table;
private void createTables() {
table = new float[2][24];
table[0] = new float[24];
table[1] = new float[24];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 24; j++) {
table[i][j] = 0f;
}
}
}
public float getHarmonic(int tableIndex, int index) {
return table[tableIndex][index];
}
float getHarmonic(int tableIndex, int index, boolean restore) {
return PadSynthMessage.QUERY_HARMONICS.send(getEngine(), getToneIndex(), tableIndex, index);
}
public void setHarmonic(int tableIndex, int index, float value) {
if (getHarmonic(tableIndex, index) == value)
return;
if (value < 0f || value > 1f)
throw newRangeException("harmonics", "0..1", value);
table[tableIndex][index] = value;
PadSynthMessage.HARMONICS.send(getEngine(), getToneIndex(), tableIndex, index, value);
}
//----------------------------------
// width
//----------------------------------
private float[] width;
public float getWidth(int tableIndex) {
return width[tableIndex];
}
float getWidth(int tableIndex, boolean restore) {
return PadSynthMessage.QUERY_WIDTH.send(getEngine(), getToneIndex(), tableIndex);
}
public void setWidth(int tableIndex, float value) {
if (getWidth(tableIndex) == value)
return;
if (value < 0f || value > 1f)
throw newRangeException("width", "0..1", value);
width[tableIndex] = value;
PadSynthMessage.WIDTH.send(getEngine(), getToneIndex(), tableIndex, value);
}
public HarmonicsComponent() {
createTables();
width = new float[2];
}
@Override
public void restore() {
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 24; j++) {
float harmonic = getHarmonic(i, j, true);
table[i][j] = harmonic;
}
}
getWidth(0, true);
getWidth(1, true);
}
}