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);
        }
Example #3
0
 public GameOfLife(Oscillators oscillator = Oscillators.Default)
 {
     this.oscillator = oscillator;
     InitBoard();
 }
Example #4
0
 public Board(Oscillators oscillator)
 {
     this.theOscillator = oscillator;
     createBoard();
 }