Beispiel #1
0
        private void StartKeyPlayback(int interval)
        {
            kc.isPlayingFlag = false;
            kc.isRunningFlag = false;
            kc.pauseOffset   = 0;
            ParameterController.GetInstance().Pitch = 0;
            if (midFileDiag.FileName == string.Empty)
            {
                Log.overlayLog($"错误:没有Midi文件");
                MessageBox.Show(new Form()
                {
                    TopMost = true
                }, "没有midi你演奏个锤锤?", "喵喵喵?", MessageBoxButtons.OK, MessageBoxIcon.Question);
                return;
            }

            if (_runningTask == null ||
                _runningTask.ThreadState != System.Threading.ThreadState.Running &&
                _runningTask.ThreadState != System.Threading.ThreadState.Suspended)
            {
                _runningTask?.Abort();

                this.kc.isPlayingFlag  = true;
                btnSyncReady.BackColor = Color.Aquamarine;
                btnSyncReady.Text      = "中断演奏";
                var Interval = interval < 1000 ? 1000 : interval;
                var sub      = (long)(1000 - interval);
                int bpm      = 120;
                //timer1.Start();
                var sw = new Stopwatch();
                sw.Start();
                Log.overlayLog($"文件名:{Path.GetFileName(midFileDiag.FileName)}");
                Log.overlayLog($"定时:{Interval}毫秒后演奏");
                if (ParameterController.GetInstance().isEnsembleSync)
                {
                    System.Threading.Timer timer1 = new System.Threading.Timer((TimerCallback)(x => this.kc.KeyboardPress(48)), new object(), Interval - 4000, 0);
                    System.Threading.Timer timer2 = new System.Threading.Timer((TimerCallback)(x => this.kc.KeyboardRelease(48)), new object(), Interval - 3950, 0);
                    Log.overlayLog($"定时:同步音按下");
                }
                if (netMidiFlag)
                {
                    keyPlayLists = mtk.netmidi?.Tracks[trackComboBox.SelectedIndex].notes;
                    bpm          = mtk.netmidi.BPM;
                }
                else
                {
                    OpenFile(midFileDiag.FileName);
                    bpm = mtk.GetBpm();
                    mtk.GetTrackManagers();
                    keyPlayLists = mtk.ArrangeKeyPlaysNew((double)(bpm / nudBpm.Value));
                }


                lyricPoster.LrcStart(midFileDiag.FileName.Replace(".mid", ".mml").Replace(".mml", ".lrc"), interval);
                File.WriteAllText($"1.txt", JsonConvert.SerializeObject(keyPlayLists));
                if (interval < 0)
                {
                    var keyPlay = keyPlayLists.Where((x) => x.TimeMs > sub);
                    keyPlayLists = new Queue <KeyPlayList>();
                    foreach (KeyPlayList kp in keyPlay)
                    {
                        kp.TimeMs -= sub;
                        keyPlayLists.Enqueue(kp);
                    }
                }
                sw.Stop();

                _runningFlag = true;
                cts          = new CancellationTokenSource();
                if (Settings.Default.isUsingAnalysis || netMidiFlag == true)
                {
                    _runningTask = createPerformanceTask(cts.Token, interval - (int)sw.ElapsedMilliseconds);//minus bug?
                }
                else
                {
                    _runningTask = createPerformanceTaskOriginal(cts.Token, (double)(nudBpm.Value / bpm));
                }
                _runningTask.Priority = ThreadPriority.Highest;
            }
        }
Beispiel #2
0
 public override void ImportProviderSettings(int moduleId, XmlNode settingsNode)
 {
     ParameterController.ImportProviderSettings(moduleId, settingsNode, _providerName);
 }
Beispiel #3
0
 private void PitchDown_HotKeyPressed(object sender, GlobalHotKeyEventArgs e)
 {
     ParameterController.GetInstance().Pitch -= 1;
     Log.overlayLog($"快捷键:向下移调 当前 {ParameterController.GetInstance().Pitch}");
 }
Beispiel #4
0
 public override void ExportProviderSettings(int moduleId, XmlWriter writer)
 {
     ParameterController.ExportProviderSettings(moduleId, writer, _providerName);
 }