import java.util.Set; | import java.util.Set; | ||||
import com.reecedunn.espeak.SpeechSynthesis; | import com.reecedunn.espeak.SpeechSynthesis; | ||||
import com.reecedunn.espeak.SpeechSynthesis.Voice; | |||||
import com.reecedunn.espeak.Voice; | |||||
import android.content.Intent; | import android.content.Intent; | ||||
import android.content.pm.ActivityInfo; | import android.content.pm.ActivityInfo; |
import android.util.Log; | import android.util.Log; | ||||
import com.reecedunn.espeak.SpeechSynthesis.SynthReadyCallback; | import com.reecedunn.espeak.SpeechSynthesis.SynthReadyCallback; | ||||
import com.reecedunn.espeak.SpeechSynthesis.Voice; | |||||
import java.io.ByteArrayOutputStream; | import java.io.ByteArrayOutputStream; | ||||
import java.io.File; | import java.io.File; |
import android.content.Context; | import android.content.Context; | ||||
import android.content.res.Configuration; | import android.content.res.Configuration; | ||||
import android.content.res.Resources; | import android.content.res.Resources; | ||||
import android.speech.tts.TextToSpeech; | |||||
import android.util.DisplayMetrics; | import android.util.DisplayMetrics; | ||||
import android.util.Log; | import android.util.Log; | ||||
void onSynthDataComplete(); | void onSynthDataComplete(); | ||||
} | } | ||||
public class Voice { | |||||
public final String name; | |||||
public final String identifier; | |||||
public final int gender; | |||||
public final int age; | |||||
public final Locale locale; | |||||
public Voice(String name, String identifier, int gender, int age, Locale locale) { | |||||
this.name = name; | |||||
this.identifier = identifier; | |||||
this.gender = gender; | |||||
this.age = age; | |||||
this.locale = locale; | |||||
} | |||||
/** | |||||
* Attempts a partial match against a query locale. | |||||
* | |||||
* @param query The locale to match. | |||||
* @return A text-to-speech availability code. One of: | |||||
* <ul> | |||||
* <li>{@link TextToSpeech#LANG_NOT_SUPPORTED} | |||||
* <li>{@link TextToSpeech#LANG_AVAILABLE} | |||||
* <li>{@link TextToSpeech#LANG_COUNTRY_AVAILABLE} | |||||
* <li>{@link TextToSpeech#LANG_COUNTRY_VAR_AVAILABLE} | |||||
* </ul> | |||||
*/ | |||||
public int match(Locale query) { | |||||
if (!locale.getISO3Language().equals(query.getISO3Language())) { | |||||
return TextToSpeech.LANG_NOT_SUPPORTED; | |||||
} else if (!locale.getISO3Country().equals(query.getISO3Country())) { | |||||
return TextToSpeech.LANG_AVAILABLE; | |||||
} else if (!locale.getVariant().equals(query.getVariant())) { | |||||
return TextToSpeech.LANG_COUNTRY_AVAILABLE; | |||||
} else { | |||||
return TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE; | |||||
} | |||||
} | |||||
@Override | |||||
public String toString() { | |||||
return locale.toString().replace('_', '-'); | |||||
} | |||||
} | |||||
private static String getIanaLocaleCode(String code, final Map<String, String> javaToIana) { | private static String getIanaLocaleCode(String code, final Map<String, String> javaToIana) { | ||||
final String iana = javaToIana.get(code); | final String iana = javaToIana.get(code); | ||||
if (iana != null) { | if (iana != null) { |
import android.util.Log; | import android.util.Log; | ||||
import com.reecedunn.espeak.SpeechSynthesis.SynthReadyCallback; | import com.reecedunn.espeak.SpeechSynthesis.SynthReadyCallback; | ||||
import com.reecedunn.espeak.SpeechSynthesis.Voice; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Locale; | import java.util.Locale; |
/* | |||||
* Copyright (C) 2012-2013 Reece H. Dunn | |||||
* Copyright (C) 2011 Google Inc. | |||||
* | |||||
* 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.Locale; | |||||
import android.speech.tts.TextToSpeech; | |||||
public class Voice { | |||||
public final String name; | |||||
public final String identifier; | |||||
public final int gender; | |||||
public final int age; | |||||
public final Locale locale; | |||||
public Voice(String name, String identifier, int gender, int age, Locale locale) { | |||||
this.name = name; | |||||
this.identifier = identifier; | |||||
this.gender = gender; | |||||
this.age = age; | |||||
this.locale = locale; | |||||
} | |||||
/** | |||||
* Attempts a partial match against a query locale. | |||||
* | |||||
* @param query The locale to match. | |||||
* @return A text-to-speech availability code. One of: | |||||
* <ul> | |||||
* <li>{@link TextToSpeech#LANG_NOT_SUPPORTED} | |||||
* <li>{@link TextToSpeech#LANG_AVAILABLE} | |||||
* <li>{@link TextToSpeech#LANG_COUNTRY_AVAILABLE} | |||||
* <li>{@link TextToSpeech#LANG_COUNTRY_VAR_AVAILABLE} | |||||
* </ul> | |||||
*/ | |||||
public int match(Locale query) { | |||||
if (!locale.getISO3Language().equals(query.getISO3Language())) { | |||||
return TextToSpeech.LANG_NOT_SUPPORTED; | |||||
} else if (!locale.getISO3Country().equals(query.getISO3Country())) { | |||||
return TextToSpeech.LANG_AVAILABLE; | |||||
} else if (!locale.getVariant().equals(query.getVariant())) { | |||||
return TextToSpeech.LANG_COUNTRY_AVAILABLE; | |||||
} else { | |||||
return TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE; | |||||
} | |||||
} | |||||
@Override | |||||
public String toString() { | |||||
return locale.toString().replace('_', '-'); | |||||
} | |||||
} |