Files
espeak-ng/android/src/com/reecedunn/espeak/VoiceVariant.java
T
Reece H. Dunn c7a1556101 Rework the Voice variant preference to show a dialog with Category and Variant lists.
The original variant list UI resulted in a long, complex list that
was difficult to navigate. This change splits up that list into
more manageable groups.
2013-09-06 13:10:35 +01:00

88 lines
2.8 KiB
Java

/*
* Copyright (C) 2013 Reece H. Dunn
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.reecedunn.espeak;
import java.util.regex.Pattern;
public class VoiceVariant {
private static final Pattern mVariantPattern = Pattern.compile("-");
public static final String MALE = "male";
public static final String FEMALE = "female";
public final String variant;
public final int gender;
public final int age;
protected VoiceVariant(String variant, int age) {
if (variant.equals(MALE)) {
this.variant = null;
this.gender = SpeechSynthesis.GENDER_MALE;
} else if (variant.equals(FEMALE)) {
this.variant = null;
this.gender = SpeechSynthesis.GENDER_FEMALE;
} else {
this.variant = variant;
this.gender = SpeechSynthesis.GENDER_UNSPECIFIED;
}
this.age = age;
}
@Override
public String toString() {
final String ret;
if (gender == SpeechSynthesis.GENDER_MALE) {
ret = MALE;
} else if (gender == SpeechSynthesis.GENDER_FEMALE) {
ret = FEMALE;
} else {
ret = variant;
}
if (age == SpeechSynthesis.AGE_YOUNG) {
return ret + "-young";
} else if (age == SpeechSynthesis.AGE_OLD) {
return ret + "-old";
}
return ret;
}
public boolean equals(Object o) {
if (o instanceof VoiceVariant) {
VoiceVariant other = (VoiceVariant)o;
if (variant == null || other.variant == null) {
return other.variant == null && variant == null && other.gender == gender && other.age == age;
}
return other.variant.equals(variant) && other.gender == gender && other.age == age;
}
return false;
}
public static VoiceVariant parseVoiceVariant(String value) {
String[] parts = mVariantPattern.split(value);
int age = SpeechSynthesis.AGE_ANY;
switch (parts.length) {
case 1: // variant
break;
case 2: // variant-age
age = parts[1].equals("young") ? SpeechSynthesis.AGE_YOUNG : SpeechSynthesis.AGE_OLD;
break;
default:
return null;
}
return new VoiceVariant(parts[0], age);
}
}