コード例 #1
0
 protected override void OnKeyDown(KeyboardKeyEventArgs e)
 {
     base.OnKeyDown(e);
     if (e.Key == Key.Space && !settings.ffRender)
     {
         settings.Paused = !settings.Paused;
     }
     if (e.Key == Key.Right && !settings.ffRender)
     {
         int skip = settings.skip;
         if (e.Modifiers == KeyModifiers.Control)
         {
             skip += 20000;
         }
         if (e.Modifiers == KeyModifiers.Shift)
         {
             skip += 60000;
         }
         if (settings.timeBasedNotes)
         {
             midiTime += skip;
         }
         else
         {
             lock (midi)
             {
                 double timeSkipped = 0;
                 for (; timeSkipped < skip; ++midiTime)
                 {
                     midi.ParseUpTo(midiTime);
                     timeSkipped += 1 / midi.tempoTickMultiplier;
                 }
             }
             Task.Run(() =>
             {
                 Console.WriteLine("Resetting KDMAPI Stream...");
                 try
                 {
                     KDMAPI.ResetKDMAPIStream();
                     Console.WriteLine("Done");
                 }
                 catch
                 {
                     Console.WriteLine("Failed to reset KDMAPI Stream.");
                 }
             });
         }
     }
     if (e.Key == Key.Enter)
     {
         if (WindowState != WindowState.Fullscreen)
         {
             WindowState = WindowState.Fullscreen;
         }
         else
         {
             WindowState = WindowState.Normal;
         }
     }
 }
コード例 #2
0
        void PlaybackLoop()
        {
            PlaybackEvent pe;
            int           timeJump;
            long          now;

            playbackLoopStarted = true;
            if (settings.ffRender)
            {
                return;
            }
            if (settings.Paused || !settings.playbackEnabled)
            {
                SpinWait.SpinUntil(() => !(settings.Paused || !settings.playbackEnabled));
            }
            KDMAPI.ResetKDMAPIStream();
            KDMAPI.SendDirectData(0x0);
            while (settings.running)
            {
                if (settings.Paused || !settings.playbackEnabled)
                {
                    SpinWait.SpinUntil(() => !(settings.Paused || !settings.playbackEnabled));
                }
                try
                {
                    if (globalPlaybackEvents.ZeroLen)
                    {
                        continue;
                    }
                    pe  = globalPlaybackEvents.Pop();
                    now = DateTime.Now.Ticks;
                    if (now - 10000000 > frameStartTime)
                    {
                        SpinWait.SpinUntil(() => now - 10000000 < frameStartTime);
                    }
                    timeJump = (int)(((pe.pos - midiTime) * microsecondsPerTick / settings.tempoMultiplier - now + frameStartTime) / 10000);
                    if (timeJump < -1000)
                    {
                        continue;
                    }
                    if (timeJump > 0)
                    {
                        Thread.Sleep(timeJump);
                    }
                    if (settings.playSound && settings.playbackEnabled)
                    {
                        try
                        {
                            KDMAPI.SendDirectData((uint)pe.val);
                        }
                        catch { continue; }
                    }
                }
                catch { continue; }
            }
            KDMAPI.ResetKDMAPIStream();
            KDMAPI.SendDirectData(0x0);
        }