Can you imagine Merlin, Genie, and all of the other MSAgent characters flying around on an Android device? Well, now you can, because I have begun work on an MSAgent engine for Android.
I have been able to get Merlin to appear in a test app running in an Android emulator. And on modern Android screen resolutions, he doesn’t take up a whole lot of screen space, which is a plus, so he might actually look good on phones and tablets alike.
I have some basic pieces working:
- load ACS file from device/SDCard
- an asynchronous request queue (TODO: canceling requests, syncing requests between multiple characters)
- playing animations (TODO: stopping/interrupting animations)
- show/hide, w/ state animations
- moving the Character around the screen, either with touch input (dragging) or in code, w/ state animations
- gesturing, w/ state animations
Although it is possible to display a Character on top of the app’s UI, and even on top of Android screens when the app is in the background, I did come across some odd quirks in managing the Character’s top-level window. This might limit MSAgent to just in-app usages. At least the character would stay on top of the app UI (good for tutorials and such). Will keep experimenting with it.
I did start work on TextToSpeech output, but discovered some shortcomings with Android’s TTS framework, the most important of which is that there are no notifications of when individual words/phonemes are spoken. That means words in the speech balloon cannot be highlighted while the character is talking (unless the text is broken up into individual words and feed into the TTS engine one at a time, which is likely to cause lag). That also means that proper mouth overlays cannot be displayed. This is a big issue for user experience. Not sure if these will be solvable without resorting to third-party solutions.
I am trying to make it as functional as possible. I’m not really expecting this to be a full implementation like on Windows, just due to some shortcomings of Android and differences between how Android and Windows work in general. But it is an interesting challenge to see how far I can take it, it gets me back into playing with MSAgent, and it helps further my learning of Android app development.
I will try to put together a little video soon to show what I have so far.
When I have an Android library that is viable outside of my development environment, I will probably put it up on SourceForge or GitHub or something.