Merge change 6227 into donut

* changes:
  Adding tts result codes.
This commit is contained in:
Android (Google) Code Review
2009-07-06 11:26:15 -07:00
2 changed files with 74 additions and 48 deletions

View File

@@ -298,7 +298,7 @@ android_tts_SynthProxy_isLanguageAvailable(JNIEnv *env, jobject thiz, jint jniDa
const char *langNativeString = env->GetStringUTFChars(language, 0); const char *langNativeString = env->GetStringUTFChars(language, 0);
const char *countryNativeString = env->GetStringUTFChars(country, 0); const char *countryNativeString = env->GetStringUTFChars(country, 0);
const char *variantNativeString = env->GetStringUTFChars(variant, 0); const char *variantNativeString = env->GetStringUTFChars(variant, 0);
// TODO check return codes
if (pSynthData->mNativeSynthInterface) { if (pSynthData->mNativeSynthInterface) {
result = pSynthData->mNativeSynthInterface->isLanguageAvailable(langNativeString, result = pSynthData->mNativeSynthInterface->isLanguageAvailable(langNativeString,
countryNativeString, variantNativeString); countryNativeString, variantNativeString);
@@ -310,61 +310,70 @@ android_tts_SynthProxy_isLanguageAvailable(JNIEnv *env, jobject thiz, jint jniDa
} }
static void static int
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)
{ {
int result = TTS_LANG_NOT_SUPPORTED;
if (jniData == 0) { if (jniData == 0) {
LOGE("android_tts_SynthProxy_setLanguage(): invalid JNI data"); LOGE("android_tts_SynthProxy_setLanguage(): invalid JNI data");
return; return result;
} }
SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData; SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
const char *langNativeString = env->GetStringUTFChars(language, 0); const char *langNativeString = env->GetStringUTFChars(language, 0);
const char *countryNativeString = env->GetStringUTFChars(country, 0); const char *countryNativeString = env->GetStringUTFChars(country, 0);
const char *variantNativeString = env->GetStringUTFChars(variant, 0); const char *variantNativeString = env->GetStringUTFChars(variant, 0);
// TODO check return codes
if (pSynthData->mNativeSynthInterface) { if (pSynthData->mNativeSynthInterface) {
pSynthData->mNativeSynthInterface->setLanguage(langNativeString, countryNativeString, result = pSynthData->mNativeSynthInterface->setLanguage(langNativeString,
variantNativeString); countryNativeString, variantNativeString);
} }
env->ReleaseStringUTFChars(language, langNativeString); env->ReleaseStringUTFChars(language, langNativeString);
env->ReleaseStringUTFChars(country, countryNativeString); env->ReleaseStringUTFChars(country, countryNativeString);
env->ReleaseStringUTFChars(variant, variantNativeString); env->ReleaseStringUTFChars(variant, variantNativeString);
return result;
} }
static void static int
android_tts_SynthProxy_loadLanguage(JNIEnv *env, jobject thiz, jint jniData, android_tts_SynthProxy_loadLanguage(JNIEnv *env, jobject thiz, jint jniData,
jstring language, jstring country, jstring variant) jstring language, jstring country, jstring variant)
{ {
int result = TTS_LANG_NOT_SUPPORTED;
if (jniData == 0) { if (jniData == 0) {
LOGE("android_tts_SynthProxy_loadLanguage(): invalid JNI data"); LOGE("android_tts_SynthProxy_loadLanguage(): invalid JNI data");
return; return result;
} }
SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData; SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
const char *langNativeString = env->GetStringUTFChars(language, 0); const char *langNativeString = env->GetStringUTFChars(language, 0);
const char *countryNativeString = env->GetStringUTFChars(country, 0); const char *countryNativeString = env->GetStringUTFChars(country, 0);
const char *variantNativeString = env->GetStringUTFChars(variant, 0); const char *variantNativeString = env->GetStringUTFChars(variant, 0);
// TODO check return codes
if (pSynthData->mNativeSynthInterface) { if (pSynthData->mNativeSynthInterface) {
pSynthData->mNativeSynthInterface->loadLanguage(langNativeString, countryNativeString, result = pSynthData->mNativeSynthInterface->loadLanguage(langNativeString,
variantNativeString); countryNativeString, variantNativeString);
} }
env->ReleaseStringUTFChars(language, langNativeString); env->ReleaseStringUTFChars(language, langNativeString);
env->ReleaseStringUTFChars(country, countryNativeString); env->ReleaseStringUTFChars(country, countryNativeString);
env->ReleaseStringUTFChars(variant, variantNativeString); env->ReleaseStringUTFChars(variant, variantNativeString);
return result;
} }
static void static int
android_tts_SynthProxy_setSpeechRate(JNIEnv *env, jobject thiz, jint jniData, android_tts_SynthProxy_setSpeechRate(JNIEnv *env, jobject thiz, jint jniData,
jint speechRate) jint speechRate)
{ {
int result = TTS_FAILURE;
if (jniData == 0) { if (jniData == 0) {
LOGE("android_tts_SynthProxy_setSpeechRate(): invalid JNI data"); LOGE("android_tts_SynthProxy_setSpeechRate(): invalid JNI data");
return; return result;
} }
int bufSize = 10; int bufSize = 10;
@@ -373,20 +382,24 @@ android_tts_SynthProxy_setSpeechRate(JNIEnv *env, jobject thiz, jint jniData,
SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData; SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
LOGI("setting speech rate to %d", speechRate); LOGI("setting speech rate to %d", speechRate);
// TODO check return codes
if (pSynthData->mNativeSynthInterface) { if (pSynthData->mNativeSynthInterface) {
pSynthData->mNativeSynthInterface->setProperty("rate", buffer, bufSize); result = pSynthData->mNativeSynthInterface->setProperty("rate", buffer, bufSize);
} }
return result;
} }
static void static int
android_tts_SynthProxy_setPitch(JNIEnv *env, jobject thiz, jint jniData, android_tts_SynthProxy_setPitch(JNIEnv *env, jobject thiz, jint jniData,
jint pitch) jint pitch)
{ {
int result = TTS_FAILURE;
if (jniData == 0) { if (jniData == 0) {
LOGE("android_tts_SynthProxy_setPitch(): invalid JNI data"); LOGE("android_tts_SynthProxy_setPitch(): invalid JNI data");
return; return result;
} }
int bufSize = 10; int bufSize = 10;
@@ -395,26 +408,30 @@ android_tts_SynthProxy_setPitch(JNIEnv *env, jobject thiz, jint jniData,
SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData; SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
LOGI("setting pitch to %d", pitch); LOGI("setting pitch to %d", pitch);
// TODO check return codes
if (pSynthData->mNativeSynthInterface) { if (pSynthData->mNativeSynthInterface) {
pSynthData->mNativeSynthInterface->setProperty("pitch", buffer, bufSize); result = pSynthData->mNativeSynthInterface->setProperty("pitch", buffer, bufSize);
} }
return result;
} }
static void static int
android_tts_SynthProxy_synthesizeToFile(JNIEnv *env, jobject thiz, jint jniData, android_tts_SynthProxy_synthesizeToFile(JNIEnv *env, jobject thiz, jint jniData,
jstring textJavaString, jstring filenameJavaString) jstring textJavaString, jstring filenameJavaString)
{ {
int result = TTS_FAILURE;
if (jniData == 0) { if (jniData == 0) {
LOGE("android_tts_SynthProxy_synthesizeToFile(): invalid JNI data"); LOGE("android_tts_SynthProxy_synthesizeToFile(): invalid JNI data");
return; return result;
} }
SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData; SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
if (!pSynthData->mNativeSynthInterface) { if (!pSynthData->mNativeSynthInterface) {
LOGE("android_tts_SynthProxy_synthesizeToFile(): invalid engine handle"); LOGE("android_tts_SynthProxy_synthesizeToFile(): invalid engine handle");
return; return result;
} }
// Retrieve audio parameters before writing the file header // Retrieve audio parameters before writing the file header
@@ -425,7 +442,7 @@ android_tts_SynthProxy_synthesizeToFile(JNIEnv *env, jobject thiz, jint jniData,
if ((encoding != AudioSystem::PCM_16_BIT) && (encoding != AudioSystem::PCM_8_BIT)) { if ((encoding != AudioSystem::PCM_16_BIT) && (encoding != AudioSystem::PCM_8_BIT)) {
LOGE("android_tts_SynthProxy_synthesizeToFile(): engine uses invalid format"); LOGE("android_tts_SynthProxy_synthesizeToFile(): engine uses invalid format");
return; return result;
} }
const char *filenameNativeString = const char *filenameNativeString =
@@ -441,7 +458,7 @@ android_tts_SynthProxy_synthesizeToFile(JNIEnv *env, jobject thiz, jint jniData,
if (pForAfter->outputFile == NULL) { if (pForAfter->outputFile == NULL) {
LOGE("android_tts_SynthProxy_synthesizeToFile(): error creating output file"); LOGE("android_tts_SynthProxy_synthesizeToFile(): error creating output file");
delete pForAfter; delete pForAfter;
return; return result;
} }
// Write 44 blank bytes for WAV header, then come back and fill them in // Write 44 blank bytes for WAV header, then come back and fill them in
@@ -451,9 +468,8 @@ android_tts_SynthProxy_synthesizeToFile(JNIEnv *env, jobject thiz, jint jniData,
unsigned int unique_identifier; unsigned int unique_identifier;
// TODO check return codes result = pSynthData->mNativeSynthInterface->synthesizeText(textNativeString,
pSynthData->mNativeSynthInterface->synthesizeText(textNativeString, pSynthData->mBuffer, pSynthData->mBuffer, pSynthData->mBufferSize, (void *)pForAfter);
pSynthData->mBufferSize, (void *)pForAfter);
long filelen = ftell(pForAfter->outputFile); long filelen = ftell(pForAfter->outputFile);
@@ -503,16 +519,20 @@ android_tts_SynthProxy_synthesizeToFile(JNIEnv *env, jobject thiz, jint jniData,
env->ReleaseStringUTFChars(textJavaString, textNativeString); env->ReleaseStringUTFChars(textJavaString, textNativeString);
env->ReleaseStringUTFChars(filenameJavaString, filenameNativeString); env->ReleaseStringUTFChars(filenameJavaString, filenameNativeString);
return result;
} }
static void static int
android_tts_SynthProxy_speak(JNIEnv *env, jobject thiz, jint jniData, android_tts_SynthProxy_speak(JNIEnv *env, jobject thiz, jint jniData,
jstring textJavaString) jstring textJavaString)
{ {
int result = TTS_FAILURE;
if (jniData == 0) { if (jniData == 0) {
LOGE("android_tts_SynthProxy_speak(): invalid JNI data"); LOGE("android_tts_SynthProxy_speak(): invalid JNI data");
return; return result;
} }
SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData; SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
@@ -528,29 +548,35 @@ android_tts_SynthProxy_speak(JNIEnv *env, jobject thiz, jint jniData,
if (pSynthData->mNativeSynthInterface) { if (pSynthData->mNativeSynthInterface) {
const char *textNativeString = env->GetStringUTFChars(textJavaString, 0); const char *textNativeString = env->GetStringUTFChars(textJavaString, 0);
pSynthData->mNativeSynthInterface->synthesizeText(textNativeString, pSynthData->mBuffer, result = pSynthData->mNativeSynthInterface->synthesizeText(textNativeString,
pSynthData->mBufferSize, (void *)pForAfter); pSynthData->mBuffer, pSynthData->mBufferSize, (void *)pForAfter);
env->ReleaseStringUTFChars(textJavaString, textNativeString); env->ReleaseStringUTFChars(textJavaString, textNativeString);
} }
return result;
} }
static void static int
android_tts_SynthProxy_stop(JNIEnv *env, jobject thiz, jint jniData) android_tts_SynthProxy_stop(JNIEnv *env, jobject thiz, jint jniData)
{ {
int result = TTS_FAILURE;
if (jniData == 0) { if (jniData == 0) {
LOGE("android_tts_SynthProxy_stop(): invalid JNI data"); LOGE("android_tts_SynthProxy_stop(): invalid JNI data");
return; return result;
} }
SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData; SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
if (pSynthData->mNativeSynthInterface) { if (pSynthData->mNativeSynthInterface) {
pSynthData->mNativeSynthInterface->stop(); result = pSynthData->mNativeSynthInterface->stop();
} }
if (pSynthData->mAudioOut) { if (pSynthData->mAudioOut) {
pSynthData->mAudioOut->stop(); pSynthData->mAudioOut->stop();
} }
return result;
} }
@@ -642,15 +668,15 @@ android_tts_SynthProxy_getRate(JNIEnv *env, jobject thiz, jint jniData)
// Dalvik VM type signatures // Dalvik VM type signatures
static JNINativeMethod gMethods[] = { static JNINativeMethod gMethods[] = {
{ "native_stop", { "native_stop",
"(I)V", "(I)I",
(void*)android_tts_SynthProxy_stop (void*)android_tts_SynthProxy_stop
}, },
{ "native_speak", { "native_speak",
"(ILjava/lang/String;)V", "(ILjava/lang/String;)I",
(void*)android_tts_SynthProxy_speak (void*)android_tts_SynthProxy_speak
}, },
{ "native_synthesizeToFile", { "native_synthesizeToFile",
"(ILjava/lang/String;Ljava/lang/String;)V", "(ILjava/lang/String;Ljava/lang/String;)I",
(void*)android_tts_SynthProxy_synthesizeToFile (void*)android_tts_SynthProxy_synthesizeToFile
}, },
{ "native_isLanguageAvailable", { "native_isLanguageAvailable",
@@ -658,19 +684,19 @@ static JNINativeMethod gMethods[] = {
(void*)android_tts_SynthProxy_isLanguageAvailable (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;)I",
(void*)android_tts_SynthProxy_setLanguage (void*)android_tts_SynthProxy_setLanguage
}, },
{ "native_loadLanguage", { "native_loadLanguage",
"(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I",
(void*)android_tts_SynthProxy_loadLanguage (void*)android_tts_SynthProxy_loadLanguage
}, },
{ "native_setSpeechRate", { "native_setSpeechRate",
"(II)V", "(II)I",
(void*)android_tts_SynthProxy_setSpeechRate (void*)android_tts_SynthProxy_setSpeechRate
}, },
{ "native_setPitch", { "native_setPitch",
"(II)V", "(II)I",
(void*)android_tts_SynthProxy_setPitch (void*)android_tts_SynthProxy_setPitch
}, },
{ "native_playAudioBuffer", { "native_playAudioBuffer",

View File

@@ -156,24 +156,24 @@ public class SynthProxy {
private native final void native_finalize(int jniData); private native final void native_finalize(int jniData);
private native final void native_stop(int jniData); private native final int native_stop(int jniData);
private native final void native_speak(int jniData, String text); private native final int native_speak(int jniData, String text);
private native final void native_synthesizeToFile(int jniData, String text, String filename); private native final int native_synthesizeToFile(int jniData, String text, String filename);
private native final int native_isLanguageAvailable(int jniData, String language, private native final int native_isLanguageAvailable(int jniData, String language,
String country, String variant); String country, String variant);
private native final void native_setLanguage(int jniData, String language, String country, private native final int 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 int 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 int native_setSpeechRate(int jniData, int speechRate);
private native final void native_setPitch(int jniData, int speechRate); private native final int 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);