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(); }