//Обычная генерация public void PlaySimpleMusic(MainParam param) { SimpleGeneratorState = true; SimpleGenerator.Frequency = param.Frequency; SimpleGenerator.Type = param.WaveForm; if (param.Time != 0) { SimpleGenerator.Take(TimeSpan.FromSeconds(param.Time)); using (var wo = new WaveOutEvent()) { wo.Init(SimpleGenerator); wo.Play(); Thread.Sleep(Convert.ToInt32(param.Time) * 1000); wo.Stop(); } } else { using (var wo = new WaveOutEvent()) { wo.Init(SimpleGenerator); wo.Play(); while ((wo.PlaybackState == PlaybackState.Playing) || SimpleGeneratorState) { if (SimpleGeneratorState == false) { wo.Stop(); break; } } } } }
private void Play_Click(object sender, RoutedEventArgs e) { switch (Generato_type.SelectedIndex) { case 0: SignalGeneratorType WaveType = new SignalGeneratorType(); switch (WaveTypeSimple.SelectedIndex) { case 0: WaveType = SignalGeneratorType.Sin; break; case 1: WaveType = SignalGeneratorType.Square; break; case 2: WaveType = SignalGeneratorType.Triangle; break; case 3: WaveType = SignalGeneratorType.SawTooth; break; case 4: WaveType = SignalGeneratorType.White; break; case 5: WaveType = SignalGeneratorType.Pink; break; case 6: WaveType = SignalGeneratorType.Sweep; break; } double Testtime = Convert.ToDouble(SimpleTime.Text.Trim()); double TestFrequency = Convert.ToDouble(SimpleFrequency.Text.Trim()); SimpleGenerator.Gain = SimpleGainSlider.Value; MainParam InputParams = new MainParam(WaveType, TestFrequency, Testtime); Thread myThread = new Thread(new ThreadStart(() => PlaySimpleMusic(InputParams))); myThread.Start(); double a; double d; double s; double r; if (Main_Gain_ADSR_Box.IsChecked == true) { Thread SimpleGainADSRThread = new Thread(new ThreadStart(() => SimpleGainADSR_Work(5, 3, 0.5, 2))); SimpleGainADSRThread.Start(); } if (Main_Frequency_ADSR_Box.IsChecked == true) { Thread SimpleFrequencyADSRThread = new Thread(new ThreadStart(() => PlaySimpleMusic(InputParams))); SimpleFrequencyADSRThread.Start(); } break; case 1: double[] notearr = new double[80]; int timequant = 5; notearr[0] = 440; notearr[1] = 320; notearr[2] = 200; notearr[3] = 150; notearr[4] = 240; notearr[5] = 370; NotetableGeneretor.Type = SignalGeneratorType.Sin; Thread myThread2 = new Thread(new ThreadStart(() => PlayTableMusic(notearr, timequant))); myThread2.Start(); break; case 2: break; } }