【OC功能】科大讯飞(二)语音合成

上一章:【OC功能】科大讯飞(一)环境搭建

前言:

  • 接上一章,这次说语音合成
    -简单来说就是你输入一段文字,系统分析后能用语音读出来。
【OC功能】科大讯飞(二)语音合成_第1张图片

打开上次创建好的程序。

1.先在ViewController.h中添加

#import 
//语音合成
#import "iflyMSC/IFlySpeechSynthesizerDelegate.h”

引入语音合成类

@class IFlySpeechSynthesizer;
@class IFlyDataUploader;

注意要添加语音合成代理


2.然后来到ViewController.m

导入头文件

#import 
#import 
#import 
#import "iflyMSC/IFlySpeechConstant.h"
#import "iflyMSC/IFlySpeechUtility.h"
#import "iflyMSC/IFlySpeechSynthesizer.h”

的确很多……但是为了不报错,加吧

3.完成这些准备工作之后,接下来就是堆代码的工作了。为了方便,笔者只用了两个控件:一个UITextField、一个UIButton,然后给这两个控件分别做一个Outlet和Action连接。
【OC功能】科大讯飞(二)语音合成_第2张图片

声明接受要阅读的文本的textField

 property (weak, nonatomic) IBOutlet UITextField *content;

声明语音合成的对象

@property (nonatomic, strong) IFlySpeechSynthesizer *iFlySpeechSynthesizer;

因为语言合成要写的比较多,我们就写在一个方法里,然后在viewDidLoad里调用

- (void)viewDidLoad {
    [super viewDidLoad];
    [self voiceRead];
}

4.在voiceRead

通过appid连接讯飞语音服务器,把@"58096c82"换成你申请的appid,如果不记得appid是什么请看第一章

NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@,timeout=%@",@"58096c82",@"20000”];

所有服务启动前,需要确保执行createUtility

[IFlySpeechUtility createUtility:initString];

创建合成对象,为单例模式

_iFlySpeechSynthesizer = [IFlySpeechSynthesizer sharedInstance];    
_iFlySpeechSynthesizer.delegate = self;

设置语音合成的参数,合成的语速,取值范围0~100

[_iFlySpeechSynthesizer setParameter:@"50" forKey:[IFlySpeechConstant SPEED]];

合成的音量;取值范围0~100

[_iFlySpeechSynthesizer setParameter:@"50" forKey:[IFlySpeechConstant VOLUME]];

发音人,默认为”xiaoyan”;可以设置的参数列表可参考个性化发音人列表

[_iFlySpeechSynthesizer setParameter:@"xiaoyan" forKey:[IFlySpeechConstant VOICE_NAME]];

音频采样率,目前支持的采样率有16000 和 8000

[_iFlySpeechSynthesizer setParameter:@"8000" forKey:[IFlySpeechConstant SAMPLE_RATE]];

asr_audio_path保存录音文件路径,如不再需要,设置value为nil表示取消,默认目录是documents

[_iFlySpeechSynthesizer setParameter:@"tts.pcm" forKey:[IFlySpeechConstant TTS_AUDIO_PATH]];

隐藏键盘,点击空白处

UITapGestureRecognizer *tapGr = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)];
    
tapGr.cancelsTouchesInView = NO;
    
[self.view addGestureRecognizer:tapGr];

点击空白处隐藏键盘方法

-(void)viewTapped:(UITapGestureRecognizer*)tapGr
{
    [self.content resignFirstResponder];
}
```

####5.IFlySpeechSynthesizerDelegate代理方法

开始播放
```
-(void)onSpeakBegin
{
    
}
```

缓冲进度
```
-(void)onBufferProgress:(int)progress message:(NSString *)msg
{
    NSLog(@"bufferProgress:%d,message:%@",progress,msg);
}
```

播放进度
```
-(void)onSpeakProgress:(int)
progress
{
    NSLog(@"playprogress:%d",progress);
}
```

暂停播放
```
-(void)onSpeakPaused
{

}
```

恢复播放
```
-(void)onSpeakResumed
{

}
```

结束回调
```
-(void)onCompleted:(IFlySpeechError *) error
{

}
```

####6.开始语言合成按钮
```
- (IBAction)Start:(id)sender {
    //启动合成会话
    [_iFlySpeechSynthesizer startSpeaking:self.content.text];
}
```

#####以上的代理方法其实是可以不写的,但是官方给出的说明是需要加上的。若是在运行过程中出现错误,可以查看开发者文档的错误码列表,找出相应的错误。
然后就……

#完成了!

下集预告:
【OC功能】科大讯飞(三)语音识别
---

###参考资料:
>[讯飞开放平台 iOS开发文档](http://www.xfyun.cn/doccenter/iOS)
[ IOS开发之语音合成(科大讯飞)详解](http://blog.csdn.net/gf771115/article/details/51544087)

你可能感兴趣的:(【OC功能】科大讯飞(二)语音合成)