Beispiel #1
0
        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);
        }
Beispiel #2
0
        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;
        }