private void DataPackWork() { //Waiting var w = new SubWindow.Waiting(); w.Owner = this; var waiting = new BackgroundWorker(); waiting.DoWork += (ee, ea) => { }; waiting.RunWorkerCompleted += (ee, ea) => { Dispatcher.BeginInvoke(new Action(() => { try { w.ShowDialog(); } catch { } })); }; waiting.RunWorkerAsync(); //Work var worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; bool error = false; worker.DoWork += (o, ea) => { StartCommands.Clear(); ResetCommands.Clear(); if (MainWindow.Midipath != "") { sliceMidi(exportLine, !MainWindow.DataPackOrderByInstruments); } if (MainWindow.Wavepath != "") { sliceWav(exportLine); } if (lrcs != null) { sliceLrc(); } try { cutByMaximum(commandMax); } catch { Dispatcher.Invoke(() => { w.Close(); MainWindow.ResetProgressStage(); }); System.Windows.MessageBox.Show("问题可能由以下原因造成:\n1.导出序列不包含任何命令\n2.命令溢出,数量大于2,147,483,647", "分类错误"); error = true; } }; worker.RunWorkerCompleted += (o, ea) => { if (!error) { try { GenerateDataPack(); } catch { Dispatcher.Invoke(() => { w.Close(); MainWindow.ResetProgressStage(); }); System.Windows.MessageBox.Show("问题可能由以下原因造成:\n1.目标文件被占用\n2.目标文件夹被占用", "导出错误"); return; } } w.Close(); this.Close(); this.Owner.Focus(); }; worker.RunWorkerAsync(); }
private void Export(object sender, MouseButtonEventArgs e) { SaveFileDialog fileDialog = new SaveFileDialog(); fileDialog.Filter = "A2M Extended Content(*.amextension)|*.amextension"; fileDialog.FilterIndex = 1; var commandLine = new CommandLine(); if (fileDialog.ShowDialog() == true && fileDialog.FileName != null && fileDialog.FileName != "") { if (fileDialog.FilterIndex == 1) //A2Mextension { //Waiting... var w = new SubWindow.Waiting(); w.Owner = this; BackgroundWorker waiting = new BackgroundWorker(); waiting.DoWork += (ee, ea) => { }; waiting.RunWorkerCompleted += (ee, ea) => { Dispatcher.BeginInvoke(new Action(() => { try { w.ShowDialog(); } catch { } })); }; waiting.RunWorkerAsync(); //Work BackgroundWorker worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.DoWork += (o, ea) => { commandLine = getCommandLine(); }; worker.RunWorkerCompleted += (o, ea) => { File.WriteAllText(fileDialog.FileName, _coding.Compress(JsonConvert.SerializeObject(commandLine))); //加密压缩并输出 w.Close(); }; worker.RunWorkerAsync(); } } }
private void DataPackWork() { //Waiting var w = new SubWindow.Waiting(); w.Owner = this; var waiting = new BackgroundWorker(); waiting.DoWork += (ee, ea) => { }; waiting.RunWorkerCompleted += (ee, ea) => { Dispatcher.BeginInvoke(new Action(() => { try { w.ShowDialog(); } catch { } })); }; waiting.RunWorkerAsync(); //Work var worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; bool error = false; worker.DoWork += (o, ea) => { var space = new DataPackSpace(); space.mcfunctions.Add(getPackName(), modifyCommands(MainWindow.cmdLine)); DatapackSpaces.Add(space); try { cutByMaximum(commandMax); } catch { Dispatcher.Invoke(() => { w.Close(); MainWindow.ResetProgressStage(); }); System.Windows.MessageBox.Show("问题可能由以下原因造成:\n1.导出序列不包含任何命令\n2.命令溢出,数量大于2,147,483,647", "分类错误"); error = true; } }; worker.RunWorkerCompleted += (o, ea) => { if (!error) { try { GenerateDataPack(); } catch { Dispatcher.Invoke(() => { w.Close(); MainWindow.ResetProgressStage(); }); System.Windows.MessageBox.Show("问题可能由以下原因造成:\n1.目标文件被占用\n2.目标文件夹被占用", "导出错误"); return; } } w.Close(); this.Close(); this.Owner.Focus(); }; worker.RunWorkerAsync(); }
private void OK(object sender, MouseButtonEventArgs e) { if (MainWindow.Midipath != "") { System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("^[0-9]+\\.$"); if (reg.IsMatch(Textbox_float.Text)) { Textbox_float.Text += "0"; } var m_ = MainWindow.Midipath; var g = new SubWindow.Waiting(); g.Owner = this; BackgroundWorker waiting = new BackgroundWorker(); waiting.DoWork += (ee, ea) => { }; waiting.RunWorkerCompleted += (ee, ea) => { Dispatcher.BeginInvoke(new Action(() => { try { g.ShowDialog(); } catch { } })); }; waiting.RunWorkerAsync(); //Work if (usingRate) { var b = double.Parse(Textbox_float.Text); if (b == 0) { Textbox_float.Text = "1"; b = 1; } BackgroundWorker worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.DoWork += (ee, ea) => { markLine = new AudioStreamMidi().SerializeByRate(m_, new TimeLine(), b, MainWindow.SetProgressBar); }; worker.RunWorkerCompleted += (ee, ea) => { g.Close(); Info2.Text = markLine.Param["TotalTicks"].Value.ToString() + " ticks"; var m = markLine.Param["TotalTicks"].Value / 1200; var s = markLine.Param["TotalTicks"].Value % 1200 / 20; Info1.Text = m.ToString() + " : " + s.ToString(); MainWindow.Rate = Double.Parse(Textbox_float.Text); MainWindow.SetProgressBar(0); }; worker.RunWorkerAsync(); } else { beatElements.Clear(); var b = Int32.Parse(Textbox_int.Text); if (b <= 0) { Textbox_int.Text = "1"; b = 1; } //Work BackgroundWorker worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.DoWork += (ee, ea) => { MainWindow.SetTotalProgressStage(2); markLine = new AudioStreamMidi().SerializeByBeat(m_, new TimeLine(), b, MainWindow.SetProgressBar); MainWindow.AddProgressStage(); int last_bpm = -1; for (int i = 0; i < markLine.TickNodes.Count; i++) { if (markLine.TickNodes[i].BPM >= 0 && markLine.TickNodes[i].BPM != last_bpm) //BPM changed { double tps = (double)markLine.TickNodes[i].BPM * markLine.TicksPerBeat / 60 / b; beatElements.Add(new SubWindow.BeatElement() { BPM = markLine.TickNodes[i].BPM.ToString(), TickStart = i, TPS = tps.ToString("0.0000") }); last_bpm = markLine.TickNodes[i].BPM; } MainWindow.SetStagedProgressBar((double)i / markLine.TickNodes.Count); } }; worker.RunWorkerCompleted += (ee, ea) => { g.Close(); Info1.Text = (markLine.SynchronousRate * 100).ToString("0.00") + "%"; var toolTip = new TextBlock(); toolTip.Text = "有 " + (int)((1 - markLine.SynchronousRate) * markLine.Param["TotalTicks"].Value) + " 个音符与原Midi不同步.\n序列总长度为 " + markLine.TickNodes.Count + " ."; Info1.ToolTip = toolTip; MainWindow.SynchroTick = Int32.Parse(Textbox_int.Text); MainWindow.ResetProgressStage(); }; worker.RunWorkerAsync(); } Ok.IsEnabled = false; } }
private void DoneChanges(object sender, MouseButtonEventArgs e) { MainWindow.ExportSetting.Direction = 延伸方向.SelectedIndex; MainWindow.ExportSetting.Width = Int32.Parse(序列宽度.Text); MainWindow.ExportSetting.AlwaysActive = 保持区块加载.IsChecked == true; MainWindow.ExportSetting.AlwaysLoadEntities = 保持实体加载.IsChecked == true; MainWindow.ExportSetting.AutoTeleport = 自动传送.IsChecked == true; MainWindow.LyricMode.LyricOutSet.repeat = 播放模式.SelectedIndex == 0; MainWindow.LyricMode.LyricOutSet.color1 = 已播放颜色.Text; MainWindow.LyricMode.LyricOutSet.color2 = 未播放颜色.Text; MainWindow.PublicSet.ST = 双声道.SelectedIndex; if (MainWindow.Midipath != "") { var m_ = MainWindow.Midipath; var a = new TimeLine(); var w = new SubWindow.Waiting(); w.Owner = Application.Current.MainWindow; BackgroundWorker waiting = new BackgroundWorker(); waiting.DoWork += (ee, ea) => { }; waiting.RunWorkerCompleted += (ee, ea) => { Dispatcher.BeginInvoke(new Action(() => { try { w.ShowDialog(); } catch { } })); }; waiting.RunWorkerAsync(); if (Midi.IsVisible) //Using Rate { System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("^[0-9]+\\.$"); if (reg.IsMatch(重设播放倍率.Text)) { 重设播放倍率.Text += "0"; } var b = double.Parse(重设播放倍率.Text); if (b == 0) { 重设播放倍率.Text = "1"; b = 1; } //Work BackgroundWorker worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.DoWork += (ee, ea) => { a = new AudioStreamMidi().SerializeByRate(m_, new TimeLine(), b, MainWindow.SetProgressBar); }; worker.RunWorkerCompleted += (ee, ea) => { w.Close(); Midi刻长.Text = a.Param["TotalTicks"].Value.ToString() + " ticks"; var m = a.Param["TotalTicks"].Value / 1200; var s = a.Param["TotalTicks"].Value % 1200 / 20; Midi时长.Text = m.ToString() + " : " + s.ToString(); MainWindow.Rate = Double.Parse(重设播放倍率.Text); MainWindow.preTick = a.Param["TotalTicks"].Value; MainWindow.SetProgressBar(0); usingRate = true; }; worker.RunWorkerAsync(); } else //Using Beat { beatElements.Clear(); var b = Int32.Parse(重设节奏间隔.Text); if (b <= 0) { 重设节奏间隔.Text = "1"; b = 1; } //Work BackgroundWorker worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.DoWork += (ee, ea) => { MainWindow.SetTotalProgressStage(2); a = new AudioStreamMidi().SerializeByBeat(m_, new TimeLine(), b, MainWindow.SetProgressBar); MainWindow.AddProgressStage(); int last_bpm = -1; for (int i = 0; i < a.TickNodes.Count; i++) { if (a.TickNodes[i].BPM >= 0 && a.TickNodes[i].BPM != last_bpm) //BPM changed { double tps = (double)a.TickNodes[i].BPM * a.TicksPerBeat / 60 / b; beatElements.Add(new SubWindow.BeatElement() { BPM = a.TickNodes[i].BPM.ToString(), TickStart = i, TPS = tps.ToString("0.0000") }); last_bpm = a.TickNodes[i].BPM; } MainWindow.SetStagedProgressBar((double)i / a.TickNodes.Count); } }; worker.RunWorkerCompleted += (ee, ea) => { w.Close(); Midi同步率.Text = (a.SynchronousRate * 100).ToString("0.00") + "%"; var toolTip = new TextBlock(); toolTip.Text = "有 " + (int)((1 - a.SynchronousRate) * a.Param["TotalTicks"].Value) + " 个音符与原Midi不同步.\n序列总长度为 " + a.TickNodes.Count + " ."; Midi同步率.ToolTip = toolTip; MainWindow.preTick = a.Param["TotalTicks"].Value; MainWindow.SynchroTick = Int32.Parse(重设节奏间隔.Text); MainWindow.ResetProgressStage(); usingRate = false; }; worker.RunWorkerAsync(); } } Done.IsEnabled = false; }
private void DoneChanges(object sender, MouseButtonEventArgs e) { Done.IsEnabled = false; var fre_c = Int32.Parse(单刻频率采样数.Text); var vol_c = Int32.Parse(单刻振幅采样数.Text); var cir = Int32.Parse(采样周期.Text); if (!(_COMMIT[0] == cir && _COMMIT[1] == fre_c && _COMMIT[2] == vol_c)) { var path = MainWindow.Wavepath; var wav = new TimeLine(); var w = new SubWindow.Waiting(); w.Owner = Application.Current.MainWindow; BackgroundWorker waiting = new BackgroundWorker(); waiting.DoWork += (ee, ea) => { }; waiting.RunWorkerCompleted += (ee, ea) => { Dispatcher.BeginInvoke(new Action(() => { try { w.ShowDialog(); } catch { } })); }; waiting.RunWorkerAsync(); //Work BackgroundWorker worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.DoWork += (ee, ea) => { wav = new AudioStreamWave().Serialize(path, new TimeLine(), fre_c, vol_c, cir); }; worker.RunWorkerCompleted += (ee, ea) => { w.Close(); 最大频率L.Text = Math.Round(highest(wav, "l", "FrequencyPerTick"), 2).ToString(); 最大振幅L.Text = Math.Round(highest(wav, "l", "VolumePerTick"), 2).ToString(); 最小频率L.Text = Math.Round(lowest(wav, "l", "FrequencyPerTick"), 2).ToString(); 最小振幅L.Text = Math.Round(lowest(wav, "l", "VolumePerTick"), 2).ToString(); 平均频率L.Text = Math.Round(average(wav, "l", "FrequencyPerTick"), 2).ToString(); 平均振幅L.Text = Math.Round(average(wav, "l", "VolumePerTick"), 2).ToString(); 最大频率R.Text = Math.Round(highest(wav, "r", "FrequencyPerTick"), 2).ToString(); 最大振幅R.Text = Math.Round(highest(wav, "r", "VolumePerTick"), 2).ToString(); 最小频率R.Text = Math.Round(lowest(wav, "r", "FrequencyPerTick"), 2).ToString(); 最小振幅R.Text = Math.Round(lowest(wav, "r", "VolumePerTick"), 2).ToString(); 平均频率R.Text = Math.Round(average(wav, "r", "FrequencyPerTick"), 2).ToString(); 平均振幅R.Text = Math.Round(average(wav, "r", "VolumePerTick"), 2).ToString(); MainWindow.SetProgressBar(0); }; worker.RunWorkerAsync(); } _COMMIT[0] = cir; _COMMIT[1] = fre_c; _COMMIT[2] = vol_c; Update(); MainWindow.preTimeLine.LeftWaveSetting = new TimeLine.WaveSettingInspector() { Enable = 左声道.IsChecked == true, Frequency = 当刻频率L.IsChecked == true, Volume = 当刻振幅L.IsChecked == true, }; MainWindow.preTimeLine.RightWaveSetting = new TimeLine.WaveSettingInspector() { Enable = 右声道.IsChecked == true, Frequency = 当刻频率R.IsChecked == true, Volume = 当刻振幅R.IsChecked == true, }; }
private void Done(object sender, MouseButtonEventArgs e) { //Detect Directory var path = Path.Text + "\\" + Name1.Text; if (Directory.Exists(path)) { var msg = System.Windows.MessageBox.Show("是否替换同名数据包", "替换数据包", MessageBoxButton.YesNoCancel); if (msg == MessageBoxResult.Cancel) { return; } if (msg == MessageBoxResult.Yes) { try { new DirectoryInfo(path).Delete(true); } catch { System.Windows.MessageBox.Show("文件夹被占用" + Environment.NewLine + "请从资源管理器中关闭此文件夹", "错误"); return; } } } //Confirm TimeLine MainWindow.datapackName = Name1.Text; commandMax = Int32.Parse(Max.Text); disableGeneralParam = 禁用全局变量.IsChecked == true; #region TimeLineGenerate //Waiting var w = new SubWindow.Waiting(); w.Owner = this; BackgroundWorker waiting = new BackgroundWorker(); waiting.DoWork += (ee, ea) => { }; waiting.RunWorkerCompleted += (ee, ea) => { Dispatcher.BeginInvoke(new Action(() => { try { w.ShowDialog(); } catch { } })); }; waiting.RunWorkerAsync(); //Work BackgroundWorker worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.DoWork += (o, ea) => { int stage = 3; if (MainWindow.Midipath != "") { stage++; } if (MainWindow.Wavepath != "") { stage++; } if (lrcs != null) { stage++; } MainWindow.SetTotalProgressStage(3); exportLine = MainWindow.ConfirmTimeLine(frec, volc, cycle); if (disableGeneralParam == true) // 禁用所有使用GenParam的选项 { foreach (string param in exportLine.Param.Keys) { exportLine.Param[param].Enable = false; } exportLine.OutPutTick = false; exportLine.OutPutBPM = false; } }; worker.RunWorkerCompleted += (o, ea) => { w.Close(); if ((exportLine == null || exportLine.TickNodes.Count == 0) && (lrcs == null || lrcs.Keyframe.Count == 0)) { System.Windows.MessageBox.Show("输出序列为空", "提示"); return; } scoreboard = Guid.NewGuid().ToString("N").Substring(0, 8); DataPackWork(); }; worker.RunWorkerAsync(); #endregion }