5

It's possible to save text as audio file as shown in screenshot. Now my question is that how to do the same programmatically. enter image description here

Any help greatly appreciated.

Rajesh
  • 10,318
  • 16
  • 44
  • 64

2 Answers2

4

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"
)
  • Have tried it bool b = [synthesizer startSpeakingString:@"I have started speaking" toURL:[NSURL URLWithString:@"/Desktop"]]; returns true but can't find the file – Rajesh Apr 17 '15 at 05:48
  • Cool, thanks. I added the URL-creation also to the code so the answer is clearer. –  Apr 17 '15 at 06:07
  • 1
    Great! and is there any solution for iOS for the same case? – Rajesh Apr 17 '15 at 06:08
0

Starting from iOS 7 Apple provides the following API...

https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVSpeechSynthesizer_Ref/Reference/Reference.html

See this answer https://stackoverflow.com/a/17465494/215748

#import <AVFoundation/AVFoundation.h>
…
AVSpeechUtterance *utterance = [AVSpeechUtterance 
                            speechUtteranceWithString:@"Hello world"];
AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init];
[synth speakUtterance:utterance];
Community
  • 1
  • 1
Rahul Mayani
  • 3,761
  • 4
  • 25
  • 40