diff --git a/apps/dsp.c b/apps/dsp.c index 2113d251a1..4bf1ab92d6 100644 --- a/apps/dsp.c +++ b/apps/dsp.c @@ -1175,6 +1175,18 @@ static void channels_process_sound_chan_karaoke(int count, int32_t *buf[]) } #endif /* DSP_HAVE_ASM_SOUND_CHAN_KARAOKE */ +static void channels_process_sound_chan_swap(int count, int32_t *buf[]) +{ + int32_t *sl = buf[0], *sr = buf[1]; + + while (count-- > 0) + { + int32_t ch = *sl; + *sl++ = *sr; + *sr++ = ch; + } +} + static void dsp_set_channel_config(int value) { static const channels_process_fn_type channels_process_functions[] = @@ -1186,6 +1198,7 @@ static void dsp_set_channel_config(int value) [SOUND_CHAN_MONO_LEFT] = channels_process_sound_chan_mono_left, [SOUND_CHAN_MONO_RIGHT] = channels_process_sound_chan_mono_right, [SOUND_CHAN_KARAOKE] = channels_process_sound_chan_karaoke, + [SOUND_CHAN_SWAP] = channels_process_sound_chan_swap, }; if ((unsigned)value >= ARRAYLEN(channels_process_functions) || diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 5a59473681..d3fac86448 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -12903,3 +12903,20 @@ *: "Cancel Sleep Timer" + + id: LANG_CHANNEL_SWAP + desc: in sound_settings + user: core + + *: none + swcodec: "Swap channels" + + + *: none + swcodec: "Swap channels" + + + *: none + swcodec: "Swap channels" + + diff --git a/apps/settings_list.c b/apps/settings_list.c index 521d565f3b..6602ec206a 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -678,11 +678,12 @@ const struct settings_list settings[] = { CHOICE_SETTING(F_SOUNDSETTING, channel_config, LANG_CHANNEL_CONFIGURATION, 0,"channels", - "stereo,mono,custom,mono left,mono right,karaoke", - sound_set_channels, 6, + "stereo,mono,custom,mono left,mono right,karaoke,swap", + sound_set_channels, 7, ID2P(LANG_CHANNEL_STEREO), ID2P(LANG_CHANNEL_MONO), ID2P(LANG_CHANNEL_CUSTOM), ID2P(LANG_CHANNEL_LEFT), - ID2P(LANG_CHANNEL_RIGHT), ID2P(LANG_CHANNEL_KARAOKE)), + ID2P(LANG_CHANNEL_RIGHT), ID2P(LANG_CHANNEL_KARAOKE), + ID2P(LANG_CHANNEL_SWAP)), SOUND_SETTING(F_SOUNDSETTING, stereo_width, LANG_STEREO_WIDTH, "stereo_width", SOUND_STEREO_WIDTH), #ifdef AUDIOHW_HAVE_DEPTH_3D diff --git a/manual/configure_rockbox/sound_settings.tex b/manual/configure_rockbox/sound_settings.tex index 76965d00cb..54031c5a20 100644 --- a/manual/configure_rockbox/sound_settings.tex +++ b/manual/configure_rockbox/sound_settings.tex @@ -169,6 +169,8 @@ change to customise your listening experience. to make the singer sound centrally placed, this often (but not always) has the effect of removing the voice track from a song. This setting also very often has other undesirable effects on the sound. + \item[Swap Channels] + Exchanges the left and right channels. \end{description} \section{Stereo Width}