This is a port of the TTS framework as it will be in the next version
of Android. There have been a few bug fixes, a brand new settings UI,
and a tweaked plugins system.
Speaking of plugins, the plugins system is finalized now. This is a
very exciting feature as it means anyone with the knowledge and skills
needed to create a voice synthesis engine will be able to make an
engine for Android and put it up on Market for everyone else to enjoy!
Official platform support for this will be added in the next version
of Android, and devices running older versions of Android will still
have access to these plugins via TTS Extended. The plugin system is
exactly the same, so engine developers can (and should) start testing
NOW with TTS Extended.
For examples on building and packaging your own plugin synthesis
engine for Android, see:
http://code.google.com/p/eyes-free/source/browse/#svn/trunk/documentation/TextToSpeech_Plugin_Engine_Examples
Please try this new version of TTS out and let me know ASAP if you
have any issues. There have been lots of changes and backporting this
out of the framework is tricky as I am trying to get all the new
features in while still keeping it compatible with existing apps, so
your help in testing it out and reporting issues will be very
appreciated. Thanks again for your support! :)
-Charles
--
You received this message because you are subscribed to the Google Groups "TTS-for-Android" group.
To post to this group, send email to tts-for...@googlegroups.com.
To unsubscribe from this group, send email to tts-for-andro...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/tts-for-android?hl=en.
Our current design is to not expose those. If you want to have some
engine specific tweaks in your engine, then engine settings would be
the appropriate place to put them.
BTW, your Flite port looks like an awesome project! :)
-Charles
One other thing, looking through your previous posts, if all you are
trying to do is eng-USA-VoiceA vs eng-USA-VoiceB, you can treat the
VoiceA/VoiceB part as a variant of the Locale (which consists of
language, country, and variant).
(1) I had to select Flite as the default Engine before the
Check/Download activities could be called. Is it possible to install
voice data without setting Flite as default engine?
(2) I haven't completely understood how the EngineSettings activity
works. The readme file had this: "What the user sets here will be
passed to the .so as one String;". Could you please clarify how the
string is passed.. That is, where in my native code should I be
receiving the settings?
Thanks,
- Alok
Two issues that I notice:
(1) "Always use my settings" doesn't seem to work.
I have set the default voice to Flite (also tried espeak). I enabled
"always use ..." setting.
After enabling it, and using the TTSv3.0 stub, something like
TextToSpeechBeta myTTS = new TextToSpeechBeta(this, null);
myTTS.speak("This is a sample sentence", 0,null);
still tries to use Pico with default voice settings. More over, Pico
fails to synthesize text with this error:
E/SVOX Pico Engine( 468): Failed to load textana resource for en-US [-40]
(2) Language setting not persistent
I select a default Engine (say, eSpeak), and change the language. Quit
the TTS settings. Open the settings again. Now, the previously
selected language doesn't show up as selected.
- Alok
The apk is at: http://github.com/downloads/happyalu/Flite-TTS-Engine-for-Android/FliteEngine-rc1.0.apk
And a mini how-to to the voice installation is at:
http://wiki.github.com/happyalu/Flite-TTS-Engine-for-Android/tutorial-for-installing-flite-android-app
Also, I'm developing on a nexus one.
-Fixed the language setting not persistent problem. Actually, the
setting was persistent, but it wasn't being displayed properly - good
catch.
Can you please be more specific about the problem that you are having
with "Always use my settings" doesn't seem to work? Flite is working
just fine for me. Steps that I used:
1. Install Flite
2. Install voice data
3. Set Flite as default and made sure Flite worked inside the settings
app.
4. Started up an app that uses TTS (Speaking Pad for example).
The app spoke with Flite as expected.
-Charles
On Apr 12, 11:01 am, Alok Parlikar <happy...@gmail.com> wrote:
> Thanks.
>
> The apk is at:http://github.com/downloads/happyalu/Flite-TTS-Engine-for-Android/Fli...
>
> And a mini how-to to the voice installation is at:http://wiki.github.com/happyalu/Flite-TTS-Engine-for-Android/tutorial...
>
> Also, I'm developing on a nexus one.
>
> On Mon, Apr 12, 2010 at 1:50 PM, Charles Chen <clc...@google.com> wrote:
> > Ok, I'll look into it. BTW, do you have your APK up somewhere that I could
> > try out?
>
> >> >http://code.google.com/p/eyes-free/source/browse/#svn/trunk/documenta...
Here are the steps with which I can reproduce the second problem I referred to:
1. Install Flite.
2. Install voice data.
3. Check Flite as default, select one of the languages (say,
eng-USA-male,aup) in language settings.
4. Click on "listen an example" to confirm it works.
5. Open Speaking Pad. Try to synthesize something. It works correctly!
6. Close Speaking Pad.
7. Open Speaking Pad again.
8. Now it doesn't work any more.
Here is what I think happens:
(a) In Step 4, the TTS service loads and initializes flite. Sets the
language to eng-USA-male,aup.
(b) In Step 5, Speaking pad requests just the language eng-USA
E/TtsService(16551): Creating synth thread for: est
V/TtsService(16551): TtsService.setLanguage(eng, USA, )
I/FliteEngine(16551): TtsEngine::setLanguage: lang=eng, country=USA, variant=
E/FliteEngine(16551): TtsEngine::setLanguage: Unsupported variant of voice.
Flite had a previous voice set, setting a new voice failed, so it kept
using the previously set voice. Which is how synthesis works in step
(5).
(c) Closing Speaking pad in step (6) calls tts.shutdown:
I/FliteEngine(16551): TtsEngine::stop
I/FliteEngine(16551): TtsEngine::shutdown
I/FliteEngine(16551): Voices::~Voices Deleting voice list
I/FliteEngine(16551): Voices::~Voices voice list deleted
I/FliteEngine(16551): Unloading generic clustergen voice.
D/FliteEngine(16551): Calling flite's unregister for cg voice
D/FliteEngine(16551): Flite voice unregistered.
V/TtsService(16551): onDestroy() completed
(d) Opening Speaking pad again in step (7) now re-loads Flite
V/TtsService(16551): TtsService.onCreate()
E/TTS is loading(16551):
/data/data/edu.cmu.cs.speech.tts.flite/lib/libttsflite.so
V/SynthProxy(16551): AudioTrack started
I/ActivityManager( 74): Displayed activity com.ideal.speakingpad/.SpeakingPad:
502 ms (total 502 ms)
I/FliteEngine(16551): TtsEngine::getTtsEngine
I/FliteEngine(16551): TtsEngine::init start
I/FliteEngine(16551): Starting setVoiceList
I/FliteEngine(16551): Creating a generic clustergen voice loader.
I/FliteEngine(16551): Voices are being loaded. Maximum Linked voices: 0. Registr
ation mode: 0
I/FliteEngine(16551): setVoiceList: list initialized
I/FliteEngine(16551): setVoiceList done
E/FliteEngine(16551): TTSEngine::init Voice list error
V/TtsService(16551): TtsService.setLanguage(eng, USA, )
I/FliteEngine(16551): TtsEngine::setLanguage: lang=eng, country=USA, variant=
E/FliteEngine(16551): TtsEngine::setLanguage: Unsupported variant of voice.
Since flite had no previous voice set in this session, synthesis fails
with this error:
E/FliteEngine(16551): Voices not loaded?
To summarize,
* I set the default language to eng-USA-male,aup
* When a new app tries to set the language, the variant is not overriden.
* Flite currently requires variant to be set. Otherwise it refuses to
load the voices. (I'll fix it in the next version to use fallback
voices).
* So a fresh loading of libttsflite.so will result in no synthesis from apps.
* Clicking the "Listen to Sample" menu in TTS settings will set the
correct variant again, thus getting flite to work again :-)
Thanks again,
- Alok
The country of "aup" voice is not USA, but IND. (eng-IND-male,aup)
When I set it as default, and opt for "always use my settings", and
then use speaking pad, I still get this in logcat:
V/TtsService(17679): TTS processing: test utterance from speaking pad
E/TtsService(17679): Creating synth thread for: test utterance from speaking pad
V/TtsService(17679): TtsService.setLanguage(eng, USA, )
I/FliteEngine(17679): TtsEngine::setLanguage: lang=eng, country=USA, variant=
instead of what I think it should be TtsService.setLanguage(eng,IND,"male,aup")
- Alok
I'll also add to the DownloadVoiceData activity code to list installed
voices and uninstall them.
Thanks again for your help.
- Alok
This should respect the "Always use my settings" pref.
-Charles
On Apr 13, 12:46 pm, Alok Parlikar <happy...@gmail.com> wrote:
> Yes. Currently, isLanguageAvailable returns the right value (best
> available support). However, setLanguage doesn't fall back to best
> available voice. I have the fix almost done so I'll push it out soon.
>
> I'll also add to the DownloadVoiceData activity code to list installed
> voices and uninstall them.
>
> Thanks again for your help.
> - Alok
>
> On Tue, Apr 13, 2010 at 3:20 PM, Charles Chen <clc...@google.com> wrote:
> > I'll look into why the "Always use my settings" is not working in this case,
> > but engines should NOT require country or variant to be set (if not
> > specified, the engine should default to something sensible).
>
> > Also, it is worth mentioning that if the app requests eng, GBR (British
> > English) but the current engine only has eng, USA, the expected behavior is
> > that the TTS will return LANG_AVAILABLE
> > (http://developer.android.com/reference/android/speech/tts/TextToSpeec...)
> > and then use the eng, USA voice rather than fail completely.
>
> > -Charles
>
> > On Tue, Apr 13, 2010 at 4:38 AM, Alok Parlikar <happy...@gmail.com> wrote:
>
> >> Correction to the previous mail:
>
> >> The country of "aup" voice is not USA, but IND. (eng-IND-male,aup)
>
> >> When I set it as default, and opt for "always use my settings", and
> >> then use speaking pad, I still get this in logcat:
>
> >> V/TtsService(17679): TTS processing: test utterance from speaking pad
> >> E/TtsService(17679): Creating synth thread for: test utterance from
> >> speaking pad
> >> V/TtsService(17679): TtsService.setLanguage(eng, USA, )
> >> I/FliteEngine(17679): TtsEngine::setLanguage: lang=eng, country=USA,
> >> variant=
>
> >> instead of what I think it should be
> >> TtsService.setLanguage(eng,IND,"male,aup")
>
> >> - Alok
>
> >> On Tue, Apr 13, 2010 at 12:35 AM, Alok Parlikar <happy...@gmail.com>
> ...
>
> read more »
Sorry I am doing this again.. but there is another minor bug:
1. Open TTS settings.
2. Select Flite as default engine.
3. Do NOT select "Always use my settings"
4. Select language as MALE, RMS
5. Click on "Listen to an example"
RMS voice will play. Now,
6. Select "Always use my settings"
7. Click on "Listen to an example"
RMS voice will play again. Now,
8. Change language to MALE, AUP
9. Click on "Listen to an example"
RMS voice will play again
Expected: AUP should play this time
10. Un-Select "Always use my settings"
11. Click on "Listen to an example"
12. AUP voice plays now.
- Alok
1. Install TTS rc02
2. Install Flite. Install required data.
3. Set Default Engine = Flite
4. Set Language = RMS
5. Listen to an Example
6. Select "Always allow my settings", and listen to example again.
7. Close Settings. Open Speaking Pad
8. Synthesize something.
9. Close speaking pad.
10. Open TTS settings
11. Click "Listen to an example"
Nothing is played. Logcat shows this:
V/TtsService(21815): TtsService.setLanguage(eng, USA, male,rms)
I/FliteEngine(21815): TtsEngine::setLanguage: lang=eng, country=USA, variant=
That is, TtsService knows the variant, but doesn't pass it over to FliteEngine.
- Alok
-Charles
On Apr 13, 6:08 pm, Alok Parlikar <happy...@gmail.com> wrote:
> And one more:
>
> 1. Install TTS rc02
> 2. Install Flite. Install required data.
> 3. Set Default Engine = Flite
> 4. Set Language = RMS
> 5. Listen to an Example
> 6. Select "Always allow my settings", and listen to example again.
> 7. Close Settings. Open Speaking Pad
> 8. Synthesize something.
> 9. Close speaking pad.
> 10. Open TTS settings
> 11. Click "Listen to an example"
>
> Nothing is played. Logcat shows this:
> V/TtsService(21815): TtsService.setLanguage(eng, USA, male,rms)
> I/FliteEngine(21815): TtsEngine::setLanguage: lang=eng, country=USA, variant=
>
> That is, TtsService knows the variant, but doesn't pass it over to FliteEngine.
>
> - Alok
>
> ...
>
> read more »
the Talkback service, or maps (navigation), continue to use Pico.
Is this expected?
- Alok
Yes. Applications using the framework (rather than TTS Extended) will use SVOX Pico, regardless of the TTS Extended settings, in Android versions prior to Froyo.
On Apr 13, 2010 11:51 PM, "Alok Parlikar" <happ...@gmail.com> wrote:
With tts_3.0_rc03 installed, flite selected as default engine, and
"always use my settings" checked,
speakingpad (and other external apps) uses the right engine.
the Talkback service, or maps (navigation), continue to use Pico.
Is this expected?
- Alok
On Tue, Apr 13, 2010 at 10:58 PM, clchen <clc...@google.com> wrote:
> And fixed. :)
> http://eyes-f...
1. Open TTS settings
2. Enable eSpeak
3. Select eSpeak as default engine.
4. Select speech rate "very fast"
5. Do NOT select "Always use my settings"
6. Listen to an example
7. Select "Always use my settings"
8. Listen to an example.
Observed: Speech rate setting defaults to "normal".
Expected: Speech rate should still remain "very fast"
On Tue, Apr 13, 2010 at 10:58 PM, clchen <clc...@google.com> wrote:
--
You received this message because you are subscribed to the Google Groups "TTS-for-Android" group.
To post to this group, send email to tts-for...@googlegroups.com.
To unsubscribe from this group, send email to tts-for-andro...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/tts-for-android?hl=en.