Example #1
0
        private static void Playback_Finished(object sender, EventArgs e)
        {
            try
            {
                switch ((PlayMode)config.PlayMode)
                {
                case PlayMode.Single:
                    break;

                case PlayMode.ListOrdered:
                    if (EnsembleModeRunning)
                    {
                        return;
                    }
                    try
                    {
                        currentPlayback = PlaylistManager.Filelist[PlaylistManager.CurrentPlaying + 1].GetFilePlayback();
                        PlaylistManager.CurrentPlaying += 1;
                        currentPlayback.Start();
                        Task.Run(() => SwitchInstrument.WaitSwitchInstrument());
                    }
                    catch (Exception exception)
                    {
                    }
                    break;

                case PlayMode.ListRepeat:
                    if (EnsembleModeRunning)
                    {
                        return;
                    }
                    try
                    {
                        currentPlayback = PlaylistManager.Filelist[PlaylistManager.CurrentPlaying + 1].GetFilePlayback();
                        PlaylistManager.CurrentPlaying += 1;
                        currentPlayback.Start();
                        Task.Run(() => SwitchInstrument.WaitSwitchInstrument());
                    }
                    catch (Exception exception)
                    {
                        if (!PlaylistManager.Filelist.Any())
                        {
                            return;
                        }
                        currentPlayback = PlaylistManager.Filelist[0].GetFilePlayback();
                        PlaylistManager.CurrentPlaying = 0;
                        currentPlayback.Start();
                        Task.Run(() => SwitchInstrument.WaitSwitchInstrument());
                    }
                    break;

                case PlayMode.SingleRepeat:
                    currentPlayback.MoveToStart();
                    currentPlayback.Start();
                    break;

                case PlayMode.Random:
                    if (EnsembleModeRunning)
                    {
                        return;
                    }
                    if (!PlaylistManager.Filelist.Any())
                    {
                        return;
                    }
                    try
                    {
                        var r = new Random(); int nexttrack;
                        do
                        {
                            nexttrack = r.Next(0, PlaylistManager.Filelist.Count);
                        } while (nexttrack == PlaylistManager.CurrentPlaying);

                        currentPlayback = PlaylistManager.Filelist[nexttrack].GetFilePlayback();
                        PlaylistManager.CurrentPlaying = nexttrack;
                        currentPlayback.Start();
                        Task.Run(() => SwitchInstrument.WaitSwitchInstrument());
                    }
                    catch (Exception exception)
                    {
                        PluginLog.Error(exception, "error when random next");
                    }
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            catch (Exception exception)
            {
                PluginLog.Fatal(exception, "Unexpected exception when Playback finished.");
            }
        }