public float GetNext(float t) { float signal = 0; foreach (var instrument in Oscillators) { // Calculate the next sample // using a phase modulation , and the instrument wave form algorythm signal += (instrument.GetNext((t * this.Frequency / this.SampleRate + instrument.FMIndex * (float)Math.Sin(t * this.Frequency * instrument.FrequencyRatio * Math.PI / this.SampleRate))) * instrument.invert + (instrument.Offset)) * instrument.Amplitude; } if (Oscillators.Any()) { signal /= Oscillators.Count; } if (signal > 1.0f) { signal = 1; } else if (signal < -1.0f) { signal = -1.0f; } return(signal); }
//returns the minimum count of samples for looping //to avoid glitches public float GetSampleCountForLooping() { var SampleForLoopCount = AudioHelpers.PPCM(Oscillators.Select(o => (int)(SampleRate / (o.Frequency * o.FrequencyRatio))).ToArray()); return(SampleForLoopCount);// *(float)Math.Pow(2, MathUtils.ppcm(Oscillators.Select(o => o.Pitch + 1).ToArray()) / 12); }
public GameOfLife(Oscillators oscillator = Oscillators.Default) { this.oscillator = oscillator; InitBoard(); }
public Board(Oscillators oscillator) { this.theOscillator = oscillator; createBoard(); }