Ejemplo n.º 1
0
        static private WaveChunk MakeSquareWave(WaveAttributes waveAttributes)
        {
            WaveChunk wave     = MakeSineWave(waveAttributes);
            uint      nSamples = wave.NumSamples;

            for (uint i = 0; i < nSamples; i++)
            {
                wave[i] = Math.Sign(wave[i]);
            }

            return(wave);
        }
Ejemplo n.º 2
0
        static private WaveChunk MakeWhiteNoise(WaveAttributes waveAttr)
        {
            WaveChunk wave       = new WaveChunk(waveAttr.WaveSampleRate, waveAttr.Runtime);
            uint      numSamples = wave.NumSamples;

            Random random = new Random();

            for (uint i = 0; i < numSamples; i++)
            {
                wave[i] = (float)(2 * random.NextDouble() - 1);
            }

            return(wave);
        }
Ejemplo n.º 3
0
        static private WaveChunk MakeSineWave(WaveAttributes waveAttributes)
        {
            WaveChunk wave = new WaveChunk(waveAttributes.WaveSampleRate, waveAttributes.Runtime);

            uint numSamples = wave.NumSamples;

            double t = (Math.PI * 2 * waveAttributes.TargetFrequency) / (uint)waveAttributes.WaveSampleRate;

            for (uint i = 0; i < numSamples; i++)
            {
                wave[i] = (float)Math.Sin(t * i);
            }

            return(wave);
        }
Ejemplo n.º 4
0
        private static WaveChunk MakeTriangle(WaveAttributes waveAttr)
        {
            WaveChunk wave       = new WaveChunk(waveAttr.WaveSampleRate, waveAttr.Runtime);
            uint      numSamples = wave.NumSamples;

            float step = (float)(1 / (double)waveAttr.WaveSampleRate * 4 * waveAttr.TargetFrequency);

            wave[0] = 0.0f;
            for (uint i = 1; i < numSamples; i++)
            {
                var next = wave[i - 1] + step;
                if (Math.Abs(next) > 1.0f)
                {
                    step = -step;
                }

                wave[i] = wave[i - 1] + step;
            }
            return(wave);
        }
Ejemplo n.º 5
0
        private static WaveChunk MakeSawtooth(WaveAttributes waveAttr)
        {
            WaveChunk wave       = new WaveChunk(waveAttr.WaveSampleRate, waveAttr.Runtime);
            uint      numSamples = wave.NumSamples;

            var step = 1 / (double)waveAttr.WaveSampleRate * 2 * waveAttr.TargetFrequency;

            wave[0] = 0.0f;
            for (uint i = 1; i < numSamples; i++)
            {
                var next = wave[i - 1] + (float)step;
                if (next > 1.0f)
                {
                    wave[i] = -1.0f;
                }
                else
                {
                    wave[i] = next;
                }
            }
            return(wave);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Creates basic audio waves
        /// </summary>
        /// <param name="waveType"></param>
        /// <param name="waveAttributes"></param>
        /// <returns></returns>
        static public WaveChunk MakeWave(WaveTypes waveType, WaveAttributes waveAttributes)
        {
            switch (waveType)
            {
            case WaveTypes.SineWave:
                return(MakeSineWave(waveAttributes));

            case WaveTypes.Square:
                return(MakeSquareWave(waveAttributes));

            case WaveTypes.Sawtooth:
                return(MakeSawtooth(waveAttributes));

            case WaveTypes.Triangle:
                return(MakeTriangle(waveAttributes));

            case WaveTypes.WhiteNoise:
                return(MakeWhiteNoise(waveAttributes));

            default:
                throw new ArgumentException("Not a valid wave type");
            }
        }