summaryrefslogtreecommitdiff
path: root/apps/settings.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/settings.c')
-rw-r--r--apps/settings.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/apps/settings.c b/apps/settings.c
index adc53cd14b..cf51b0793c 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -85,6 +85,11 @@ struct system_status global_status;
85#ifdef HAVE_RECORDING 85#ifdef HAVE_RECORDING
86#include "enc_config.h" 86#include "enc_config.h"
87#endif 87#endif
88#include "pcm_sampr.h"
89#ifdef HAVE_PLAY_FREQ
90#include "pcm_mixer.h"
91#include "dsp_core.h"
92#endif
88#endif /* CONFIG_CODEC == SWCODEC */ 93#endif /* CONFIG_CODEC == SWCODEC */
89 94
90#define NVRAM_BLOCK_SIZE 44 95#define NVRAM_BLOCK_SIZE 44
@@ -720,6 +725,36 @@ void settings_apply_pm_range(void)
720} 725}
721#endif /* HAVE_LCD_BITMAP */ 726#endif /* HAVE_LCD_BITMAP */
722 727
728#ifdef HAVE_PLAY_FREQ
729void settings_apply_play_freq(int value, bool playback)
730{
731 static const unsigned long play_sampr[] = { SAMPR_44, SAMPR_48 };
732 static int prev_setting = 0;
733
734 if ((unsigned)value >= ARRAYLEN(play_sampr))
735 value = 0;
736
737 bool changed = value != prev_setting;
738 prev_setting = value;
739
740 long offset = 0;
741 bool playing = changed && !playback &&
742 audio_status() == AUDIO_STATUS_PLAY;
743
744 if (playing)
745 offset = audio_current_track()->offset;
746
747 if (changed && !playback)
748 audio_hard_stop();
749
750 /* Other sub-areas of playback pick it up from the mixer */
751 mixer_set_frequency(play_sampr[value]);
752
753 if (playing)
754 audio_play(offset);
755}
756#endif /* HAVE_PLAY_FREQ */
757
723void sound_settings_apply(void) 758void sound_settings_apply(void)
724{ 759{
725#ifdef AUDIOHW_HAVE_BASS 760#ifdef AUDIOHW_HAVE_BASS
@@ -976,6 +1011,9 @@ void settings_apply(bool read_disk)
976 set_codepage(global_settings.default_codepage); 1011 set_codepage(global_settings.default_codepage);
977 CHART("<set_codepage"); 1012 CHART("<set_codepage");
978 1013
1014#ifdef HAVE_PLAY_FREQ
1015 settings_apply_play_freq(global_settings.play_frequency, false);
1016#endif
979#if CONFIG_CODEC == SWCODEC 1017#if CONFIG_CODEC == SWCODEC
980#ifdef HAVE_CROSSFADE 1018#ifdef HAVE_CROSSFADE
981 audio_set_crossfade(global_settings.crossfade); 1019 audio_set_crossfade(global_settings.crossfade);