public Func <Time, Frequency, double, Phase, Phasor> WaveForm(Time t) => IsLfoRingModulate ? WaveForms.Detune( WaveFormVolume(FromName(WF1, Harmonic1), Volume1), WaveFormVolume(FromName(WF2, Modulate(IsLfoRoutedToHarmonic, t, Harmonic2)), Volume2), LFO) : WaveForms.Add( WaveFormVolume(FromName(WF1, Harmonic1), Volume1), WaveFormVolume(FromName(WF2, Modulate(IsLfoRoutedToHarmonic, t, Harmonic2)), Volume2));
public Func <float, float> getFunctionByType(WaveForms type) { switch (type) { case WaveForms.Sine: return(x => (float)Math.Sin(x * 2 * Math.PI)); case WaveForms.Sawtooth: return(x => (float)(Math.Atan(Math.Tan(x * Math.PI)) * 2 / Math.PI)); case WaveForms.Square: return(x => Math.Sin(x * 2 * Math.PI) > 0 ? 1.0f : -1.0f); case WaveForms.Triangle: return(x => (float)(Math.Asin(Math.Sin(x * 2 * Math.PI)) * (2.0 / Math.PI))); case WaveForms.Noise: return(x => (float)random.NextDouble() * 2 - 1); default: return(x => 0); } }