protected override double[] generate(int nSamples) { double[] outData = new double[nSamples]; Random rand = new Random(); //if a new random is created every time, it doesn't update fast enough! int freqInSamples = (int)((1 / freq) * SynthesisBase.SampleRate); int numChunks = nSamples / freqInSamples; WaveAudio chunk = null; for (int i = 0; i < numChunks; i++) { if (i % this.chunksbeforeswitch == 0) { if (chunk == null) { //seed with Sine wave chunk = new Sine(210, amplitude / 4).CreateWaveAudio(1 / freq + 0.01); } else { WaveAudio newchunk = new RedNoise(amplitude, rednoisefactor, rand).CreateWaveAudio(1 / freq + 0.01); chunk = WaveAudio.Mix(chunk, this.smoothing, newchunk, 1 - this.smoothing); } } Array.Copy(chunk.data[0], 0, outData, i * freqInSamples, freqInSamples); } //fill in the rest if (numChunks * freqInSamples < nSamples) { Array.Copy(chunk.data[0], 0, outData, numChunks * freqInSamples, nSamples - numChunks * freqInSamples); } return(outData); }
protected override double[] generate(int nSamples) { double[] outData = new double[nSamples]; Random rand = new Random(); //if a new random is created every time, it doesn't update fast enough! int freqInSamples = (int)((1 / freq) * SynthesisBase.SampleRate); int numChunks = nSamples / freqInSamples; WaveAudio chunk = null; for (int i = 0; i < numChunks; i++) { if (i % this.chunksbeforeswitch == 0) { if (chunk == null) { //seed with Sine wave chunk = new Sine(210, amplitude / 4).CreateWaveAudio(1 / freq + 0.01); } else { WaveAudio newchunk = new RedNoise(amplitude, rednoisefactor, rand).CreateWaveAudio(1 / freq + 0.01); chunk = WaveAudio.Mix(chunk, this.smoothing, newchunk, 1 - this.smoothing); } } Array.Copy(chunk.data[0], 0, outData, i * freqInSamples, freqInSamples); } //fill in the rest if (numChunks * freqInSamples < nSamples) Array.Copy(chunk.data[0], 0, outData, numChunks * freqInSamples, nSamples - numChunks * freqInSamples); return outData; }