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"; } }