From 13ac48562544eada909ee39a63d5b87afe51b219 Mon Sep 17 00:00:00 2001 From: Moshe Piekarski Date: Sun, 31 Oct 2021 02:56:46 -0400 Subject: Add single playback mode (FS#482) Change-Id: I8b4c3e4ffb6975122153e82f2b9848c382195163 --- apps/lang/english-us.lang | 14 ++++++++++++++ apps/lang/english.lang | 14 ++++++++++++++ apps/lang/hebrew.lang | 14 ++++++++++++++ apps/menus/playback_menu.c | 3 ++- apps/pcmbuf.c | 3 +++ apps/playback.c | 8 ++++++++ apps/settings.h | 1 + apps/settings_list.c | 1 + manual/configure_rockbox/playback_options.tex | 5 +++++ 9 files changed, 62 insertions(+), 1 deletion(-) diff --git a/apps/lang/english-us.lang b/apps/lang/english-us.lang index 618ee114fd..6fac22c381 100644 --- a/apps/lang/english-us.lang +++ b/apps/lang/english-us.lang @@ -1299,6 +1299,20 @@ *: "Fade On Stop and Pause" + + id: LANG_SINGLE_MODE + desc: single mode + user: core + + *: "Single Mode" + + + *: "Single Mode" + + + *: "Single Mode" + + id: LANG_PARTY_MODE desc: party mode diff --git a/apps/lang/english.lang b/apps/lang/english.lang index dab9ed8508..69542b6627 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -1375,6 +1375,20 @@ *: "Fade On Stop and Pause" + + id: LANG_SINGLE_MODE + desc: single mode + user: core + + *: "Single Mode" + + + *: "Single Mode" + + + *: "Single Mode" + + id: LANG_PARTY_MODE desc: party mode diff --git a/apps/lang/hebrew.lang b/apps/lang/hebrew.lang index 2f732f0eef..d4da2443b8 100644 --- a/apps/lang/hebrew.lang +++ b/apps/lang/hebrew.lang @@ -1460,6 +1460,20 @@ *: "עמעום צליל בעצירה והפסקה" + + id: LANG_SINGLE_MODE + desc: single mode + user: core + + *: "Single Mode" + + + *: "מצב יחדי" + + + *: "מצב יחדי" + + id: LANG_PARTY_MODE desc: party mode diff --git a/apps/menus/playback_menu.c b/apps/menus/playback_menu.c index 41c738725c..5f9479fae3 100644 --- a/apps/menus/playback_menu.c +++ b/apps/menus/playback_menu.c @@ -92,6 +92,7 @@ MENUITEM_SETTING(buffer_margin, &global_settings.buffer_margin, buffermargin_callback); #endif /*HAVE_DISK_STORAGE */ MENUITEM_SETTING(fade_on_stop, &global_settings.fade_on_stop, NULL); +MENUITEM_SETTING(single_mode, &global_settings.single_mode, NULL); MENUITEM_SETTING(party_mode, &global_settings.party_mode, NULL); #ifdef HAVE_CROSSFADE @@ -208,7 +209,7 @@ MAKE_MENU(playback_settings,ID2P(LANG_PLAYBACK),0, #ifdef HAVE_DISK_STORAGE &buffer_margin, #endif - &fade_on_stop, &party_mode, + &fade_on_stop, &single_mode, &party_mode, #if defined(HAVE_CROSSFADE) &crossfade_settings_menu, diff --git a/apps/pcmbuf.c b/apps/pcmbuf.c index 773e97cce0..c4164c3b4b 100644 --- a/apps/pcmbuf.c +++ b/apps/pcmbuf.c @@ -741,6 +741,9 @@ void pcmbuf_start_track_change(enum pcm_track_change_type type) } } + if (auto_skip && global_settings.single_mode && !global_settings.party_mode) + crossfade = false; + if (crossfade) { logf("crossfade track change"); diff --git a/apps/playback.c b/apps/playback.c index 5a6f18735b..1c5a7a4c9d 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -2396,6 +2396,14 @@ static void audio_finalise_track_change(void) id3_write(PLAYING_ID3, track_id3); + if (global_settings.single_mode) + if ( ((skip_pending == TRACK_SKIP_AUTO) || (skip_pending == TRACK_SKIP_AUTO_NEW_PLAYLIST)) + && (global_settings.party_mode == 0) ) + { + play_status = PLAY_PAUSED; + pcmbuf_pause(true); + } + /* The skip is technically over */ skip_pending = TRACK_SKIP_NONE; diff --git a/apps/settings.h b/apps/settings.h index fedec8e025..9b4c56467d 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -476,6 +476,7 @@ struct user_settings int default_codepage; /* set default codepage for tag conversion */ bool hold_lr_for_scroll_in_list; /* hold L/R scrolls the list left/right */ bool play_selected; /* Plays selected file even in shuffle mode */ + bool single_mode; /* single mode - stop after every track */ bool party_mode; /* party mode - unstoppable music */ bool audioscrobbler; /* Audioscrobbler logging */ bool cuesheet; diff --git a/apps/settings_list.c b/apps/settings_list.c index d9ffd8cf3e..4758c27113 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -1238,6 +1238,7 @@ const struct settings_list settings[] = { #endif /* more playback */ OFFON_SETTING(0,play_selected,LANG_PLAY_SELECTED,true,"play selected",NULL), + OFFON_SETTING(0,single_mode,LANG_SINGLE_MODE,false,"single mode",NULL), OFFON_SETTING(0,party_mode,LANG_PARTY_MODE,false,"party mode",NULL), OFFON_SETTING(0,fade_on_stop,LANG_FADE_ON_STOP,true,"volume fade",NULL), INT_SETTING(F_TIME_SETTING, ff_rewind_min_step, LANG_FFRW_STEP, 1, diff --git a/manual/configure_rockbox/playback_options.tex b/manual/configure_rockbox/playback_options.tex index 7ddd3c6907..aa2cfff1d5 100644 --- a/manual/configure_rockbox/playback_options.tex +++ b/manual/configure_rockbox/playback_options.tex @@ -82,6 +82,11 @@ you to configure settings related to audio playback. set to \setting{Yes}, your music will fade out when you stop or pause playback, and fade in when you resume playback. +\section{Single Mode} + If the Single Mode option is set to \setting{Yes}, your music + will pause at every automatic track change. Crossfade on track + change will be ignored if this setting is enabled. + \section{Party Mode} Enables unstoppable music playback. When new songs are selected, they are queued at the end of the current dynamic playlist -- cgit v1.2.3