diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml
index 41fafdac..2e0180c0 100755
--- a/android/res/values/strings.xml
+++ b/android/res/values/strings.xml
@@ -133,5 +133,7 @@
Load SSML Template
Enter text to speak:
Volume
+ %s WPM
+ %s%%
\ No newline at end of file
diff --git a/android/src/com/reecedunn/espeak/SpeechSynthesis.java b/android/src/com/reecedunn/espeak/SpeechSynthesis.java
index 83af65bc..c20692d6 100644
--- a/android/src/com/reecedunn/espeak/SpeechSynthesis.java
+++ b/android/src/com/reecedunn/espeak/SpeechSynthesis.java
@@ -192,15 +192,24 @@ public class SpeechSynthesis {
/** Announce some of the punctuation characters. */
public static int PUNCT_SOME = 2;
+ public enum UnitType {
+ Percentage,
+ WordsPerMinute,
+ /** One of the PUNCT_* constants. */
+ Punctuation,
+ }
+
public class Parameter {
private final int id;
private final int min;
private final int max;
+ private final UnitType unitType;
- private Parameter(int id, int min, int max) {
+ private Parameter(int id, int min, int max, UnitType unitType) {
this.id = id;
this.min = min;
this.max = max;
+ this.unitType = unitType;
}
public int getMinValue() {
@@ -226,22 +235,26 @@ public class SpeechSynthesis {
public void setValue(int value) {
nativeSetParameter(id, value);
}
+
+ public UnitType getUnitType() {
+ return unitType;
+ }
}
- /** Speech rate in words per minute. */
- public final Parameter Rate = new Parameter(1, 80, 450);
+ /** Speech rate. */
+ public final Parameter Rate = new Parameter(1, 80, 450, UnitType.WordsPerMinute);
- /** Audio volume in percent. */
- public final Parameter Volume = new Parameter(2, 0, 200);
+ /** Audio volume. */
+ public final Parameter Volume = new Parameter(2, 0, 200, UnitType.Percentage);
- /** Base pitch in percent. */
- public final Parameter Pitch = new Parameter(3, 0, 100);
+ /** Base pitch. */
+ public final Parameter Pitch = new Parameter(3, 0, 100, UnitType.Percentage);
- /** Pitch range in percent (monotone = 0). */
- public final Parameter PitchRange = new Parameter(4, 0, 100);
+ /** Pitch range (monotone = 0). */
+ public final Parameter PitchRange = new Parameter(4, 0, 100, UnitType.Percentage);
- /** Which punctuation characters to announce; see the PUNCT_* constants. */
- public final Parameter Punctuation = new Parameter(5, 0, 2);
+ /** Which punctuation characters to announce. */
+ public final Parameter Punctuation = new Parameter(5, 0, 2, UnitType.Punctuation);
public void synthesize(String text, boolean isSsml) {
nativeSynthesize(text, isSsml);
diff --git a/android/src/com/reecedunn/espeak/TtsSettingsActivity.java b/android/src/com/reecedunn/espeak/TtsSettingsActivity.java
index c09f7b47..6096e01e 100644
--- a/android/src/com/reecedunn/espeak/TtsSettingsActivity.java
+++ b/android/src/com/reecedunn/espeak/TtsSettingsActivity.java
@@ -68,6 +68,18 @@ public class TtsSettingsActivity extends PreferenceActivity {
pref.setOnPreferenceChangeListener(mOnPreferenceChanged);
pref.setPersistent(true);
+ switch (parameter.getUnitType())
+ {
+ case Percentage:
+ pref.getExtras().putString("formatter", context.getString(R.string.formatter_percentage));
+ break;
+ case WordsPerMinute:
+ pref.getExtras().putString("formatter", context.getString(R.string.formatter_wpm));
+ break;
+ default:
+ throw new IllegalStateException("Unsupported unit type for the parameter.");
+ }
+
pref.setMin(parameter.getMinValue());
pref.setMax(parameter.getMaxValue());
@@ -128,9 +140,10 @@ public class TtsSettingsActivity extends PreferenceActivity {
summary = entries[index].toString();
}
} else if (preference instanceof SeekBarPreference) {
- summary = (String)newValue;
+ String formatter = preference.getExtras().getString("formatter");
+ summary = String.format(formatter, (String)newValue);
}
- preference.setSummary(summary.replaceAll("%", "%%"));
+ preference.setSummary(summary);
}
return true;
}