Merge change 5701 into donut
* changes: Expose in SynthProxy the query for the TTS supported and current language.
This commit is contained in:
@@ -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
|
||||
android_tts_SynthProxy_setLanguage(JNIEnv *env, jobject thiz, jint jniData,
|
||||
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)
|
||||
{
|
||||
if (jniData == 0) {
|
||||
LOGE("android_tts_SynthProxy_getLanguage(): invalid JNI data");
|
||||
return env->NewStringUTF("");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
|
||||
size_t bufSize = 100;
|
||||
char buf[bufSize];
|
||||
memset(buf, 0, bufSize);
|
||||
// TODO check return codes
|
||||
|
||||
if (pSynthData->mNativeSynthInterface) {
|
||||
// TODO use the correct getLanguage()
|
||||
//pSynthData->mNativeSynthInterface->getLanguage(buf, &bufSize);
|
||||
size_t bufSize = 100;
|
||||
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",
|
||||
(void*)android_tts_SynthProxy_synthesizeToFile
|
||||
},
|
||||
{ "native_isLanguageAvailable",
|
||||
"(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I",
|
||||
(void*)android_tts_SynthProxy_isLanguageAvailable
|
||||
},
|
||||
{ "native_setLanguage",
|
||||
"(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
|
||||
(void*)android_tts_SynthProxy_setLanguage
|
||||
@@ -609,7 +650,7 @@ static JNINativeMethod gMethods[] = {
|
||||
(void*)android_tts_SynthProxy_playAudioBuffer
|
||||
},
|
||||
{ "native_getLanguage",
|
||||
"(I)Ljava/lang/String;",
|
||||
"(I)[Ljava/lang/String;",
|
||||
(void*)android_tts_SynthProxy_getLanguage
|
||||
},
|
||||
{ "native_getRate",
|
||||
|
||||
@@ -68,12 +68,20 @@ public class SynthProxy {
|
||||
// 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) {
|
||||
native_setLanguage(mJniData, language, country, variant);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 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) {
|
||||
native_setSpeechRate(mJniData, speechRate);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the pitch of the synthesized voice
|
||||
* Sets the pitch of the synthesized voice.
|
||||
*/
|
||||
public final void setPitch(int pitch) {
|
||||
native_setPitch(mJniData, pitch);
|
||||
}
|
||||
|
||||
/**
|
||||
* Plays the given audio buffer
|
||||
* Plays the given audio buffer.
|
||||
*/
|
||||
public void playAudioBuffer(int bufferPointer, int 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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the currently set rate
|
||||
* Gets the currently set rate.
|
||||
*/
|
||||
public int getRate() {
|
||||
return native_getRate(mJniData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shuts down the native synthesizer
|
||||
* Shuts down the native synthesizer.
|
||||
*/
|
||||
public void shutdown() {
|
||||
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 int native_isLanguageAvailable(int jniData, String language,
|
||||
String country, String variant);
|
||||
|
||||
private native final void native_setLanguage(int jniData, String language, String country,
|
||||
String variant);
|
||||
|
||||
|
||||
private native final void native_loadLanguage(int jniData, String language, String country,
|
||||
String variant);
|
||||
|
||||
private native final void native_setSpeechRate(int jniData, int speechRate);
|
||||
|
||||
|
||||
private native final void native_setPitch(int jniData, int speechRate);
|
||||
|
||||
// TODO add buffer format
|
||||
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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user