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
|
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",
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user