初识--AVSpeechSynthesizer
什么是AVSpeechSynchronizer?
从IOS5开始,IOS系统已经在siri上集成了语音合成的功能,但是是私有API。但是在IOS7,新增了一个简单的API----AVSpeechSynthesizer来做这件事情。目前比较主流的语音识别和合成的工具“科大讯飞”很强大,使用起来也很简单,当然如果是简单的“文本到语音”的功能,在iOS中已经提供好了相关的API,开发者可以使用AV Foundation中的AVSpeechSynthesizer类来实现这个功能。
那我就直接上代码喽:
#import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController ()<AVSpeechSynthesizerDelegate>//AVSpeechSynthesizer代理 //声明AVSpeechSynthesizer属性 @property (nonatomic, strong) AVSpeechSynthesizer *synthesizer; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. //创建一个AVSpeechSynthesizer对象 self.synthesizer = [[AVSpeechSynthesizer alloc]init]; //设置代理人为当前控制器对象 self.synthesizer.delegate = self; //创建AVSpeechUtterance对象(播放的语音内容都是通过实例化AVSpeechUtterance而得到) AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc]initWithString:@"你好,就是爱你爱着你,你能把我咋地"]; // 语速 0.0f~1.0f utterance.rate = 0.5f; // 声音的音调 0.5f~2.0f utterance.pitchMultiplier = 0.8f; // 使播放下一句的时候有0.1秒的延迟 utterance.postUtteranceDelay = 0.1f; //系统默认是不支持中文的(下面是设置中文) utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"];//国家语言 //播放 [_synthesizer speakUtterance:utterance]; } //AVSpeechSynthesizer的代理方法 -(void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didStartSpeechUtterance:(AVSpeechUtterance *)utterance{ NSLog(@"开始播放"); } -(void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didPauseSpeechUtterance:(AVSpeechUtterance *)utterance{ NSLog(@"暂停播放"); } -(void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance{ NSLog(@"结束播放"); } -(void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didCancelSpeechUtterance:(AVSpeechUtterance *)utterance{ NSLog(@"退出播放状态"); } -(void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didContinueSpeechUtterance:(AVSpeechUtterance *)utterance{ NSLog(@"跳出播放状态"); } -(void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer willSpeakRangeOfSpeechString:(NSRange)characterRange utterance:(AVSpeechUtterance *)utterance{ NSLog(@"播放状态时,当前所播放的字符串范围,及AVSpeechUtterance实例(可通过此方法监听当前播放的字或者词"); } @end