Пример #1
0
        private void ModulationButton_Click(object sender, EventArgs e)
        {
            double         A, f, fi, dutyFactor, AMod, fMod, fiMod, dutyMod;
            Signal         mainSignal = null, modalationSignal = null;
            Modulation     modulation = new Modulation();
            SoundGenerator generator  = new SoundGenerator();

            if (IsCorrectDouble(ATextBox.Text, out A) && IsCorrectDouble(fTextBox.Text, out f) && IsCorrectDouble(fiTextBox.Text, out fi) &&
                IsCorrectDouble(dutyTextBox.Text, out dutyFactor) && IsCorrectDouble(AModulationTextBox.Text, out AMod) && IsCorrectDouble(fModulationTextBox.Text, out fMod) &&
                IsCorrectDouble(fiModulationTextBox.Text, out fiMod) && IsCorrectDouble(dutyModulationTextBox.Text, out dutyMod))
            {
                if (sinusoidRadioButton.Checked)
                {
                    mainSignal = new SinusoidSignal(A, f, fi);
                }

                if (dutyCycleRadioButton.Checked)
                {
                    mainSignal = new DutyCycleSignal(A, f, fi, dutyFactor);
                }

                if (triangleRadioButton.Checked)
                {
                    mainSignal = new TriangleSignal(A, f, fi);
                }

                if (sawtoothedRadioButton.Checked)
                {
                    mainSignal = new SawtoothedSignal(A, f, fi);
                }

                if (noiseRadioButton.Checked)
                {
                    mainSignal = new NoiseSignal(A, f, fi);
                }

                if (SinusoidModulationRadioButton.Checked)
                {
                    modalationSignal = new SinusoidSignal(AMod, fMod, fiMod);
                }

                if (DutyCycleModulationRadioButton.Checked)
                {
                    modalationSignal = new DutyCycleSignal(AMod, fMod, fiMod, dutyMod);
                }

                if (triangleModulationRadioButton.Checked)
                {
                    modalationSignal = new TriangleSignal(AMod, fMod, fiMod);
                }

                if (sawtoothedModulationRadioButton.Checked)
                {
                    modalationSignal = new SawtoothedSignal(AMod, fMod, fiMod);
                }

                if (noiseModulationRadioButton.Checked)
                {
                    modalationSignal = new NoiseSignal(AMod, fMod, fiMod);
                }

                if (AmplitudeModulationRadioButton.Checked)
                {
                    DrawSignalByValues(modulation.GetAmplitudeModulation(mainSignal, modalationSignal, N));
                    generator.WriteSignalByValuesToFile(modulation.GetAmplitudeModulation(mainSignal, modalationSignal, samples));
                }
                else
                {
                    DrawSignalByValues(modulation.GetFrequencyModulation(mainSignal, modalationSignal, N));
                    generator.WriteSignalByValuesToFile(modulation.GetFrequencyModulation(mainSignal, modalationSignal, samples));
                }

                generator.PlayCurrentFile();
            }
        }
        static void Main(string[] args)
        {
            var amplitude  = 1;
            var maxValue   = Int16.MaxValue;
            var sampleRate = 44100;
            var frequency  = 1000;
            var phase      = 0;
            var seconds    = 3;
            var dutyFactor = 0.5;

            BaseSignal signal = new NoiseSignal()
            {
                Amplitude = amplitude * maxValue,
                Frequency = frequency,
                Phase     = phase,
                //DutyFactor = dutyFactor
            };

            var raw = new byte[sampleRate * seconds * 2];

            for (int n = 0; n < sampleRate * seconds; n++)
            {
                var x           = (double)n / sampleRate;
                var sampleValue = signal.GetFunc(x);
                var sample      = (short)(sampleValue);
                var bytes       = BitConverter.GetBytes(sample);

                raw[n * 2]     = bytes[0];
                raw[n * 2 + 1] = bytes[1];
            }

            //var multiple = 2.0 * frequency / sampleRate;
            //for (int n = 0; n < sampleRate * seconds; n++)
            //{
            //    var sampleSaw = ((n * multiple) % 2) - 1;
            //    var sampleValue = sampleSaw > 0 ? amplitude : -amplitude;
            //    var sample = (short)(sampleValue * Int16.MaxValue);
            //    var bytes = BitConverter.GetBytes(sample);
            //    raw[n * 2] = bytes[0];
            //    raw[n * 2 + 1] = bytes[1];
            //}

            var ms = new MemoryStream(raw);
            var rs =
                new RawSourceWaveStream(ms, new WaveFormat(sampleRate, 16, 1));

            //var outpath = "example.wav";
            //WaveFileWriter.CreateWaveFile(outpath, rs);

            var wo = new WaveOutEvent();

            wo.Init(rs);
            wo.Play();
            while (wo.PlaybackState == PlaybackState.Playing)
            {
                Thread.Sleep(500);
            }
            wo.Dispose();

            //Console.ReadKey();
        }