Merge change 5119 into donut
* changes: Adding support for pitch changes of the synthesized text in Text-To-Speech.
This commit is contained in:
@@ -29,6 +29,8 @@ import android.content.Intent;
|
|||||||
interface ITts {
|
interface ITts {
|
||||||
void setSpeechRate(in int speechRate);
|
void setSpeechRate(in int speechRate);
|
||||||
|
|
||||||
|
void setPitch(in int pitch);
|
||||||
|
|
||||||
void speak(in String text, in int queueMode, in String[] params);
|
void speak(in String text, in int queueMode, in String[] params);
|
||||||
|
|
||||||
boolean isSpeaking();
|
boolean isSpeaking();
|
||||||
|
|||||||
@@ -450,7 +450,6 @@ public class TextToSpeech {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the speech rate for the TTS engine.
|
* Sets the speech rate for the TTS engine.
|
||||||
*
|
*
|
||||||
@@ -482,6 +481,37 @@ public class TextToSpeech {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the speech pitch for the TTS engine.
|
||||||
|
*
|
||||||
|
* Note that the pitch is not universally supported by all engines and
|
||||||
|
* will be treated as a hint. The TTS library will try to use the specified
|
||||||
|
* pitch, but there is no guarantee.
|
||||||
|
* This has no effect on any pre-recorded speech.
|
||||||
|
*
|
||||||
|
* @param pitch
|
||||||
|
* The pitch for the TTS engine. 1 is the normal pitch,
|
||||||
|
* lower values lower the tone of the synthesized voice,
|
||||||
|
* greater values increase it.
|
||||||
|
*/
|
||||||
|
public void setPitch(float pitch) {
|
||||||
|
synchronized (mStartLock) {
|
||||||
|
if (!mStarted) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (pitch > 0) {
|
||||||
|
mITts.setPitch((int)(pitch*100));
|
||||||
|
}
|
||||||
|
} catch (RemoteException e) {
|
||||||
|
// TTS died; restart it.
|
||||||
|
mStarted = false;
|
||||||
|
initTts();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the language for the TTS engine.
|
* Sets the language for the TTS engine.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -296,7 +296,7 @@ android_tts_SynthProxy_setLanguage(JNIEnv *env, jobject thiz, jint jniData,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
android_tts_SynthProxy_setSpeechRate(JNIEnv *env, jobject thiz, jint jniData,
|
android_tts_SynthProxy_setSpeechRate(JNIEnv *env, jobject thiz, jint jniData,
|
||||||
int speechRate)
|
jint speechRate)
|
||||||
{
|
{
|
||||||
if (jniData == 0) {
|
if (jniData == 0) {
|
||||||
LOGE("android_tts_SynthProxy_setSpeechRate(): invalid JNI data");
|
LOGE("android_tts_SynthProxy_setSpeechRate(): invalid JNI data");
|
||||||
@@ -316,6 +316,28 @@ android_tts_SynthProxy_setSpeechRate(JNIEnv *env, jobject thiz, jint jniData,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
android_tts_SynthProxy_setPitch(JNIEnv *env, jobject thiz, jint jniData,
|
||||||
|
jint pitch)
|
||||||
|
{
|
||||||
|
if (jniData == 0) {
|
||||||
|
LOGE("android_tts_SynthProxy_setPitch(): invalid JNI data");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int bufSize = 10;
|
||||||
|
char buffer [bufSize];
|
||||||
|
sprintf(buffer, "%d", pitch);
|
||||||
|
|
||||||
|
SynthProxyJniStorage* pSynthData = (SynthProxyJniStorage*)jniData;
|
||||||
|
LOGI("setting pitch to %d", pitch);
|
||||||
|
// TODO check return codes
|
||||||
|
if (pSynthData->mNativeSynthInterface) {
|
||||||
|
pSynthData->mNativeSynthInterface->setProperty("pitch", buffer, bufSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO: Refactor this to get rid of any assumptions about sample rate, etc.
|
// TODO: Refactor this to get rid of any assumptions about sample rate, etc.
|
||||||
static void
|
static void
|
||||||
android_tts_SynthProxy_synthesizeToFile(JNIEnv *env, jobject thiz, jint jniData,
|
android_tts_SynthProxy_synthesizeToFile(JNIEnv *env, jobject thiz, jint jniData,
|
||||||
@@ -541,6 +563,10 @@ static JNINativeMethod gMethods[] = {
|
|||||||
"(II)V",
|
"(II)V",
|
||||||
(void*)android_tts_SynthProxy_setSpeechRate
|
(void*)android_tts_SynthProxy_setSpeechRate
|
||||||
},
|
},
|
||||||
|
{ "native_setPitch",
|
||||||
|
"(II)V",
|
||||||
|
(void*)android_tts_SynthProxy_setPitch
|
||||||
|
},
|
||||||
{ "native_playAudioBuffer",
|
{ "native_playAudioBuffer",
|
||||||
"(III)V",
|
"(III)V",
|
||||||
(void*)android_tts_SynthProxy_playAudioBuffer
|
(void*)android_tts_SynthProxy_playAudioBuffer
|
||||||
|
|||||||
@@ -81,6 +81,12 @@ public class SynthProxy {
|
|||||||
native_setSpeechRate(mJniData, speechRate);
|
native_setSpeechRate(mJniData, speechRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
@@ -145,6 +151,8 @@ public class SynthProxy {
|
|||||||
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);
|
||||||
|
|
||||||
// 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);
|
||||||
|
|||||||
@@ -152,7 +152,6 @@ public class TtsService extends Service implements OnCompletionListener {
|
|||||||
// speech rate
|
// speech rate
|
||||||
setSpeechRate(getDefaultRate());
|
setSpeechRate(getDefaultRate());
|
||||||
|
|
||||||
// TODO handle default pitch
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -179,6 +178,12 @@ public class TtsService extends Service implements OnCompletionListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void setPitch(int pitch) {
|
||||||
|
nativeSynth.setPitch(pitch);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void setLanguage(String lang, String country, String variant) {
|
private void setLanguage(String lang, String country, String variant) {
|
||||||
Log.v("TTS", "TtsService.setLanguage("+lang+", "+country+", "+variant+")");
|
Log.v("TTS", "TtsService.setLanguage("+lang+", "+country+", "+variant+")");
|
||||||
if (isDefaultEnforced()) {
|
if (isDefaultEnforced()) {
|
||||||
@@ -705,6 +710,17 @@ public class TtsService extends Service implements OnCompletionListener {
|
|||||||
mSelf.setSpeechRate(speechRate);
|
mSelf.setSpeechRate(speechRate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the pitch for the TTS. Note that this will only have an
|
||||||
|
* effect on synthesized speech; it will not affect pre-recorded speech.
|
||||||
|
*
|
||||||
|
* @param pitch
|
||||||
|
* The pitch that should be used for the synthesized voice
|
||||||
|
*/
|
||||||
|
public void setPitch(int pitch) {
|
||||||
|
mSelf.setPitch(pitch);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the speech rate for the TTS, which affects the synthesized voice.
|
* Sets the speech rate for the TTS, which affects the synthesized voice.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user