package com.teotigraphix.caustk.sound.effect; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.IOException; import org.junit.Test; import com.teotigraphix.caustk.CaustkTestBase; import com.teotigraphix.caustk.core.CausticException; import com.teotigraphix.caustk.core.osc.EffectRackMessage; import com.teotigraphix.caustk.sound.IEffect; import com.teotigraphix.caustk.sound.ISoundMixer; import com.teotigraphix.caustk.sound.ISoundSource; import com.teotigraphix.caustk.sound.SoundMixerChannel; import com.teotigraphix.caustk.sound.effect.DistortionEffect.Program; import com.teotigraphix.caustk.tone.SubSynthTone; public class EffectTest extends CaustkTestBase { private ISoundMixer soundMixer; private ISoundSource soundSource; private SoundMixerChannel channel1; @Override protected void start() throws CausticException, IOException { soundSource = controller.getSoundSource(); soundMixer = controller.getSoundMixer(); soundSource.createTone("part1", SubSynthTone.class); channel1 = soundMixer.getChannel(0); } @Override protected void end() { } @Test public void test_autowah() throws CausticException { // OSC: /caustic/effects_rack/create 0 0 8 AutowahEffect effect = (AutowahEffect)assertEffect(EffectType.AUTOWAH, 0); assertEquals(2.23f, effect.getCutoff(), 0f); assertEquals(1.0f, effect.getDepth(), 0f); assertEquals(0.5f, effect.getResonance(), 0f); assertEquals(0.4f, effect.getSpeed(), 0f); assertEquals(1.0f, effect.getWet(), 0f); assertEquals(2.23f, effect.getCutoff(true), 0f); assertEquals(1.0f, effect.getDepth(true), 0f); assertEquals(0.5f, effect.getResonance(true), 0f); assertEquals(0.4f, effect.getSpeed(true), 0f); assertEquals(1.0f, effect.getWet(true), 0f); effect.setCutoff(3.0f); effect.setDepth(0.75f); effect.setResonance(0.13f); effect.setSpeed(0.24f); effect.setWet(0.42f); assertEquals(3.0f, effect.getCutoff(true), 0f); assertEquals(0.75f, effect.getDepth(true), 0f); assertEquals(0.13f, effect.getResonance(true), 0f); assertEquals(0.24f, effect.getSpeed(true), 0f); assertEquals(0.42f, effect.getWet(true), 0f); } @Test public void test_bitcrusher() throws CausticException { // OSC: /caustic/effects_rack/create 0 0 8 BitcrusherEffect effect = (BitcrusherEffect)assertEffect(EffectType.BITCRUSHER, 1); assertEquals(3, effect.getDepth()); assertEquals(0f, effect.getJitter(), 0f); assertEquals(0.1f, effect.getRate(), 0f); assertEquals(1.0f, effect.getWet(), 0f); assertEquals(3, effect.getDepth(true), 0f); assertEquals(0f, effect.getJitter(true), 0f); assertEquals(0.1f, effect.getRate(true), 0.01f); assertEquals(1.0f, effect.getWet(true), 0f); effect.setDepth(14); effect.setJitter(0.42f); effect.setRate(0.45f); effect.setWet(0.8f); assertEquals(14, effect.getDepth()); assertEquals(0.42f, effect.getJitter(), 0f); assertEquals(0.45f, effect.getRate(), 0f); assertEquals(0.8f, effect.getWet(), 0f); } @Test public void test_chorus() throws CausticException { // OSC: /caustic/effects_rack/create 0 0 8 ChorusEffect effect = (ChorusEffect)assertEffect(EffectType.CHORUS, 0); assertEquals(0.25f, effect.getDepth(), 0f); assertEquals(0.4f, effect.getRate(), 0f); assertEquals(0.5f, effect.getWet(), 0f); assertEquals(0.25f, effect.getDepth(true), 0f); assertEquals(0.4f, effect.getRate(true), 0f); assertEquals(0.5f, effect.getWet(true), 0f); effect.setDepth(0.7f); effect.setRate(0.65f); effect.setWet(0.2f); assertEquals(0.7f, effect.getDepth(), 0f); assertEquals(0.65f, effect.getRate(), 0f); assertEquals(0.2f, effect.getWet(), 0f); } @Test public void test_compressor() throws CausticException { // OSC: /caustic/effects_rack/create 0 0 8 CompressorEffect effect = (CompressorEffect)assertEffect(EffectType.COMPRESSOR, 1); assertEquals(0.01f, effect.getAttack(), 0f); assertEquals(1f, effect.getRatio(), 0f); assertEquals(0.05f, effect.getRelease(), 0f); assertEquals(-1, effect.getSidechain()); assertEquals(0.1f, effect.getThreshold(), 0f); assertEquals(0.01f, effect.getAttack(true), 0f); assertEquals(1f, effect.getRatio(true), 0f); assertEquals(0.05f, effect.getRelease(true), 0f); assertEquals(-1, effect.getSidechain(true)); assertEquals(0.1f, effect.getThreshold(true), 0.01f); effect.setAttack(0.025f); effect.setRatio(0.42f); effect.setRelease(0.015f); effect.setSidechain(4); effect.setThreshold(0.6f); assertEquals(0.025f, effect.getAttack(), 0f); assertEquals(0.42f, effect.getRatio(), 0f); assertEquals(0.015f, effect.getRelease(), 0f); assertEquals(4, effect.getSidechain(), 0f); assertEquals(0.6f, effect.getThreshold(), 0f); } @Test public void test_distortion() throws CausticException { // OSC: /caustic/effects_rack/create 0 0 8 DistortionEffect effect = (DistortionEffect)assertEffect(EffectType.DISTORTION, 0); assertEquals(16.3f, effect.getAmount(), 0f); assertEquals(Program.OVERDRIVE, effect.getProgram()); // XXX UNIT BROKEN assertEquals(2.23f, effect.getPostGain(true), 0f); // XXX UNIT BROKEN assertEquals(2.23f, effect.getPreGain(true), 0f); assertEquals(16.3f, effect.getAmount(true), 0f); assertEquals(Program.OVERDRIVE, effect.getProgram(true)); effect.setPostGain(0.75f); effect.setPreGain(0.6f); effect.setAmount(18f); effect.setProgram(Program.FOLDBACK); // XXX UNIT BROKEN assertEquals(0.75f, effect.getPostGain(true), 0f); // XXX UNIT BROKEN assertEquals(0.6f, effect.getPreGain(true), 0f); assertEquals(18f, effect.getAmount(true), 0f); assertEquals(Program.FOLDBACK, effect.getProgram(true)); } @Test public void test_flanger() throws CausticException { // OSC: /caustic/effects_rack/create 0 0 8 FlangerEffect effect = (FlangerEffect)assertEffect(EffectType.FLANGER, 1); assertEquals(0.25f, effect.getDepth(), 0f); assertEquals(0.4f, effect.getFeedback(), 0f); assertEquals(0.4f, effect.getRate(), 0f); assertEquals(0.5f, effect.getWet(), 0f); assertEquals(0.25f, effect.getDepth(true), 0f); assertEquals(0.4f, effect.getFeedback(true), 0f); assertEquals(0.4f, effect.getRate(true), 0f); assertEquals(0.5f, effect.getWet(true), 0f); effect.setDepth(0.7f); effect.setFeedback(0.65f); effect.setRate(1.3f); effect.setWet(0.24f); assertEquals(0.7f, effect.getDepth(), 0f); assertEquals(0.65f, effect.getFeedback(), 0f); assertEquals(1.3f, effect.getRate(), 0f); assertEquals(0.24f, effect.getWet(), 0f); } @Test public void test_parametriceq() throws CausticException { // OSC: /caustic/effects_rack/create 0 0 8 ParametricEQEffect effect = (ParametricEQEffect)assertEffect(EffectType.PARAMETRICEQ, 0); assertEquals(0.54f, effect.getFrequency(), 0f); assertEquals(0, effect.getGain()); assertEquals(0.49999994f, effect.getWidth(), 0f); assertEquals(0.54f, effect.getFrequency(true), 0f); assertEquals(0, effect.getGain(true)); assertEquals(0.49999994f, effect.getWidth(true), 0f); effect.setFrequency(0.42f); effect.setGain(8); effect.setWidth(0.75f); assertEquals(0.42f, effect.getFrequency(true), 0f); assertEquals(8, effect.getGain(true)); assertEquals(0.75f, effect.getWidth(true), 0f); } @Test public void test_phaser() throws CausticException { // OSC: /caustic/effects_rack/create 0 0 8 PhaserEffect effect = (PhaserEffect)assertEffect(EffectType.PHASER, 1); assertEquals(0.8f, effect.getDepth(), 0f); assertEquals(0.47f, effect.getFeedback(), 0f); assertEquals(10, effect.getRate()); assertEquals(0.8f, effect.getDepth(true), 0.01f); assertEquals(0.47f, effect.getFeedback(true), 0.01f); assertEquals(10, effect.getRate(true)); effect.setDepth(0.7f); effect.setFeedback(0.65f); effect.setRate(8); assertEquals(0.7f, effect.getDepth(), 0f); assertEquals(0.65f, effect.getFeedback(), 0f); assertEquals(8, effect.getRate()); } private IEffect assertEffect(EffectType type, int slot) throws CausticException { IEffect effect = channel1.addEffect(type, slot); assertNotNull(effect); assertEquals(type, effect.getType()); assertEquals(type.getValue(), (int)EffectRackMessage.TYPE.send(controller, 0, slot)); assertEquals(slot, effect.getSlot()); assertEquals(0, effect.getToneIndex()); return effect; } }