Wikipedia:Version 1.6 of Android added support for speech synthesis (TTS).
But my question is "Does any Android device has TtsService.apk"?
Android 1.6+ has a built-in TTS service on every device (short of, maybe, some extreme customizations). For extended TTS services - i. e. the ability to use plug-in third party engines - one has to download the free "TTS Services Extended" app from the Market.
On Android 2.2 and above - the majority of the current installed base - the extended TTS service is baked in.
The specific APK name is irrelevant, it's an implementation detail.
EDIT:
1 . Quoting http://developer.android.com/resources/articles/tts.html :
Starting with Android 1.6 (API Level 4), the Android platform includes a new Text-to-Speech (TTS) capability.
2 . What do you mean by "TTS (files)"? The standard engine on Android 1.5 and below? The extended TTS service? Some third party engine? Your own engine?
Related
Android 2.x does not automatically sound an audible cue when ready for speech input.
Android 4.1 does.
What happens in between these versions? i.e. When was this cool feature introduced?
Android 3.0? (Build.VERSION_CODES.HONEYCOMB_MR)
Android 3.1? (Build.VERSION_CODES.HONEYCOMB_MR1)
Android 3.2? (Build.VERSION_CODES.HONEYCOMB_MR2)
Android 4.0? (Build.VERSION_CODES.ICE_CREAM_SANDWICH)
I need this in order to perform a check against Build.VERSION.SDK_INT at runtime.
Do you know of any source that documents this?
That "ready for speech" double-beep to which you are referring is not a feature of the Android OS but rather Google App.
This is very close to Kaarel's answer but the distinction between Voice Search and Google App could be confusing.
What's more confusing is the fact that Google App used to be named Google Search but make no mistake: The identical package name turns itself in... com.google.android.googlequicksearchbox.
I don't know exactly at what point the "no beep Google Search" turned into "cool double-beep Google App", but my limited observation shows that Google Search version 1.3.3 (Android 2.2.1) had no beeps, while Google App version 4.1.24 (Android 4.1.2) has those beeps.
As of today (2015-01-22), Version 1.3.3.247963 of Google Search is latest version available on Google Play for Android 2.2.1 devices.
An Android 4.1.2 device, however, can see a higher version in Google Play and download & install it: 4.1.24.1672412.arm.
Thus, it seems that those beeps are tied to the Android version.
BTW, Google App features what's known as "OK Google". Perhaps that was the reason for introducing those (now famous) beeps.
"OK Google" was first introduced in the Google I/O conference in May 2013, but since it is available for download from Google Play to Android 4.1 devices (which was introduced in July 2012), one cannot assume direct link to the latest release version at that time. There are, in fact, instructions on how to install Google App on Android 4.0 but I doubt that is supported by Google. Thus, to be safe, I would say that if you enabled automatic updates on your smartphone, then the Android version that first introduced "the recognizer beeps" is 4.1.
This might be a feature of Google Voice Search, but Google Voice Search is a regular app and thus external to Android.
onReadyForSpeech is a callback via which an end-user app (e.g. a keyboard app) can have some code executed by the speech recognizer app (e.g. Google Voice Search). Both of these apps can sound the audible cue but neither is part of the core Android.
Maybe relevant:
void startRecording (MediaSyncEvent syncEvent)
was added in API level 16.
We added voice prompts to our app using the Text to Speech API a couple years ago and it has been working well. Recently, we started receiving email from users that upgraded to Android 4.2 Jelly Bean saying that voice prompts are not working and that they are getting a message that the voice data is missing and they need to download it. When they click to download they are given the option of downloading languages other than English.
We implemented text to speech following this post on the Android Developer's Blog. We are invoking the TextToSpeech.Engine.ACTION_CHECK_TTS_DATA intent and if anything other than TextToSpeech.Engine.CHECK_VOICE_DATA_PASS is returned we invoke the TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA intent.
We don't have access to a device running 4.2. I went into a local store today and downloaded the app on a Nexus 7 tablet with 4.2 installed and was able to reproduce the problem. However, when we create an AVD based on the Nexus 7 and run the emulator the voice prompts work fine and we are not able to reproduce the issue.
TTS checking with Android OS4.1 and OS 4.2 is, being polite, different.
OS 4.1 does not correctly handle the intent to install data*
TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA
OS 4.2 does not correctly handle the intent to check for voice data*
TextToSpeech.Engine.ACTION_CHECK_TTS_DATA
* By this I mean that it doesn't return the correct status codes as per the old versions. For example, CHECK_TTS_DATA returns CHECK_VOICE_DATA_MISSING_DATA when it clearly does have voice data installed. It's possible that there is some other intent data that now needs to be passed, but I'm not sure where this is documented.
In my apps I have had to disable these checks for newer OS versions. I suspect Google may have done this because their terms to use Android now mandate TTS (but I can't verify this - I'm sure there's a site out there that describes exactly what must be implemented to be called 'Android')
Update
As I suspected, Android OS 4.1 now mandates Text-to-Speech be included in every Android device, thus the checks are now somewhat redundant. From this link: Android 4.1 Compatibility Definition
3.11 Text-to-Speech
Android 4.1 includes APIs that allow applications to make use of text-to-speech (TTS) services, and allows service providers to provide implementations of TTS services [Resources, 32]. Device implementations MUST meet these requirements related to the Android TTS framework:
Device implementations MUST support the Android TTS framework APIs and SHOULD include a TTS engine supporting the languages available on the device. Note that the upstream Android open source software includes a full-featured TTS engine implementation.
Device implementations MUST support installation of third-party TTS engines.
Device implementations MUST provide a user-accessible interface that allows users to select a TTS engine for use at the system level.
I'm interested in performing Japanese speech synthesis on Android. The guide on Android TTS says:
"The TTS engine that ships with the Android platform supports a number of languages: English, French, German, Italian and Spanish."
Yet I see an app that does Japanese TTS, and the APK is around 1 MB - not nearly enough for a standalone TTS library.
So the question is: does Android TTS support Japanese in principle (e. g. as downloadable resources)? What about Japanese phones?
Found three Japanese-capable third party engines. All available on the Market and paid.
SVOX Classic with SVOX Japanese Voice installed ($3)
AquesTalk ($2)
DTalker TTS ($12, but a free demo is available)
On Android 2.2, once you enable them in settings, they become available to third party apps.
On Android 1.6 to 2.1, you have to download a free utility called "TTS Services Extended", which basically backports the same, and you have to use its stub JAR instead of the SDK's TextToSpeech class. So it's all perfectly doable, if the customer is willing to spend some.
"SVOX Classic TTS" does a pretty good synthesis of Japanese (among other languages). It can be used by TTS-enabled apps. Works on my non-japanese HTC Desire.
I'm starting to broad my developer skills also to the Android development.
I installed all the tools and configurations and every thing seem great, As a default settings I install the 3.2 SDK, but there is not too much docs on that one, mode of what is out there is on the 2.x SDKs.
Is it like IOS, does android have a good backward computability? Can I stay with the 3.x and count on it (with the features that are in the 2.x SDKs) to work on 2.x phones? What are the common version in the Android devices this days? I have lots of newbie develop questions like that, as i want to start from a good starting point and there are lots of materials and tutorials over the web that are not up to date.
Also, does any one know about a good site for this kind of Q&A?
Thank you,
Erez
As of July 5th the version with the largest market share (59.4%) is 2.2 (API Level 8) as shown here
http://developer.android.com/resources/dashboard/platform-versions.html so Consequently I would recommend using that as a starting point unless you are solely focusing on the new honeycomb tablets (<1% market share).
As for backward compatibility, android is completely backward compatible for the most part. Unless of course you use a new feature that is only available starting with a certain API level. Google's Android market is good about only allowing apps that will run on a certain API being visible to that phones user. This is enforced by the API level as recorded in the manifest file that is created with every Android app and set by the developer.
To help you with the API level, the SDK docs show what API a feature/object started with in the upper left hand corner. You can also view the specific changes in each platform and it's corresponding API level at http://developer.android.com/sdk/index.html.
As for a good website to get started I would recommend the developer site at developer.android.com and this website of course. Also the book Android Wireless Application Development by Shane Conder and Lauren Darcey (2 ed) Is very good. (I am not connected with the book just currently reading it). Make sure you get the latest edition.
Hope this helps,
George
Above is good info, but it would be advisable to develop for 2.1 and up at the moment, considering as of this answer's writing, 2.1 makes up 17.5% of the market and 2.2 makes up 59.4% of the market.
http://developer.android.com/resources/dashboard/platform-versions.html
OP should also be advised that version 3.x is specifically for tablets, so that may not be the best choice for a starting developer. My advice is to go with 2.1. Most of the documentation is up to date with that, and you won't have access to things you don't need yet (fragments, tablet-specific things)
Hope this helps!
You can read about application forward and backward compatibility in the docs.
Generally apps are forwards compatible but not backward compatible - new APIs introduced in one version are not available in an older version.
This pie chart shows distribution of devices accessing the Android Market and based on this I would try to target devices using 2.1 or newer to cover most of your users.
Your decision should be based on whether you need a feature introduced in a specific version. For example, if you want to add NFC to your app, you'll need Android 2.3.3 or newer, but otherwise there's no reason to exclude older devices.
I recommend learning about Fragments and using the compatibility package to use them on targets below 3.0. This will make it easier to reuse view elements on both tablet and phone devices. Note that if you only intend to develop for phones, 2.3.4 is the latest phone version of Android at the time of writing. Later this year, 3.0 for tablets will merge with the phone version to provide a unified OS version as with iOS.
Android 3.2 is just released publicly on friday, July 15th. You can start-off with Android 2.3.3 and 3.2 installation and development.
Android applications are mostly forward compatible. (But not always)
The best place to find all your answers is developer.android.com
I'm trying to build an Augmented Reality application for androids. I just want it to show some 3d models when it recognizes my different markers.
I used this excellent SDK, https://ar.qualcomm.at/qdevnet/sdk and followed the steps, but unfortunately when I created the application and ran it on my android, it showed a message "Your device is not supported". That's probably because that guide is for 2.1 androids, and mine is 2.2
Is there any way to "convert" it? I just want to make it play on my phone.
Is there any way to "convert" it? I just want to make it play on my phone.
Not that I know of. The QCAR SDK actually checks for device compatibility based on explicit conditions (e.g. a snapdragon processor) and fails to initialize if the device is not supported. There's a list of supported devices available on their dev forum - https://ar.qualcomm.at/qdevnet/forums
Most Android (and iOS) devices are now supported by QCAR SDK.