How to programmatically use iOS voice synthesizers? (text to speech)
Starting from iOS 7, Apple provides this API.
See this answer.
Objective-C
#import <AVFoundation/AVFoundation.h>
…
AVSpeechUtterance *utterance = [AVSpeechUtterance
speechUtteranceWithString:@"Hello World!"];
AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];
[synth speakUtterance:utterance];
Swift
import AVFoundation
…
let utterance = AVSpeechUtterance(string: "Hello World!")
let synth = AVSpeechSynthesizer()
synth.speakUtterance(utterance)
iPhone - API for Text to Speech feature
I ran into this problem at one point, and got Flite (festival lite) text to speech engine running on iPhone. I recently made an API class for it. I tried to make it easy (and free) to add to new and existing projects. It can be downloaded at here.
Text to Speech on iOS
I've heard that OpenEars is good, but I don't really know too much about it. As for Apple accepting an app with third-party libraries, it all depends on whether or not the third-party library uses private frameworks or not. I'm sure that information is available on the OpenEars website.
Save text to audio file programmatically
NSSpeechSynthesizer
does that job.
Say we have the property :
@property NSSpeechSynthesizer *synth;
that we initialize like this:
synth = [[NSSpeechSynthesizer alloc] initWithVoice:nil];
we can do:
NSURL *saveURL = [NSURL fileURLWithPath:[@"~/Desktop/SpokenText.aiff" stringByExpandingTildeInPath]];
[synth startSpeakingString:@"A spoken short text" toURL:saveURL];
Before saving, we probably want to change the voice or the volume:
[synth setVolume:0.5f];
[synth setVoice:voiceID];
where the value for volume
is expressed in floating-point units ranging from 0.0 through 1.0 and voiceID
is a voice identifier
.
To see all available voice identifiers:
NSArray *voiceIdentifiers = [NSSpeechSynthesizer availableVoices];
NSLog(@"%li %@",voiceIdentifiers.count,voiceIdentifiers);
Output on OS X 10.10.3
with all voices installed:
101 (
"com.apple.speech.synthesis.voice.Agnes",
"com.apple.speech.synthesis.voice.Albert",
"com.apple.speech.synthesis.voice.Alex",
"com.apple.speech.synthesis.voice.alice.premium",
"com.apple.speech.synthesis.voice.allison.premium",
"com.apple.speech.synthesis.voice.alva.premium",
"com.apple.speech.synthesis.voice.amelie.premium",
"com.apple.speech.synthesis.voice.angelica.premium",
"com.apple.speech.synthesis.voice.anna.premium",
"com.apple.speech.synthesis.voice.audrey.premium",
"com.apple.speech.synthesis.voice.aurelie.premium",
"com.apple.speech.synthesis.voice.ava.premium",
"com.apple.speech.synthesis.voice.BadNews",
"com.apple.speech.synthesis.voice.Bahh",
"com.apple.speech.synthesis.voice.Bells",
"com.apple.speech.synthesis.voice.Boing",
"com.apple.speech.synthesis.voice.Bruce",
"com.apple.speech.synthesis.voice.Bubbles",
"com.apple.speech.synthesis.voice.carlos.premium",
"com.apple.speech.synthesis.voice.carmit.premium",
"com.apple.speech.synthesis.voice.catarina.premium",
"com.apple.speech.synthesis.voice.Cellos",
"com.apple.speech.synthesis.voice.cem.premium",
"com.apple.speech.synthesis.voice.chantal.premium",
"com.apple.speech.synthesis.voice.claire.premium",
"com.apple.speech.synthesis.voice.damayanti.premium",
"com.apple.speech.synthesis.voice.daniel.premium",
"com.apple.speech.synthesis.voice.Deranged",
"com.apple.speech.synthesis.voice.diego.premium",
"com.apple.speech.synthesis.voice.ellen.premium",
"com.apple.speech.synthesis.voice.ewa.premium",
"com.apple.speech.synthesis.voice.federica.premium",
"com.apple.speech.synthesis.voice.felipe.premium",
"com.apple.speech.synthesis.voice.fiona.premium",
"com.apple.speech.synthesis.voice.Fred",
"com.apple.speech.synthesis.voice.GoodNews",
"com.apple.speech.synthesis.voice.henrik.premium",
"com.apple.speech.synthesis.voice.Hysterical",
"com.apple.speech.synthesis.voice.ioana.premium",
"com.apple.speech.synthesis.voice.iveta.premium",
"com.apple.speech.synthesis.voice.joana.premium",
"com.apple.speech.synthesis.voice.jorge.premium",
"com.apple.speech.synthesis.voice.juan.premium",
"com.apple.speech.synthesis.voice.Junior",
"com.apple.speech.synthesis.voice.kanya.premium",
"com.apple.speech.synthesis.voice.karen.premium",
"com.apple.speech.synthesis.voice.kate.premium",
"com.apple.speech.synthesis.voice.Kathy",
"com.apple.speech.synthesis.voice.katya.premium",
"com.apple.speech.synthesis.voice.klara.premium",
"com.apple.speech.synthesis.voice.kyoko.premium",
"com.apple.speech.synthesis.voice.laura.premium",
"com.apple.speech.synthesis.voice.lee.premium",
"com.apple.speech.synthesis.voice.lekha.premium",
"com.apple.speech.synthesis.voice.luca.premium",
"com.apple.speech.synthesis.voice.luciana.premium",
"com.apple.speech.synthesis.voice.magnus.premium",
"com.apple.speech.synthesis.voice.mariska.premium",
"com.apple.speech.synthesis.voice.markus.premium",
"com.apple.speech.synthesis.voice.mei-jia.premium",
"com.apple.speech.synthesis.voice.melina.premium",
"com.apple.speech.synthesis.voice.milena.premium",
"com.apple.speech.synthesis.voice.moira.premium",
"com.apple.speech.synthesis.voice.monica.premium",
"com.apple.speech.synthesis.voice.nicolas.premium",
"com.apple.speech.synthesis.voice.nikos.premium",
"com.apple.speech.synthesis.voice.nora.premium",
"com.apple.speech.synthesis.voice.oliver.premium",
"com.apple.speech.synthesis.voice.oskar.premium",
"com.apple.speech.synthesis.voice.otoya.premium",
"com.apple.speech.synthesis.voice.paola.premium",
"com.apple.speech.synthesis.voice.paulina.premium",
"com.apple.speech.synthesis.voice.petra.premium",
"com.apple.speech.synthesis.voice.Organ",
"com.apple.speech.synthesis.voice.Princess",
"com.apple.speech.synthesis.voice.Ralph",
"com.apple.speech.synthesis.voice.samantha.premium",
"com.apple.speech.synthesis.voice.sara.premium",
"com.apple.speech.synthesis.voice.satu.premium",
"com.apple.speech.synthesis.voice.serena.premium",
"com.apple.speech.synthesis.voice.sin-ji.premium",
"com.apple.speech.synthesis.voice.soledad.premium",
"com.apple.speech.synthesis.voice.susan.premium",
"com.apple.speech.synthesis.voice.tarik.premium",
"com.apple.speech.synthesis.voice.tessa.premium",
"com.apple.speech.synthesis.voice.thomas.premium",
"com.apple.speech.synthesis.voice.ting-ting.premium",
"com.apple.speech.synthesis.voice.tom.premium",
"com.apple.speech.synthesis.voice.Trinoids",
"com.apple.speech.synthesis.voice.veena.premium",
"com.apple.speech.synthesis.voice.Vicki",
"com.apple.speech.synthesis.voice.Victoria",
"com.apple.speech.synthesis.voice.Whisper",
"com.apple.speech.synthesis.voice.xander.premium",
"com.apple.speech.synthesis.voice.yannick.premium",
"com.apple.speech.synthesis.voice.yelda.premium",
"com.apple.speech.synthesis.voice.yuna.premium",
"com.apple.speech.synthesis.voice.yuri.premium",
"com.apple.speech.synthesis.voice.Zarvox",
"com.apple.speech.synthesis.voice.zosia.premium",
"com.apple.speech.synthesis.voice.zuzana.premium"
)
Does iOS provide built in text to speech support or any class like NSSpeechRecognizer?
There is no built in text-to-speech support in iOS 5 or 6 - you'll need to use a third party library. If you are using iOS 7 you're in luck.
There's a new class in iOS 7 called AVSpeechSynthesizer
(Apple's docs can be found here). You can use this to perform text-to-speech. Here's a simple example:
AVSpeechUtterance *utterance = [AVSpeechUtterance
speechUtteranceWithString:@"Hello world"];
AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];
[synth speakUtterance:utterance];
Properties such as speed and voice type are set in the AVSpeechUtterance
, rather than the synthesizer.
Related Topics
Find Current Country from iPhone Device
Could Not Launch Process Launch Failed: Timed Out Waiting for App to Launch
Xcode: Failed to Get the Task for Process
Wkwebview and Nsurlprotocol Not Working
Keeping the Contentoffset in a Uicollectionview While Rotating Interface Orientation
Face Recognition on the Iphone
Xcode 10, Command Codesign Failed with a Nonzero Exit Code
Error: Cuicatalog: Invalid Asset Name Supplied: (Null), or Invalid Scale Factor:2.000000
Creating Thumbnail from Local Video in Swift
iOS Builds/Ipa Creation No Longer Works from the Command Line
Dismissing Uialertviews When Entering Background State
Avplayer Stops Playing and Doesn't Resume Again
Uirefreshcontrol on Uicollectionview Only Works If the Collection Fills the Height of the Container
How to Get Notified of Uitableviewcell Move Start and End