Android Open Source - OpenSynth Oscillator






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>
 * /*w ww.  j  a v  a 2  s .c o  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;

public final class Oscillator implements Parameter {
    public enum WaveForm {
        SINE,
        SQUARE,
        TRIANGLE,
        SAWTOOTH,
        REVERSE_SAWTOOTH,
    };

    private Parameter mFreqParam;
    private double mSampleRate;
    private WaveForm mWaveForm = WaveForm.SQUARE;
    private long mCurrentSample = 0;

    public Oscillator() {
        this(null, SynthTrack.SAMPLE_RATE_HZ);
        mWaveForm = WaveForm.SINE;
    }

    public Oscillator(Parameter freqParam,
                                        double mSampleRate) {
        this.mFreqParam = freqParam;
        this.mSampleRate = mSampleRate;
    }

    public void setSampleRate(double sampleRate) {
            mSampleRate = sampleRate;
    }

    public void setWaveForm(WaveForm mWaveForm) {
        this.mWaveForm = mWaveForm;
    }

    public void setFrequency(Parameter freq) {
        mFreqParam = freq;
    }

    @Override
    public double getValue() {
        double freq = mFreqParam.getValue();
        long periodSamples = (long) (mSampleRate / freq);
        double x = (double)mCurrentSample / periodSamples;
        double value = 0;
        switch (mWaveForm) {
            case SINE:
                value = Math.sin(2.0f * Math.PI * x);
                break;
            case SQUARE:
                if (mCurrentSample < (periodSamples / 2)) {
                    value = 1.0f;
                } else {
                    value = -1.0f;
                }
                break;
            case TRIANGLE:
                value = (2.f * Math.abs(2.0 * x - 2.0 * Math.floor(x) - 1.0f) - 1.0f);
                break;
            case SAWTOOTH:
                value = 2.0f * (x - Math.floor(x) - 0.5f);
                break;
            case REVERSE_SAWTOOTH:
                value = 2.0f * (Math.floor(x) - x + 0.5f);
                break;
            default:
                throw new RuntimeException("Illegal wave type: " + mWaveForm);
        }
        mCurrentSample = (mCurrentSample + 1) % (periodSamples);
        return value;
    }

    // Start at the beginning of the period
    public void reset() {
        mCurrentSample = 0;
    }

    // Returns true if this is the first sample in the period
    public boolean isStart() {
        return (mCurrentSample == 0);
    }
}




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