public void Start()
        {
            time_control = MusicPlayerManager.ActivityPlayer as EncodingProcessPlayer;

            if (capturer == null)
            {
                //init capturer post process
                capturer = new CaptureRenderPostProcess();
                RenderKernel.PostProcessesManager.AddPostProcess(capturer);
            }

            if (time_control == null)
            {
                throw new Exception("Current player isn't EncodingProcessPlayer!");
            }

            Writer = EncodingWriterFatory.Create();
            Writer.OnStart(Option);

            Log.User($"Start encoding....");

            is_running = true;

            if (Option.IsExplicitTimeRange)
            {
                time_control.Jump(Option.StartTime, true);
            }

            ToolManager.AfterRender += OnAfterRender;
            prev_time = time_control.CurrentTime;
        }
Exemple #2
0
        public static void Main(string[] argv)
        {
            //Test();
            Environment.CurrentDirectory = System.AppDomain.CurrentDomain.BaseDirectory;

            //hook Ctrl-C action for console window.
            SetConsoleCtrlHandler(type => {
                Exit();
                return(true);
            }, false);

            //apply settings from file
            PlayerSetting.Init();

            //apply settings from commandline
            var args = ParseProgramCommands(argv, out var beatmap_folder);

            //apply features and settings from diff envs
            EnvironmentHelper.SetupEnvironment();

            //Update check and notify
            if (PlayerSetting.EnableUpdateCheck)
            {
                ProgramUpdater.UpdateCheck();
            }

            //clean temp folder if updated just now.
            ProgramUpdater.CleanTemp();

            PlayerSetting.PrintSettings();

            //init window
            StoryboardWindow window = new StoryboardWindow(PlayerSetting.Width, PlayerSetting.Height);

            Log.User($"Start to parse folder :{beatmap_folder}");

            if (Directory.Exists(beatmap_folder))
            {
                var info     = BeatmapFolderInfoEx.Parse(beatmap_folder, args);
                var instance = StoryboardInstance.Load(info);

                window.LoadStoryboardInstance(instance);

                var player = new MusicPlayer();
                player.Load(info.audio_file_path);
                MusicPlayerManager.ApplyPlayer(player);

                var auto_trigger = ToolManager.GetOrCreateTool <AutoTrigger>();
                auto_trigger.Load(info);
                auto_trigger.Trim();
            }
            else
            {
                Exit($"You have to select a beatmap folder which contains storyboard to play");
            }

            if (PlayerSetting.EncodingEnvironment)
            {
                //init encoding environment
                var                   encoding_opt    = new EncoderOption(args);
                EncodingKernel        encoding_kernel = new EncodingKernel(encoding_opt);
                EncodingProcessPlayer encoding_player = new EncodingProcessPlayer(MusicPlayerManager.ActivityPlayer.Length, encoding_opt.FPS);
                MusicPlayerManager.ActivityPlayer.Pause();
                MusicPlayerManager.ApplyPlayer(encoding_player);
                ToolManager.AddTool(encoding_kernel);
                encoding_kernel.Start();
            }

            #region Setup Loop Playback

            if ((PlayerSetting._LoopPlayStartTime != null || PlayerSetting._LoopPlayEndTime != null) && MusicPlayerManager.ActivityPlayer is MusicPlayer mp)
            {
                var len = mp.Length;

                LoopPlayer lp = new LoopPlayer(PlayerSetting._LoopPlayStartTime ?? 0, PlayerSetting._LoopPlayEndTime ?? len);

                Log.User($"Loop playback : {lp}");

                MusicPlayerManager.ApplyPlayer(lp);
            }

            #endregion

            MusicPlayerManager.ActivityPlayer.Volume = PlayerSetting.Volume;

            MusicPlayerManager.ActivityPlayer?.Play();

            window.Run();

            /*/ 不曾设想的操作.jpg
             * window.IsVisible = true;
             * window.RefreshResize();
             *
             * while (true)
             * {
             *  UpdateKernel.Update();
             *  RenderKernel.Draw();
             *  window.SwapBuffers();
             *  UpdateKernel.FrameRateLimit();
             *  Application.DoEvents();
             * }
             * /*/
        }