コード例 #1
0
        //Обычная генерация

        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;
                        }
                    }
                }
            }
        }
コード例 #2
0
        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;
            }
        }