aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/jsyn/instruments/WaveShapingVoice.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/jsyn/instruments/WaveShapingVoice.java')
-rw-r--r--src/com/jsyn/instruments/WaveShapingVoice.java187
1 files changed, 0 insertions, 187 deletions
diff --git a/src/com/jsyn/instruments/WaveShapingVoice.java b/src/com/jsyn/instruments/WaveShapingVoice.java
deleted file mode 100644
index 5044f21..0000000
--- a/src/com/jsyn/instruments/WaveShapingVoice.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright 2011 Phil Burk, Mobileer Inc
- *
- * 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.
- */
-
-package com.jsyn.instruments;
-
-import com.jsyn.data.DoubleTable;
-import com.jsyn.ports.UnitFunctionPort;
-import com.jsyn.ports.UnitInputPort;
-import com.jsyn.ports.UnitOutputPort;
-import com.jsyn.unitgen.Circuit;
-import com.jsyn.unitgen.EnvelopeDAHDSR;
-import com.jsyn.unitgen.FunctionEvaluator;
-import com.jsyn.unitgen.Multiply;
-import com.jsyn.unitgen.SineOscillator;
-import com.jsyn.unitgen.UnitOscillator;
-import com.jsyn.unitgen.UnitVoice;
-import com.jsyn.util.VoiceDescription;
-import com.softsynth.math.ChebyshevPolynomial;
-import com.softsynth.math.PolynomialTableData;
-import com.softsynth.shared.time.TimeStamp;
-
-/**
- * Waveshaping oscillator with envelopes.
- *
- * @author Phil Burk (C) 2011 Mobileer Inc
- */
-public class WaveShapingVoice extends Circuit implements UnitVoice {
- private static final long serialVersionUID = -2704222221111608377L;
- private static final int NUM_PRESETS = 3;
- private UnitOscillator osc;
- private FunctionEvaluator waveShaper;
- private EnvelopeDAHDSR ampEnv;
- private EnvelopeDAHDSR rangeEnv;
- private Multiply frequencyScaler;
-
- public UnitInputPort range;
- public UnitInputPort frequency;
- public UnitInputPort amplitude;
- public UnitFunctionPort function;
- public UnitInputPort pitchModulation;
-
- // default Chebyshev polynomial table to share.
- private static DoubleTable chebyshevTable;
- private final static int CHEBYSHEV_ORDER = 11;
-
- static {
- // Make table with Chebyshev polynomial to share among voices
- PolynomialTableData chebData = new PolynomialTableData(
- ChebyshevPolynomial.T(CHEBYSHEV_ORDER), 1024);
- chebyshevTable = new DoubleTable(chebData.getData());
- }
-
- public WaveShapingVoice() {
- add(frequencyScaler = new Multiply());
- add(osc = new SineOscillator());
- add(waveShaper = new FunctionEvaluator());
- add(rangeEnv = new EnvelopeDAHDSR());
- add(ampEnv = new EnvelopeDAHDSR());
-
- addPort(amplitude = ampEnv.amplitude);
- addPort(range = osc.amplitude, "Range");
- addPort(function = waveShaper.function);
- addPort(frequency = frequencyScaler.inputA, "Frequency");
- addPort(pitchModulation = frequencyScaler.inputB, "PitchMod");
-
- ampEnv.export(this, "Amp");
- rangeEnv.export(this, "Range");
-
- function.set(chebyshevTable);
-
- // Connect units.
- osc.output.connect(rangeEnv.amplitude);
- rangeEnv.output.connect(waveShaper.input);
- ampEnv.output.connect(waveShaper.amplitude);
- frequencyScaler.output.connect(osc.frequency);
-
- // Set reasonable defaults for the ports.
- pitchModulation.setup(0.1, 1.0, 10.0);
- range.setup(0.1, 0.8, 1.0);
- frequency.setup(osc.frequency);
- amplitude.setup(0.0, 0.5, 1.0);
-
- // Make the circuit turn off when the envelope finishes to reduce CPU load.
- ampEnv.setupAutoDisable(this);
-
- usePreset(2);
- }
-
- @Override
- public UnitOutputPort getOutput() {
- return waveShaper.output;
- }
-
- @Override
- public void noteOn(double freq, double amp, TimeStamp timeStamp) {
- frequency.set(freq, timeStamp);
- amplitude.set(amp, timeStamp);
- ampEnv.input.on(timeStamp);
- rangeEnv.input.on(timeStamp);
- }
-
- @Override
- public void noteOff(TimeStamp timeStamp) {
- ampEnv.input.off(timeStamp);
- rangeEnv.input.off(timeStamp);
- }
-
- @Override
- public void usePreset(int presetIndex) {
- int n = presetIndex % NUM_PRESETS;
- switch (n) {
- case 0:
- ampEnv.attack.set(0.01);
- ampEnv.decay.set(0.2);
- ampEnv.release.set(1.0);
- rangeEnv.attack.set(0.01);
- rangeEnv.decay.set(0.2);
- rangeEnv.sustain.set(0.4);
- rangeEnv.release.set(1.0);
- break;
- case 1:
- ampEnv.attack.set(0.5);
- ampEnv.decay.set(0.3);
- ampEnv.release.set(0.2);
- rangeEnv.attack.set(0.03);
- rangeEnv.decay.set(0.2);
- rangeEnv.sustain.set(0.5);
- rangeEnv.release.set(1.0);
- break;
- default:
- ampEnv.attack.set(0.1);
- ampEnv.decay.set(0.3);
- ampEnv.release.set(0.5);
- rangeEnv.attack.set(0.01);
- rangeEnv.decay.set(0.2);
- rangeEnv.sustain.set(0.9);
- rangeEnv.release.set(1.0);
- break;
- }
- }
-
- static class MyVoiceDescription extends VoiceDescription {
- static String[] presetNames = {
- "FastChebyshev", "SlowChebyshev", "BrightChebyshev"
- };
- static String[] tags = {
- "electronic", "waveshaping", "clean"
- };
-
- public MyVoiceDescription() {
- super("Waveshaping", presetNames);
- }
-
- @Override
- public UnitVoice createUnitVoice() {
- return new WaveShapingVoice();
- }
-
- @Override
- public String[] getTags(int presetIndex) {
- return tags;
- }
-
- @Override
- public String getVoiceClassName() {
- return WaveShapingVoice.class.getName();
- }
- }
-
- public static VoiceDescription getVoiceDescription() {
- return new MyVoiceDescription();
- }
-
-}