NSSpeechSynthesizer does the job.
Let's say that we have a property:
@property NSSpeechSynthesizer *synth;
which we initialize as follows:
synth = [[NSSpeechSynthesizer alloc] initWithVoice:nil];
we can do it:
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 volume:
[synth setVolume:0.5f]; [synth setVoice:voiceID];
where value for volume is expressed in units of floating point in the range from 0.0 to 1.0 and voiceID is voice identifier .
To view all available voice identifiers:
NSArray *voiceIdentifiers = [NSSpeechSynthesizer availableVoices]; NSLog(@"%li %@",voiceIdentifiers.count,voiceIdentifiers);
Output to OS X 10.10.3 with all installed voices:
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" )