Merge change 5701 into donut

* changes:
  Expose in SynthProxy the query for the TTS supported and current language.
This commit is contained in:
Android (Google) Code Review
2009-06-29 16:09:44 -07:00
2 changed files with 74 additions and 22 deletions

View File

@@ -278,6 +278,33 @@ android_tts_SynthProxy_native_finalize(JNIEnv *env, jobject thiz, jint jniData)
} }
static int
android_tts_SynthProxy_isLanguageAvailable(JNIEnv *env, jobject thiz, jint jniData,
jstring language, jstring country, jstring variant)
{
int result = TTS_LANG_NOT_SUPPORTED;
if (jniData == 0) {
LOGE("android_tts_SynthProxy_isLanguageAvailable(): invalid JNI data");
return result;
}
SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
const char *langNativeString = env->GetStringUTFChars(language, 0);
const char *countryNativeString = env->GetStringUTFChars(country, 0);
const char *variantNativeString = env->GetStringUTFChars(variant, 0);
// TODO check return codes
if (pSynthData->mNativeSynthInterface) {
result = pSynthData->mNativeSynthInterface->isLanguageAvailable(langNativeString,
countryNativeString, variantNativeString);
}
env->ReleaseStringUTFChars(language, langNativeString);
env->ReleaseStringUTFChars(country, countryNativeString);
env->ReleaseStringUTFChars(variant, variantNativeString);
return result;
}
static void static void
android_tts_SynthProxy_setLanguage(JNIEnv *env, jobject thiz, jint jniData, android_tts_SynthProxy_setLanguage(JNIEnv *env, jobject thiz, jint jniData,
jstring language, jstring country, jstring variant) jstring language, jstring country, jstring variant)
@@ -533,24 +560,34 @@ LOGI("android_tts_SynthProxy_playAudioBuffer");
} }
JNIEXPORT jstring JNICALL static jobjectArray
android_tts_SynthProxy_getLanguage(JNIEnv *env, jobject thiz, jint jniData) android_tts_SynthProxy_getLanguage(JNIEnv *env, jobject thiz, jint jniData)
{ {
if (jniData == 0) { if (jniData == 0) {
LOGE("android_tts_SynthProxy_getLanguage(): invalid JNI data"); LOGE("android_tts_SynthProxy_getLanguage(): invalid JNI data");
return env->NewStringUTF(""); return NULL;
} }
SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData; SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
size_t bufSize = 100;
char buf[bufSize];
memset(buf, 0, bufSize);
// TODO check return codes
if (pSynthData->mNativeSynthInterface) { if (pSynthData->mNativeSynthInterface) {
// TODO use the correct getLanguage() size_t bufSize = 100;
//pSynthData->mNativeSynthInterface->getLanguage(buf, &bufSize); char lang[bufSize];
char country[bufSize];
char variant[bufSize];
memset(lang, 0, bufSize);
memset(country, 0, bufSize);
memset(variant, 0, bufSize);
jobjectArray retLocale = (jobjectArray)env->NewObjectArray(3,
env->FindClass("java/lang/String"), env->NewStringUTF(""));
pSynthData->mNativeSynthInterface->getLanguage(lang, country, variant);
env->SetObjectArrayElement(retLocale, 0, env->NewStringUTF(lang));
env->SetObjectArrayElement(retLocale, 1, env->NewStringUTF(country));
env->SetObjectArrayElement(retLocale, 2, env->NewStringUTF(variant));
return retLocale;
} else {
return NULL;
} }
return env->NewStringUTF(buf);
} }
@@ -588,6 +625,10 @@ static JNINativeMethod gMethods[] = {
"(ILjava/lang/String;Ljava/lang/String;)V", "(ILjava/lang/String;Ljava/lang/String;)V",
(void*)android_tts_SynthProxy_synthesizeToFile (void*)android_tts_SynthProxy_synthesizeToFile
}, },
{ "native_isLanguageAvailable",
"(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I",
(void*)android_tts_SynthProxy_isLanguageAvailable
},
{ "native_setLanguage", { "native_setLanguage",
"(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
(void*)android_tts_SynthProxy_setLanguage (void*)android_tts_SynthProxy_setLanguage
@@ -609,7 +650,7 @@ static JNINativeMethod gMethods[] = {
(void*)android_tts_SynthProxy_playAudioBuffer (void*)android_tts_SynthProxy_playAudioBuffer
}, },
{ "native_getLanguage", { "native_getLanguage",
"(I)Ljava/lang/String;", "(I)[Ljava/lang/String;",
(void*)android_tts_SynthProxy_getLanguage (void*)android_tts_SynthProxy_getLanguage
}, },
{ "native_getRate", { "native_getRate",

View File

@@ -68,12 +68,20 @@ public class SynthProxy {
// TODO add IPA methods // TODO add IPA methods
/** /**
* Sets the language * Queries for language support.
* Return codes are defined in android.speech.tts.TextToSpeech
*/
public int isLanguageAvailable(String language, String country, String variant) {
return native_isLanguageAvailable(mJniData, language, country, variant);
}
/**
* Sets the language.
*/ */
public void setLanguage(String language, String country, String variant) { public void setLanguage(String language, String country, String variant) {
native_setLanguage(mJniData, language, country, variant); native_setLanguage(mJniData, language, country, variant);
} }
/** /**
* Loads the language: it's not set, but prepared for use later. * Loads the language: it's not set, but prepared for use later.
*/ */
@@ -82,42 +90,42 @@ public class SynthProxy {
} }
/** /**
* Sets the speech rate * Sets the speech rate.
*/ */
public final void setSpeechRate(int speechRate) { public final void setSpeechRate(int speechRate) {
native_setSpeechRate(mJniData, speechRate); native_setSpeechRate(mJniData, speechRate);
} }
/** /**
* Sets the pitch of the synthesized voice * Sets the pitch of the synthesized voice.
*/ */
public final void setPitch(int pitch) { public final void setPitch(int pitch) {
native_setPitch(mJniData, pitch); native_setPitch(mJniData, pitch);
} }
/** /**
* Plays the given audio buffer * Plays the given audio buffer.
*/ */
public void playAudioBuffer(int bufferPointer, int bufferSize) { public void playAudioBuffer(int bufferPointer, int bufferSize) {
native_playAudioBuffer(mJniData, bufferPointer, bufferSize); native_playAudioBuffer(mJniData, bufferPointer, bufferSize);
} }
/** /**
* Gets the currently set language * Returns the currently set language, country and variant information.
*/ */
public String getLanguage() { public String[] getLanguage() {
return native_getLanguage(mJniData); return native_getLanguage(mJniData);
} }
/** /**
* Gets the currently set rate * Gets the currently set rate.
*/ */
public int getRate() { public int getRate() {
return native_getRate(mJniData); return native_getRate(mJniData);
} }
/** /**
* Shuts down the native synthesizer * Shuts down the native synthesizer.
*/ */
public void shutdown() { public void shutdown() {
native_shutdown(mJniData); native_shutdown(mJniData);
@@ -154,20 +162,23 @@ public class SynthProxy {
private native final void native_synthesizeToFile(int jniData, String text, String filename); private native final void native_synthesizeToFile(int jniData, String text, String filename);
private native final int native_isLanguageAvailable(int jniData, String language,
String country, String variant);
private native final void native_setLanguage(int jniData, String language, String country, private native final void native_setLanguage(int jniData, String language, String country,
String variant); String variant);
private native final void native_loadLanguage(int jniData, String language, String country, private native final void native_loadLanguage(int jniData, String language, String country,
String variant); String variant);
private native final void native_setSpeechRate(int jniData, int speechRate); private native final void native_setSpeechRate(int jniData, int speechRate);
private native final void native_setPitch(int jniData, int speechRate); private native final void native_setPitch(int jniData, int speechRate);
// TODO add buffer format // TODO add buffer format
private native final void native_playAudioBuffer(int jniData, int bufferPointer, int bufferSize); private native final void native_playAudioBuffer(int jniData, int bufferPointer, int bufferSize);
private native final String native_getLanguage(int jniData); private native final String[] native_getLanguage(int jniData);
private native final int native_getRate(int jniData); private native final int native_getRate(int jniData);