public OscillationRangeSettings(WaveShapes waveShape) { WaveShape = waveShape; Frequency = new MinMax(1f, 2f); Amplitude = new MinMax(0f, 1f); Center = new MinMax(0f, 0f); Offset = new MinMax(0f, 100f); Ratio = new MinMax(0.5f, 0.5f); }
// void OscillatorInitialize(){ // if (waveShape == WaveShapes.Sinus){ // waveArray = new float[(int) (sampleRate / frequency)]; // double currentPhase = 0; // double incr = (Math.PI * 2) / waveArray.Length; // for (int i = 0; i < waveArray.Length; i++){ // waveArray[i] = Mathf.Sin((float) currentPhase); // currentPhase += incr; // } // } // } void OscillatorProcess(float[] data, int channels) { if (waveShape == WaveShapes.Sinus) { if (pFrequency != frequency || pWaveShape != waveShape || pModule != module) { oscIncrement = frequency * 2 * Math.PI / sampleRate; // OscillatorInitialize(); pFrequency = frequency; pWaveShape = waveShape; pModule = module; } if (pPhase != phase) { oscCurrentPhase = phase * 2 * Math.PI; } pPhase = phase; for (int i = 0; i < data.Length; i++) { oscCurrentPhase += oscIncrement; data[i] += (float)Math.Sin(oscCurrentPhase); oscCurrentPhase %= 2 * Math.PI; // oscCurrentPhase = (oscCurrentPhase + 1) % waveArray.Length; // data[i] += waveArray[oscCurrentPhase]; } } else if (waveShape == WaveShapes.Custom) { if (pFrequency != frequency || pWaveShape != waveShape || pModule != module) { oscIncrement = frequency / sampleRate; pFrequency = frequency; pWaveShape = waveShape; pModule = module; } if (pPhase != phase) { oscCurrentPhase = phase; } pPhase = phase; for (int i = 0; i < data.Length; i++) { oscCurrentPhase += oscIncrement; data[i] += oscCustomShape.Evaluate((float)oscCurrentPhase); oscCurrentPhase %= 1; } } }
public static Func <OscillationSettings, float, float> GetWaveFunction(WaveShapes waveShape) { return(waveFunctions[(int)waveShape]); }
public static Func<OscillationSettings, float, float> GetWaveFunction(WaveShapes waveShape) { return waveFunctions[(int)waveShape]; }