Rewind a couple of seconds when fading in and out on pause/resume Adapted from http://www.rockbox.org/tracker/task/9448 --- apps/gui/wps.c | 9 +++++++++ apps/lang/english.lang | 43 +++++++++++++++++++++++++++++++++++++++++++ apps/menus/playback_menu.c | 6 +++++- apps/settings.h | 2 ++ apps/settings_list.c | 4 ++++ 5 files changed, 63 insertions(+), 1 deletions(-) diff --git a/apps/gui/wps.c b/apps/gui/wps.c index 7d633ad..20178d5 100644 --- a/apps/gui/wps.c +++ b/apps/gui/wps.c @@ -133,6 +133,15 @@ void fade(bool fade_in, bool updatewps) /* zero out the sound */ sound_set_volume(fp_min_vol >> 8); + if (global_settings.rewind_on_fade) { + if (audio_current_track()->elapsed > + (unsigned long)(global_settings.fade_rew*1000)) + audio_ff_rewind(audio_current_track()->elapsed - + (global_settings.fade_rew*1000)); + else + audio_ff_rewind(100); + } + sleep(HZ/10); /* let audio thread run */ audio_resume(); diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 58aed3e..6715901 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -12664,3 +12664,45 @@ usb_power: "Only charge on U S B insert" + + id: LANG_REWIND_ON_FADE + desc: options menu to set rewind on fade + user: core + + *: "Rewind on Fade" + + + *: "Rewind on Fade" + + + *: "Rewind on Fade" + + + + id: LANG_FADE_REWIND_AMOUNT + desc: options menu to set rewind on fade amount + user: core + + *: "Rewind on Fade Amount" + + + *: "Rewind on Fade Amount" + + + *: "Rewind on Fade Amount" + + + + id: LANG_FADE_MENU + desc: in the playback sub menu + user: core + + *: "Fade on Stop" + + + *: "Fade on Stop" + + + *: "Fade on Stop" + + diff --git a/apps/menus/playback_menu.c b/apps/menus/playback_menu.c index 9ed0bc5..6c17c21 100644 --- a/apps/menus/playback_menu.c +++ b/apps/menus/playback_menu.c @@ -87,6 +87,10 @@ 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(rewind_on_fade, &global_settings.rewind_on_fade, NULL); +MENUITEM_SETTING(fade_rew, &global_settings.fade_rew, NULL); +MAKE_MENU(fade_on_stop_settings_menu,ID2P(LANG_FADE_MENU),0, Icon_NOICON, + &fade_on_stop, &rewind_on_fade, &fade_rew); MENUITEM_SETTING(party_mode, &global_settings.party_mode, NULL); #if CONFIG_CODEC == SWCODEC @@ -188,7 +192,7 @@ MAKE_MENU(playback_settings,ID2P(LANG_PLAYBACK),0, #ifdef HAVE_DISK_STORAGE &buffer_margin, #endif - &fade_on_stop, &party_mode, + &fade_on_stop_settings_menu, &party_mode, #if (CONFIG_CODEC == SWCODEC) && defined(HAVE_CROSSFADE) &crossfade_settings_menu, diff --git a/apps/settings.h b/apps/settings.h index ef7544e..f8ed48b 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -596,6 +596,8 @@ struct user_settings int next_folder; /* move to next folder */ int recursive_dir_insert; /* should directories be inserted recursively */ bool fade_on_stop; /* fade on pause/unpause/stop */ + bool rewind_on_fade; /* 0=no 1=yes */ + int fade_rew; /* time in seconds to rewind when unpausing */ bool playlist_shuffle; bool warnon_erase_dynplaylist; /* warn when erasing dynamic playlist */ diff --git a/apps/settings_list.c b/apps/settings_list.c index b3620ea..619179e 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -947,6 +947,10 @@ const struct settings_list settings[] = { OFFON_SETTING(0,play_selected,LANG_PLAY_SELECTED,true,"play selected",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), + OFFON_SETTING(0,rewind_on_fade,LANG_REWIND_ON_FADE,false, + "rewind on fade",NULL), + INT_SETTING(0,fade_rew,LANG_FADE_REWIND_AMOUNT,2, + "rew on fade amount",UNIT_SEC,0,15,1,NULL,NULL,NULL), TABLE_SETTING(F_ALLOW_ARBITRARY_VALS, ff_rewind_min_step, LANG_FFRW_STEP, 1, "scan min step", NULL, UNIT_SEC, NULL, NULL, NULL, 14, 1,2,3,4,5,6,8,10,15,20,25,30,45,60), -- 1.7.1