Пример #1
0
        private void Play_Stop_Click(object sender, EventArgs e)
        {
            if (Play_Stop_Btn.Text.Equals("Play"))
            {
                if (playbackEngine == null)
                {
                    addText("You must select a device first\n\n", Color.Red);
                    return;
                }
                if (DataList.Items.Count == 0)
                {
                    addText("You must add dataset first\n\n", Color.Red);
                    return;
                }

                SPCheckBox.Enabled = false;
                foreach (var c in Dataset_splitContainer.Panel2.Controls.OfType <ComboBox>())
                {
                    c.Enabled = false;
                }
                ;
                Add_Data_Btn.Enabled   = false;
                Clear_Data_Btn.Enabled = false;
                Clear_All_Btn.Enabled  = false;
                Load_Btn.Enabled       = false;
                Save_Btn.Enabled       = false;

                // get the data sets to play
                var datasets = new List <String[]>();
                foreach (ListViewItem item in DataList.Items)
                {
                    var subItem = item.SubItems;
                    var dataset = new String[subItem.Count - 1];
                    for (int i = 0; i < subItem.Count - 1; i++)
                    {
                        if (subItem[i + 1].Text.Equals("[Silence]"))
                        {
                            dataset[i] = null;
                        }
                        else
                        {
                            var headers = DataList.Columns.OfType <ColumnHeader>().Select(header => header.Text).ToArray();
                            if (headers[i + 1].Contains("Speech"))
                            {
                                dataset[i] = String.Format($@"speech/{subItem[i + 1].Text}");
                            }
                            else if (headers[i + 1].Contains("Noise"))
                            {
                                dataset[i] = String.Format($@"noise/{subItem[i + 1].Text}");
                            }
                        }
                    }
                    datasets.Add(dataset);
                }

                DirectoryInfo dinfo  = new DirectoryInfo(Directory.GetCurrentDirectory());
                String        path   = $"{dinfo.ToString()}/auto_generated";
                bool          exists = System.IO.Directory.Exists(path);
                if (!exists)
                {
                    System.IO.Directory.CreateDirectory(path);
                }
                playbackEngine.asioWriterPath = @"auto_generated";

                //Init the playbackEngine and mwProvider
                try
                {
                    if (SPCheckBox.Checked)
                    {
                        var spFilename = $@"sync_pattern/{spComboBox.SelectedItem.ToString()}";
                        playbackEngine.Init(datasets, spFilename, inputChannelTypes, inputMappingData, outputChannelTypes, outputMappingData);
                    }
                    else
                    {
                        playbackEngine.Init(datasets, null, inputChannelTypes, inputMappingData, outputChannelTypes, outputMappingData);
                    }
                    playbackEngine.mwProvider.PlaybackChanged += new EventHandler <PlaybackChangedEventArgs>(PlaybackChangedEvent);
                    playbackEngine.asioOut.PlaybackStopped    += new EventHandler <StoppedEventArgs>(PlaybackStoppedEvent);
                    playbackEngine.Play();
                    //must raise the playbackChanged event manually at the first time
                    playbackEngine.mwProvider.RaisePlaybackChanged(0);
                    Play_Stop_Btn.Text = "Stop";
                }
                catch (Exception ex)
                {
                    if (playbackEngine != null)
                    {
                        playbackEngine.Dispose();
                    }

                    SPCheckBox.Enabled = true;
                    foreach (var c in Dataset_splitContainer.Panel2.Controls.OfType <ComboBox>())
                    {
                        c.Enabled = true;
                    }
                    ;
                    Add_Data_Btn.Enabled   = true;
                    Clear_Data_Btn.Enabled = true;
                    Clear_All_Btn.Enabled  = true;
                    Load_Btn.Enabled       = true;
                    Save_Btn.Enabled       = true;
                    SetList(-1);

                    Play_Stop_Btn.Text = "Play";

                    addText(ex.ToString() + "\n\n", Color.Red);
                    return;
                }
            }
            else if (Play_Stop_Btn.Text.Equals("Stop"))
            {
                playbackEngine.Dispose();
                SPCheckBox.Enabled = true;
                foreach (var c in Dataset_splitContainer.Panel2.Controls.OfType <ComboBox>())
                {
                    c.Enabled = true;
                }
                ;
                Add_Data_Btn.Enabled   = true;
                Clear_Data_Btn.Enabled = true;
                Clear_All_Btn.Enabled  = true;
                Load_Btn.Enabled       = true;
                Save_Btn.Enabled       = true;
                SetList(-1);

                Play_Stop_Btn.Text = "Play";
            }
        }