Add a pitch seekbar for TTS speech output.

Bug: 27137452
Change-Id: I0992333822b4b1cd561dfa2501e47270ff4964b9
This commit is contained in:
shwetachahar
2016-02-23 14:37:06 +00:00
parent 2c9911f190
commit 4ac718b7b5
2 changed files with 51 additions and 5 deletions

View File

@@ -24,6 +24,8 @@
<PreferenceCategory android:key="tts_general_section" <PreferenceCategory android:key="tts_general_section"
android:title="@string/tts_general_section_title"> android:title="@string/tts_general_section_title">
<!-- The max value for seek bars here should be kept in sync
with the max value specified in TextToSpeechSettings class. -->
<com.android.settings.SeekBarPreference <com.android.settings.SeekBarPreference
android:key="tts_default_rate" android:key="tts_default_rate"
android:title="@string/tts_default_rate_title" android:title="@string/tts_default_rate_title"
@@ -32,6 +34,14 @@
android:max="600" android:max="600"
android:layout="@layout/preference_iconless_slider" /> android:layout="@layout/preference_iconless_slider" />
<com.android.settings.SeekBarPreference
android:key="tts_default_pitch"
android:title="@string/tts_default_pitch_title"
android:summary="@string/tts_default_pitch_summary"
android:defaultValue="100"
android:max="500"
android:layout="@layout/preference_iconless_slider" />
<Preference android:key="reset_speech_rate" <Preference android:key="reset_speech_rate"
android:persistent="false" android:persistent="false"
android:title="@string/tts_reset_speech_rate_title" android:title="@string/tts_reset_speech_rate_title"

View File

@@ -48,6 +48,7 @@ import java.util.MissingResourceException;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import static android.provider.Settings.Secure.TTS_DEFAULT_PITCH;
import static android.provider.Settings.Secure.TTS_DEFAULT_RATE; import static android.provider.Settings.Secure.TTS_DEFAULT_RATE;
import static android.provider.Settings.Secure.TTS_DEFAULT_SYNTH; import static android.provider.Settings.Secure.TTS_DEFAULT_SYNTH;
@@ -59,9 +60,12 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
private static final boolean DBG = false; private static final boolean DBG = false;
/** Preference key for the "play TTS example" preference. */ /** Preference key for the "play TTS example" preference. */
private static final String KEY_PLAY_EXAMPLE = "tts_play_example"; private static final String KEY_PLAY_EXAMPLE = "tts_play_example";;
/** Preference key for the TTS rate selection dialog. */ /** Preference key for the TTS pitch selection slider. */
private static final String KEY_DEFAULT_PITCH = "tts_default_pitch";
/** Preference key for the TTS rate selection slider. */
private static final String KEY_DEFAULT_RATE = "tts_default_rate"; private static final String KEY_DEFAULT_RATE = "tts_default_rate";
/** Preference key for the TTS reset speech rate preference. */ /** Preference key for the TTS reset speech rate preference. */
@@ -83,16 +87,29 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
private static final int VOICE_DATA_INTEGRITY_CHECK = 1977; private static final int VOICE_DATA_INTEGRITY_CHECK = 1977;
/** /**
* Maximum speech rate values. * Maximum speech rate value.
* This value should be kept in sync with the max value set in tts_settings xml.
*/ */
private static final int MAX_SPEECH_RATE = 600; private static final int MAX_SPEECH_RATE = 600;
/**
* Maximum speech pitch value. Pitch value varies from 50 to 500, where 100
* is the value for normal pitch. The max pitch value is set to 500, based on
* feedback from a few accessibility users. The range for pitch is not set in stone,
* and should be readjusted based on user need.
*
* This value should be kept in sync with the max value set in tts_settings xml.
*/
private static final int MAX_SPEECH_PITCH = 500;
private PreferenceCategory mEnginePreferenceCategory; private PreferenceCategory mEnginePreferenceCategory;
private SeekBarPreference mDefaultPitchPref;
private SeekBarPreference mDefaultRatePref; private SeekBarPreference mDefaultRatePref;
private Preference mResetSpeechRate; private Preference mResetSpeechRate;
private Preference mPlayExample; private Preference mPlayExample;
private Preference mEngineStatus; private Preference mEngineStatus;
private int mDefaultPitch = TextToSpeech.Engine.DEFAULT_PITCH;
private int mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE; private int mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
/** /**
@@ -174,6 +191,7 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
mEnginePreferenceCategory = (PreferenceCategory) findPreference( mEnginePreferenceCategory = (PreferenceCategory) findPreference(
KEY_ENGINE_PREFERENCE_SECTION); KEY_ENGINE_PREFERENCE_SECTION);
mDefaultPitchPref = (SeekBarPreference) findPreference(KEY_DEFAULT_PITCH);
mDefaultRatePref = (SeekBarPreference) findPreference(KEY_DEFAULT_RATE); mDefaultRatePref = (SeekBarPreference) findPreference(KEY_DEFAULT_RATE);
mEngineStatus = findPreference(KEY_STATUS); mEngineStatus = findPreference(KEY_STATUS);
@@ -233,17 +251,23 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
private void initSettings() { private void initSettings() {
final ContentResolver resolver = getContentResolver(); final ContentResolver resolver = getContentResolver();
// Set up the default rate. // Set up the default rate and pitch.
try { try {
mDefaultPitch = android.provider.Settings.Secure.getInt(resolver, TTS_DEFAULT_PITCH);
mDefaultRate = android.provider.Settings.Secure.getInt(resolver, TTS_DEFAULT_RATE); mDefaultRate = android.provider.Settings.Secure.getInt(resolver, TTS_DEFAULT_RATE);
} catch (SettingNotFoundException e) { } catch (SettingNotFoundException e) {
// Default rate setting not found, initialize it // Default rate and pitch setting not found, initialize it.
mDefaultPitch = TextToSpeech.Engine.DEFAULT_PITCH;
mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE; mDefaultRate = TextToSpeech.Engine.DEFAULT_RATE;
} }
mDefaultRatePref.setProgress(mDefaultRate); mDefaultRatePref.setProgress(mDefaultRate);
mDefaultRatePref.setOnPreferenceChangeListener(this); mDefaultRatePref.setOnPreferenceChangeListener(this);
mDefaultRatePref.setMax(MAX_SPEECH_RATE); mDefaultRatePref.setMax(MAX_SPEECH_RATE);
mDefaultPitchPref.setProgress(mDefaultPitch);
mDefaultPitchPref.setOnPreferenceChangeListener(this);
mDefaultPitchPref.setMax(MAX_SPEECH_PITCH);
mCurrentEngine = mTts.getCurrentEngine(); mCurrentEngine = mTts.getCurrentEngine();
SettingsActivity activity = null; SettingsActivity activity = null;
@@ -461,6 +485,18 @@ public class TextToSpeechSettings extends SettingsPreferenceFragment implements
public boolean onPreferenceChange(Preference preference, Object objValue) { public boolean onPreferenceChange(Preference preference, Object objValue) {
if (KEY_DEFAULT_RATE.equals(preference.getKey())) { if (KEY_DEFAULT_RATE.equals(preference.getKey())) {
updateSpeechRate(((Integer) objValue).intValue()); updateSpeechRate(((Integer) objValue).intValue());
} else if (KEY_DEFAULT_PITCH.equals(preference.getKey())) {
mDefaultPitch = ((Integer) objValue).intValue();
try {
android.provider.Settings.Secure.putInt(getContentResolver(),
TTS_DEFAULT_PITCH, mDefaultPitch);
if (mTts != null) {
mTts.setPitch(mDefaultPitch / 100.0f);
}
if (DBG) Log.d(TAG, "TTS default pitch changed, now" + mDefaultPitch);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist default TTS pitch setting", e);
}
} }
return true; return true;
} }