Android Open Source - OpenSynth Lag Processor






From Project

Back to project page OpenSynth.

License

The source code is released under:

Apache License

If you think the Android project OpenSynth listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright 2013 Daisuke Fuji <daisuke@indigo-lab.com>
 * /*from w w  w  . ja va2  s .  co  m*/
 * 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 org.thebends.synth;

/**
 * A lag processor, used to implement glide.
 */
public class LagProcessor implements Parameter {
    private Parameter mParam;
    private final Envelope mEnvelope = new Envelope();
    private long mSamplesUp;
    private long mSamplesDown;
    private boolean mHasLastValue;
    private double mLastValue;

    /**
     * @mParam mParam the mParameter to glide.
     */
    public LagProcessor(Parameter mParam) {
        this.mParam = mParam;
        mSamplesUp = 0;
        mSamplesDown = 0;
        mHasLastValue = false;
        mLastValue = 0.0;
    }

    public void setParam(Parameter mParam) {
            this.mParam = mParam;
    }

    public void setSamples(long samples) {
        setSamplesUp(samples);
        setSamplesDown(samples);
    }

    public void setSamplesUp(long samples) {
        mSamplesUp = samples;
    }

    public void setSamplesDown(long samples) {
        mSamplesDown = samples;
    }

    public void reset() {
        mHasLastValue = false;
    }

    @Override
    public double getValue() {
        double value = mParam.getValue();
        if (!mHasLastValue || mLastValue != value) {
            double diff = Math.abs(mLastValue - value);
            if (!mHasLastValue) {
                // No previous value so the mEnvelope simply ways returns the current
                // value in the sustain state.
                mEnvelope.setMin(0.0);
                mEnvelope.setMax(value);
                mEnvelope.setAttack(0);
                mEnvelope.setDecay(0);
                mEnvelope.setSustain(value);
                mEnvelope.setRelease(0);
                mEnvelope.noteOn();
            } else if (mLastValue < value) {
                // Slope up
                mEnvelope.setMin(mLastValue);
                mEnvelope.setMax(value);
                mEnvelope.setAttack((long) (mSamplesUp * diff));
                mEnvelope.setDecay(0);
                mEnvelope.setSustain(value);
                mEnvelope.setRelease(0);
                mEnvelope.noteOn();
            } else {
                // Slope down
                mEnvelope.setMax(mLastValue);
                mEnvelope.setMin(value);
                mEnvelope.setAttack(0);
                mEnvelope.setDecay(0);
                mEnvelope.setSustain(mLastValue);
                mEnvelope.setRelease((long) (mSamplesDown * diff));
                mEnvelope.noteOn();
                mEnvelope.noteOff();
            }
            mLastValue = value;
            mHasLastValue = true;
        }

        return mEnvelope.getValue();
    }
}




Java Source Code List

com.google.synthesizer.android.widgets.piano.BlackPianoKey.java
com.google.synthesizer.android.widgets.piano.NotePianoKey.java
com.google.synthesizer.android.widgets.piano.OctavePianoKey.java
com.google.synthesizer.android.widgets.piano.PianoKey.java
com.google.synthesizer.android.widgets.piano.PianoViewListener.java
com.google.synthesizer.android.widgets.piano.PianoView.java
com.google.synthesizer.android.widgets.piano.WhitePianoKey.java
com.google.synthesizer.core.midi.MidiListener.java
com.google.synthesizer.core.music.Note.java
com.indigo_lab.android.opensynth.OpenSynthActivity.java
com.indigo_lab.android.opensynth.ViewPagerAdapter.java
com.indigo_lab.android.opensynth.view.ArpeggioView.java
com.indigo_lab.android.opensynth.view.ControllerView.java
com.indigo_lab.android.opensynth.view.EnvelopeView.java
com.indigo_lab.android.opensynth.view.FilterEnvelopeView.java
com.indigo_lab.android.opensynth.view.FilterView.java
com.indigo_lab.android.opensynth.view.ImageRadioButton.java
com.indigo_lab.android.opensynth.view.ModulationView.java
com.indigo_lab.android.opensynth.view.OscillatorDetailView.java
com.indigo_lab.android.opensynth.view.OscillatorView.java
com.indigo_lab.android.opensynth.view.RadioButton.java
com.indigo_lab.android.opensynth.view.VolumeEnvelopeView.java
org.thebends.synth.Arpeggio.java
org.thebends.synth.Controller.java
org.thebends.synth.Envelope.java
org.thebends.synth.FilterCutoff.java
org.thebends.synth.Filter.java
org.thebends.synth.FixedParameter.java
org.thebends.synth.KeyStack.java
org.thebends.synth.KeyboardOscillator.java
org.thebends.synth.LFO.java
org.thebends.synth.LagProcessor.java
org.thebends.synth.LowPassFilter.java
org.thebends.synth.MutableParameter.java
org.thebends.synth.Oscillator.java
org.thebends.synth.Parameter.java
org.thebends.synth.ResonantFilter.java
org.thebends.synth.SynthJni.java
org.thebends.synth.SynthTrack.java
org.thebends.synth.Volume.java