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; } }
public override void ImportProviderSettings(int moduleId, XmlNode settingsNode) { ParameterController.ImportProviderSettings(moduleId, settingsNode, _providerName); }
private void PitchDown_HotKeyPressed(object sender, GlobalHotKeyEventArgs e) { ParameterController.GetInstance().Pitch -= 1; Log.overlayLog($"快捷键:向下移调 当前 {ParameterController.GetInstance().Pitch}"); }
public override void ExportProviderSettings(int moduleId, XmlWriter writer) { ParameterController.ExportProviderSettings(moduleId, writer, _providerName); }