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."); } }