General information about the SDK and the Text-to-Speech technology
- What is text to speech? How does it sounds? How is it working? What’s the difference with Speech Recognition?
This page will give you all information about Text-to-Speech technology: What is Text-to-Speech?
- I would like to purchase Acapela for iPhone to install it on my iPhone/iPod touch/iPad
Acapela TTS for iPhone and iPad is not an application for end-users. This is a Software Development Kit dedicated to developers and integrators and not an end-user solution.
If you are looking for a speech-enabled app, have a look at our gallery where our customers’ applications are listed.
- I would like to develop an application with TTS for iPhone/iPad and resell it on the AppStore
Acapela TTS for iPhone and iPad SDK is what you need. Register on this site in order to be able to download the evaluation version (Simulator libraries with one voice).
Then contact us to buy the SDK, receive the device libraries and sign a license/royalties agreement.
- What is the latest version? What are the new features compared to the previous version?
Check the Acapela TTS for iPhone and iPad Version History and Release Notes page in the documentation page.
- Which languages are supported in your SDK?
Check the Available voices and Language Manuals page in the documentation section
- I would like to have your voices integrated into VoiceOver
- I want to use my iPhone with your voices but the voiceover doesn’t have the arabic language
Acapela TTS for iPhone and iPad is not an application for end-users. This is a Software Development Kit dedicated to developers and integrators and not an end-user solution.
Unfortunately, VoiceOver application, included in iPad, iPhone 3Gs and iPhone 4 cannot use our voices. It works only with build-in voices of iOS (that cannot be used by other applications than VoiceOver).
If you are looking for a speech-enabled app, have a look at our gallery where our customers’ applications are listed.
Some of them are available in Arabic too.
It will not replace the full features of voice over, but it will give better voices to your iPhone.
Licensing and pricing questions
- I would like to develop an iPhone app. Please tell me your licensing costs and terms.
Register on this site and you will have access to our price list.
- I don’t understand well your percentage pricing, how much will I pay exactly? What’s the NET price mean?”
The Net Price is the price you get from Apple, after taxes (depending of countries) and 30% share for Apple.
For example, with an application sold 1,99$ (or 1,59€), you will get a NET price of 0,97€ (for UE zone) or 1,4$ (for US zone), etc…
Royalty percentages to pay to Acapela are based on this net price (VAT excluded)
- Can I combine apps for the minimum commitment?
Yes, as long as they are all sold for more than $1.99 and that the percentage are calculated on the real net price of each application.
- What is the frequency for royalty reports? And why will you trust me for the reported number of sold applications?
Each quarter, you will have to send us the number of applications sold with the corresponding net price. We will build the invoice based on your information.
As a proof, you will have to send us a copy of Apple reports.
Technical questions
- How easy it is to integrate your SDK into my application?
Acapela TTS for iPhone and iPad is a SDK with a simple API in Objective C. Have a look to our tutorial “Quick Start: How to add TTS in your app” and the SDK Developer Guide in the documentation page
- Is Acapela TTS for iPhone and iPad compatible with XCode 3.2.3 and/or iOS 4 SDK?
Check our compatibility note in the documentation page, and also this blog post.
- Is Acapela TTS for iPhone and iPad compatible with XCode 4.2, iOS 5 and/or ARC?
Check this blog post.
- Does your product work with Mono-Touch?
Our TTS doesn’t have a C# API … The API is done exclusively in Objective C.
However, you should be able to bind our API to your code with some operations similar to the instructions of this website: http://monotouch.net/Documentation/Binding_New_Objective-C_Types
- Are there plain C/C++ versions of the api?
No. We have chosen to have an high level Objective C api only, for the following reasons:
- Most of the iPhone developers are not mobile or embedded developers. A high level API similar to the other in Cocoa Touch and other frameworks is easier for the integration.The way we have designed the AcapelaSpeech API is based on the Apple Mac OS X NSSpeechSynthesizer framework.
- The audio is fully implemented, using AudioQueue and by implementing the audio threads by our self. It means that you don’t have to deal with threads.
- As we are only using AudioQueue, the developers have still full control of the high level sound management, and can call AudioSession API (in order to stop iPod music, mix with this music or react to iPhone interruptions).
Common compilation and linker errors
- I am receiving the error of “Evaluation.lic.password: No such file or directory”
This is an error related to the include file Evaluation.lic.password.
Sometimes, XCode is not considering this as a valid header files, and so, you need to add the api path into your project and then include the license files relatively to this API path like this
#include "../License/evaluation.lic.h" //in Search Header Path, we have the /api folder path #include "../License/evaluation.lic.password"
Read the page http://www.acapela-for-iphone.com/documentation-quick-start-how-to-add-tts-in-your-app (Step 6 and Step 7) for more information.
- I got some strange errors into the console when trying to open a voice (that don’t speak)
/Users/username/Library/Application Support/iPhone Simulator/4.2/Applications/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/MyTTSApp.app/NLP/enu.trx
You got this error when the voice was not carefully added into the ressources of your application.
(i.e. the checkbox “create folder reference” was not chosen, … don’t choose the “recursively create groups” default option, in order to keep the folder structure of our voices data into your iPhone App !!!)
Read the page http://www.acapela-for-iphone.com/documentation-quick-start-how-to-add-tts-in-your-app (Step 4) for more information.
PS: Be careful that sometimes, XCode (and the simulator) have some strange cache effect with ressources.
So, in case of persistent errors, even after the above corrections, do that:
1) remove all voices from your ressource folder
2) Clean all targets
3) Quit XCode (et check if the Simulator is closed too)
4) Reopen the project in XCode
5) Clean all target again
6) Add the voicse with the correct “create folders reference” option
- I’ve tried to include new voices into the simulator, but when I launch the app, it’s still the old one?
- I’ve tried to include new voices into the simulator, but when I launch the app, the voices doesn’t speak …
Simulator have some strange behavior with files in resources.
If you have to change the list of voices into the resources of your app bundle be careful to:
- Clean the target and delete the build directory
- kill an eventual old app running in background of your simulator (!!! it is persistent even if you’ve close the simulator for one month !!! –> when you relaunch it, simulator come back to the same state as last time.
- remove the installed app of your simulator (most of the time, files in resources will not be updated even if you rebuild the app)
- In some case, chosing “Reset Content and Settings” in the Menu of simulator may help
Voices are still not speaking
You should use objectForProperty:error in order to retrieve the initialisation error.
Be careful: From version 1.300, initWithVoice will return nil if there is an error. So you should keep a copy of acatts in order to get the error.
id tempacaTTS;
// Create an AcapelaSpeech instance
acatts=[AcapelaSpeech alloc];
tempacaTTS=[acaTTS initWithVoice:voiceSelected license:acaLicense];
NSLog(@"Init return %@",tempacaTTS);
if(tempacaTTS==nil)
{
NSError* error=[[NSError alloc]init];
NSDictionary* errorDic=[acaTTS objectForProperty:AcapelaSpeechErrorsProperty error:&error];
NSString* alertMessage=[[NSString alloc] initWithFormat:@"Initialisation Failed for voice %@ with errors %@",voiceSelected,errorDic];
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Initialisation failed" message:alertMessage delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil] autorelease];
[alert show];
[alertMessage release];
[alert release];
return;
}
//continue with TTS
If you get something like this into the Alert Box, a data file is missing (ErrorCode = -22) or not readable or its path in resources is not ok with the .ini file
2012-05-09 17:02:42.066 TTSDemo[79399:10703] Initialisation Failed for voice enu_heather_22k_ns.bvcu with errors {
AcapelaSpeechErrorCount = 1;
AcapelaSpeechErrorNewestCharacterOffset = 0;
AcapelaSpeechErrorNewestCode = "-22";
AcapelaSpeechErrorNewestNLPcode = 0;
AcapelaSpeechErrorNewestSYNTHcode = 0;
AcapelaSpeechErrorOldestCharacterOffset = 0;
AcapelaSpeechErrorOldestCode = "-22";
AcapelaSpeechErrorOldestNLPcode = 0;
AcapelaSpeechErrorOldestSYNTHcode = 0;
}
What is the meaning of SpeechErrorCode = -22?
Here is the list of potential errors (not all are used):
E_BABTTS_SELECTOR_BADVERSION = -27,// Uncompatible seletor data version E_BABTTS_DICT_BADVERSION = -26, //! The dictionary version is too old ... Use the conversion tool E_BABTTS_LIBNOTINITIALIZED = -25, E_BABTTS_NOTVALIDLICENSE = -24, //!< The license key is not valid for the requested function E_BABTTS_NODICT = -23, //!< No dictionary E_BABTTS_NODBA = -22, //!< A data file is missing E_BABTTS_NOTIMPLEMENTED = -21, //!< The function is not yet implemented E_BABTTS_DICT_NOENTRY = -20, //!< The user lexicon is empty E_BABTTS_DICT_READ = -19, //!< Error reading the lexicon file E_BABTTS_DICT_WRITE = -18, //!< Error when attempting to write to the file. E_BABTTS_DICT_OPEN = -17, //!< The specified dictionary doesn't exist E_BABTTS_BADPHO = -16, //!< An incorrect phoneme was introduced E_BABTTS_FILEOPEN = -15, //!< Error when opening a file E_BABTTS_FILEWRITE = -14, //!< Error when attempting to write to a file E_BABTTS_INVALIDTAG = -13, //!< The inserted tag is invalid (obsolette) E_BABTTS_NONLP = -12, //!< The NLP object is invalid/doesn't exist E_BABTTS_THREADERROR = -11, //!< Error when attempting to start a new thread E_BABTTS_NOTVALIDPARAMETER = -10, //!< A parameter/argument is not valid E_BABTTS_NOREGISTRY = -9, //!< The required registry keys are not valid / do not exist E_BABTTS_REGISTRYERROR = -8, //!< Bad information in the registry E_BABTTS_PROCESSERROR = -7, //!< "Generic"/unhandled error E_BABTTS_WAVEOUTNOTFREE = -6, //!< Can't open the output device E_BABTTS_WAVEOUTWRITE = -5, //!< Can't write to the output device E_BABTTS_SPEAKERROR = -4, //!< Error while Speaking or processing text E_BABTTS_ISPLAYING = -3, //!< Already in play mode or currently processing text E_BABTTS_MEMFREE = -2, //!< Problem when freeing memory E_BABTTS_NOMEM = -1, //!< No memory for allocation E_BABTTS_NOERROR = 0, //!< No error W_BABTTS_NOTPROCESSED = 1, //!< The processing was not done W_BABTTS_NOTFULLYPROCESSED = 2, //!< The processing was not fully processed. Need to call the function one more time to complete the process. W_BABTTS_NOMOREDATA = 3

