Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 4
0
 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;
     }
 }
Ejemplo n.º 5
0
 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;
 }
Ejemplo n.º 6
0
        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,
            };
        }
Ejemplo n.º 7
0
        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
        }