Merge "Update TTS plugin interface to receive engine configuration data coming from the plugin helper code (handling config and preferences)."
This commit is contained in:
committed by
Android (Google) Code Review
commit
b50ebe3a15
@@ -26,6 +26,12 @@
|
||||
|
||||
namespace android {
|
||||
|
||||
#define ANDROID_TTS_ENGINE_PROPERTY_CONFIG "engineConfig"
|
||||
#define ANDROID_TTS_ENGINE_PROPERTY_PITCH "pitch"
|
||||
#define ANDROID_TTS_ENGINE_PROPERTY_RATE "rate"
|
||||
#define ANDROID_TTS_ENGINE_PROPERTY_VOLUME "volume"
|
||||
|
||||
|
||||
enum tts_synth_status {
|
||||
TTS_SYNTH_DONE = 0,
|
||||
TTS_SYNTH_PENDING = 1
|
||||
@@ -85,7 +91,7 @@ public:
|
||||
// Initialize the TTS engine and returns whether initialization succeeded.
|
||||
// @param synthDoneCBPtr synthesis callback function pointer
|
||||
// @return TTS_SUCCESS, or TTS_FAILURE
|
||||
virtual tts_result init(synthDoneCB_t synthDoneCBPtr);
|
||||
virtual tts_result init(synthDoneCB_t synthDoneCBPtr, const char *engineConfig);
|
||||
|
||||
// Shut down the TTS engine and releases all associated resources.
|
||||
// @return TTS_SUCCESS, or TTS_FAILURE
|
||||
@@ -122,7 +128,7 @@ public:
|
||||
// @param variant pointer to the variant code
|
||||
// @return TTS_SUCCESS, or TTS_FAILURE
|
||||
virtual tts_result loadLanguage(const char *lang, const char *country, const char *variant);
|
||||
|
||||
|
||||
// Load the resources associated with the specified language, country and Locale variant.
|
||||
// The loaded language will only be used once a call to setLanguageFromLocale() with the same
|
||||
// language value is issued. Language and country values are coded according to the ISO three
|
||||
@@ -220,19 +226,6 @@ public:
|
||||
virtual tts_result synthesizeText(const char *text, int8_t *buffer,
|
||||
size_t bufferSize, void *userdata);
|
||||
|
||||
// Synthesize IPA text.
|
||||
// As the synthesis is performed, the engine invokes the callback to notify
|
||||
// the TTS framework that it has filled the given buffer, and indicates how
|
||||
// many bytes it wrote. The callback is called repeatedly until the engine
|
||||
// has generated all the audio data corresponding to the IPA data.
|
||||
// @param ipa the IPA data to synthesize
|
||||
// @param userdata pointer to be returned when the call is invoked
|
||||
// @param buffer the location where the synthesized data must be written
|
||||
// @param bufferSize the number of bytes that can be written in buffer
|
||||
// @return TTS_FEATURE_UNSUPPORTED if IPA is not supported,
|
||||
// otherwise TTS_SUCCESS or TTS_FAILURE
|
||||
virtual tts_result synthesizeIpa(const char *ipa, int8_t *buffer,
|
||||
size_t bufferSize, void *userdata);
|
||||
};
|
||||
|
||||
} // namespace android
|
||||
|
||||
@@ -383,7 +383,7 @@ android_tts_SynthProxy_setLowShelf(JNIEnv *env, jobject thiz, jboolean applyFilt
|
||||
// ----------------------------------------------------------------------------
|
||||
static int
|
||||
android_tts_SynthProxy_native_setup(JNIEnv *env, jobject thiz,
|
||||
jobject weak_this, jstring nativeSoLib)
|
||||
jobject weak_this, jstring nativeSoLib, jstring engConfig)
|
||||
{
|
||||
int result = TTS_FAILURE;
|
||||
|
||||
@@ -395,6 +395,7 @@ android_tts_SynthProxy_native_setup(JNIEnv *env, jobject thiz,
|
||||
DEFAULT_TTS_STREAM_TYPE, DEFAULT_TTS_RATE, DEFAULT_TTS_FORMAT, DEFAULT_TTS_NB_CHANNELS);
|
||||
|
||||
const char *nativeSoLibNativeString = env->GetStringUTFChars(nativeSoLib, 0);
|
||||
const char *engConfigString = env->GetStringUTFChars(engConfig, 0);
|
||||
|
||||
void *engine_lib_handle = dlopen(nativeSoLibNativeString,
|
||||
RTLD_NOW | RTLD_LOCAL);
|
||||
@@ -409,7 +410,7 @@ android_tts_SynthProxy_native_setup(JNIEnv *env, jobject thiz,
|
||||
|
||||
if (pJniStorage->mNativeSynthInterface) {
|
||||
Mutex::Autolock l(engineMutex);
|
||||
pJniStorage->mNativeSynthInterface->init(ttsSynthDoneCB);
|
||||
pJniStorage->mNativeSynthInterface->init(ttsSynthDoneCB, engConfigString);
|
||||
}
|
||||
|
||||
result = TTS_SUCCESS;
|
||||
@@ -422,6 +423,7 @@ android_tts_SynthProxy_native_setup(JNIEnv *env, jobject thiz,
|
||||
env->SetIntField(thiz, javaTTSFields.synthProxyFieldJniData, (int)pJniStorage);
|
||||
|
||||
env->ReleaseStringUTFChars(nativeSoLib, nativeSoLibNativeString);
|
||||
env->ReleaseStringUTFChars(engConfig, engConfigString);
|
||||
|
||||
return result;
|
||||
}
|
||||
@@ -482,6 +484,29 @@ android_tts_SynthProxy_isLanguageAvailable(JNIEnv *env, jobject thiz, jint jniDa
|
||||
return result;
|
||||
}
|
||||
|
||||
static int
|
||||
android_tts_SynthProxy_setConfig(JNIEnv *env, jobject thiz, jint jniData, jstring engineConfig)
|
||||
{
|
||||
int result = TTS_FAILURE;
|
||||
|
||||
if (jniData == 0) {
|
||||
LOGE("android_tts_SynthProxy_setConfig(): invalid JNI data");
|
||||
return result;
|
||||
}
|
||||
|
||||
Mutex::Autolock l(engineMutex);
|
||||
|
||||
SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
|
||||
const char *engineConfigNativeString = env->GetStringUTFChars(engineConfig, 0);
|
||||
|
||||
if (pSynthData->mNativeSynthInterface) {
|
||||
result = pSynthData->mNativeSynthInterface->setProperty(ANDROID_TTS_ENGINE_PROPERTY_CONFIG,
|
||||
engineConfigNativeString, strlen(engineConfigNativeString));
|
||||
}
|
||||
env->ReleaseStringUTFChars(engineConfig, engineConfigNativeString);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static int
|
||||
android_tts_SynthProxy_setLanguage(JNIEnv *env, jobject thiz, jint jniData,
|
||||
@@ -867,6 +892,10 @@ static JNINativeMethod gMethods[] = {
|
||||
"(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I",
|
||||
(void*)android_tts_SynthProxy_isLanguageAvailable
|
||||
},
|
||||
{ "native_setConfig",
|
||||
"(ILjava/lang/String;)I",
|
||||
(void*)android_tts_SynthProxy_setConfig
|
||||
},
|
||||
{ "native_setLanguage",
|
||||
"(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I",
|
||||
(void*)android_tts_SynthProxy_setLanguage
|
||||
@@ -896,7 +925,7 @@ static JNINativeMethod gMethods[] = {
|
||||
(void*)android_tts_SynthProxy_shutdown
|
||||
},
|
||||
{ "native_setup",
|
||||
"(Ljava/lang/Object;Ljava/lang/String;)I",
|
||||
"(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;)I",
|
||||
(void*)android_tts_SynthProxy_native_setup
|
||||
},
|
||||
{ "native_setLowShelf",
|
||||
|
||||
@@ -51,7 +51,7 @@ public class SynthProxy {
|
||||
public SynthProxy(String nativeSoLib, String engineConfig) {
|
||||
boolean applyFilter = nativeSoLib.toLowerCase().contains("pico");
|
||||
Log.v(TtsService.SERVICE_TAG, "About to load "+ nativeSoLib + ", applyFilter="+applyFilter);
|
||||
native_setup(new WeakReference<SynthProxy>(this), nativeSoLib);
|
||||
native_setup(new WeakReference<SynthProxy>(this), nativeSoLib, engineConfig);
|
||||
native_setLowShelf(applyFilter, PICO_FILTER_GAIN, PICO_FILTER_LOWSHELF_ATTENUATION,
|
||||
PICO_FILTER_TRANSITION_FREQ, PICO_FILTER_SHELF_SLOPE);
|
||||
}
|
||||
@@ -105,10 +105,10 @@ public class SynthProxy {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the engine configuration.
|
||||
* Updates the engine configuration.
|
||||
*/
|
||||
public int setConfig(String engineConfig) {
|
||||
return android.speech.tts.TextToSpeech.SUCCESS;
|
||||
return native_setConfig(engineConfig);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -180,7 +180,8 @@ public class SynthProxy {
|
||||
*/
|
||||
private int mJniData = 0;
|
||||
|
||||
private native final int native_setup(Object weak_this, String nativeSoLib);
|
||||
private native final int native_setup(Object weak_this, String nativeSoLib,
|
||||
String engineConfig);
|
||||
|
||||
private native final int native_setLowShelf(boolean applyFilter, float filterGain,
|
||||
float attenuationInDb, float freqInHz, float slope);
|
||||
@@ -204,6 +205,8 @@ public class SynthProxy {
|
||||
private native final int native_loadLanguage(int jniData, String language, String country,
|
||||
String variant);
|
||||
|
||||
private native final int native_setConfig(String engineConfig);
|
||||
|
||||
private native final int native_setSpeechRate(int jniData, int speechRate);
|
||||
|
||||
private native final int native_setPitch(int jniData, int speechRate);
|
||||
|
||||
Reference in New Issue
Block a user