IOS开发–语音播报

想要实现iOS语音播报,要使用讯飞/百度语音播报的第三方接口。我使用的是讯飞的语音合成接口。

登录注册讯飞平台,申请语音合成接口!

下载iOS开发所需sdk,sdk中包含语音开发所需依赖包,以及一个演示demo。


使用Xcode的编写代码

标题首先要导入语音播报所需的依赖包,可以直接从demo中将依赖包全部拖到自己的工程中

其次,在AppDelegate.m中初始化你申请的接口id

//引入语音播报的头文件
#import "AppDelegate.h"
#import "IFlyMSC/IFlyMSC.h"
//初始化ID
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@", @"你自己申请的appid"];[IFlySpeechUtility createUtility:initString];return YES;
}

我做的一个简单demo

viewController.h


#import <UIKit/UIKit.h>
#import "IFlyMSC/IFlyMSC.h"
#import <AVFoundation/AVFoundation.h>@class IFlySpeechSynthesizer;typedef NS_OPTIONS(NSInteger, SynthesizeType) {NomalType           = 5,    //Normal TTSUriType             = 6,    //URI TTS
};//state of TTS
typedef NS_OPTIONS(NSInteger, Status) {NotStart            = 0,Playing             = 2,Paused              = 4,
};@interface ViewController : UIViewController <IFlySpeechSynthesizerDelegate>
@property (nonatomic, strong) IFlySpeechSynthesizer * iFlySpeechSynthesizer;@property (nonatomic, strong)  UILabel *label;
@property (nonatomic, strong)  UIButton *btn;
@property (nonatomic, strong)  UIButton *pause;
@property (nonatomic, strong)  UIButton *stop;
//@property (weak, nonatomic) IBOutlet UIButton *startSynthesizeBtn;
//@property (weak, nonatomic) IBOutlet UIButton *cancelSynthesizeBtn;
//@property (weak, nonatomic) IBOutlet UIButton *uriSynthesizeBtn;
//@property (weak, nonatomic) IBOutlet UIButton *clearTextBtn;
//@property (weak, nonatomic) IBOutlet UIButton *pauseSynthesizeBtn;
//@property (weak, nonatomic) IBOutlet UIButton *resumeSynthesizeBtn;@property (nonatomic, assign) Status state;
@property (nonatomic, assign) SynthesizeType synType;@end

viewController.m


#import "ViewController.h"
#import "iflyMSC/IFlyMSC.h"
int flag;
int sign;@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.//UILabel *label=[[UILabel alloc]init];_label=[[UILabel alloc]init];_label.frame=CGRectMake(0, 0, self.view.frame.size.width, 500);//label.backgroundColor=[UIColor blueColor];_label.numberOfLines=0;[_label setText:@"《象传》全文    “天行健,君子以自强不息”(乾卦)   “地势坤,君子以厚德载物”(坤卦)。   “随风巽,君子以申命行事”(巽卦)   “渐雷震,君子以恐惧修省”(震卦)。   “善如水,君子以作事谋始”(坎卦)   “火同人,君子以类族辨物”(离卦)。   “步泽履,君子以辨民安志”(兑卦)   “艮山谦,君子以裒多益寡”(艮卦)。"];//UIButton *btn=[[UIButton alloc]init];flag=0;sign=0;//开始播报_btn=[[UIButton alloc]init];_btn.frame=CGRectMake(100, self.view.frame.size.height-50, self.view.frame.size.width-200, 50);[_btn setImage:[UIImage imageNamed:@"未播报"] forState:UIControlStateNormal];[_btn setTitle:@"语音播报" forState:UIControlStateNormal];[_btn setBackgroundImage:[UIImage imageNamed:@"button1"] forState:UIControlStateNormal];//暂停播报_pause=[[UIButton alloc]init];_pause.frame=CGRectMake(100, self.view.frame.size.height-100, self.view.frame.size.width-200, 50);[_pause setBackgroundImage:[UIImage imageNamed:@"button1"] forState:UIControlStateNormal];[_pause setTitle:@"暂停播报" forState:UIControlStateNormal];[_pause setImage:[UIImage imageNamed:@"pause"] forState:UIControlStateNormal];_pause.alpha=0;//停止播报_stop=[[UIButton alloc]init];_stop.frame=CGRectMake(100, self.view.frame.size.height-150, self.view.frame.size.width-200, 50);[_stop setBackgroundImage:[UIImage imageNamed:@"button1"] forState:UIControlStateNormal];[_stop setImage:[UIImage imageNamed:@"stop"] forState:UIControlStateNormal];[_stop setTitle:@"停止播报" forState:UIControlStateNormal];_stop.alpha=0;//[_btn setTitle:@"正在播报" forState:UIControlStateHighlighted];//    [_btn setBackgroundImage:[UIImage imageNamed:@"按钮"] forState:UIControlStateHighlighted];//_btn.backgroundColor=[UIColor redColor];[self.view addSubview:_label];[self.view addSubview:_pause];[self.view addSubview:_stop];
//      [self.view addSubview:_btn];[self.view addSubview:_btn];[_btn addTarget:self action:@selector(start) forControlEvents:UIControlEventTouchUpInside];[_pause addTarget:self action:@selector(pause) forControlEvents:UIControlEventTouchUpInside];[_stop addTarget:self action:@selector(stop) forControlEvents:UIControlEventTouchUpInside];
}//开始播报
- (void) start{_pause.alpha=1;_stop.alpha=1;if(flag==0){[_btn setImage:[UIImage imageNamed:@"播报"] forState:UIControlStateNormal];[_btn setTitle:@"正在播报" forState:UIControlStateNormal];flag=1;}else{[_btn setImage:[UIImage imageNamed:@"未播报"] forState:UIControlStateNormal];[_btn setTitle:@"语音播报" forState:UIControlStateNormal];flag=0;}NSString* str= _label.text;NSLog(@"---------");//NSLog(str);_synType = NomalType;//获取语音合成单例_iFlySpeechSynthesizer = [IFlySpeechSynthesizer sharedInstance];//设置协议委托对象_iFlySpeechSynthesizer.delegate = self;//设置合成参数//设置内容编码,获取纯文本内容[_iFlySpeechSynthesizer setParameter:@"unicode" forKey:[IFlySpeechConstant TEXT_ENCODING]];//设置在线工作方式[_iFlySpeechSynthesizer setParameter:[IFlySpeechConstant TYPE_CLOUD]forKey:[IFlySpeechConstant ENGINE_TYPE]];//设置音量,取值范围 0~100[_iFlySpeechSynthesizer setParameter:@"50"forKey: [IFlySpeechConstant VOLUME]];//发音人,默认为”xiaoyan”,可以设置的参数列表可参考“合成发音人列表”[_iFlySpeechSynthesizer setParameter:@" xiaoyan "forKey: [IFlySpeechConstant VOICE_NAME]];//保存合成文件名,如不再需要,设置为nil或者为空表示取消,默认目录位于library/cache下[_iFlySpeechSynthesizer setParameter:@" tts.pcm"forKey: [IFlySpeechConstant TTS_AUDIO_PATH]];//启动合成会话[_iFlySpeechSynthesizer startSpeaking: str];//IFlySpeechSynthesizerDelegate协议实现//合成结束if (_iFlySpeechSynthesizer.isSpeaking) {_state = Playing;}
}
//暂停播报
- (void) pause{if(sign==0){[_iFlySpeechSynthesizer pauseSpeaking];[_pause setTitle:@"继续播报" forState:UIControlStateNormal];[_pause setImage:[UIImage imageNamed:@"play"] forState:UIControlStateNormal];sign=1;}else{[_iFlySpeechSynthesizer resumeSpeaking];[_pause setTitle:@"暂停播报" forState:UIControlStateNormal];[_pause setImage:[UIImage imageNamed:@"pause"] forState:UIControlStateNormal];sign=0;}}//结束播报
- (void) stop{flag=0;sign=0;_pause.alpha=0;_stop.alpha=0;[_btn setImage:[UIImage imageNamed:@"未播报"] forState:UIControlStateNormal];[_btn setTitle:@"语音播报" forState:UIControlStateNormal];[_iFlySpeechSynthesizer stopSpeaking];
}- (void) onCompleted:(IFlySpeechError *) error {}
//合成开始
- (void) onSpeakBegin {}
//合成缓冲进度
- (void) onBufferProgress:(int) progress message:(NSString *)msg {NSLog(@"buffer progress %2d%%. msg: %@.", progress, msg);}
//合成播放进度
- (void) onSpeakProgress:(int) progress beginPos:(int)beginPos endPos:(int)endPos {}@end

IOS开发--语音合成(讯飞接口)相关推荐

  1. 微信小程序使用讯飞接口语音识别

    之前看过网上其他几位使用讯飞的接口来做微信小程序的.在自己实际跟着别人的博客做的时候,却又会遇到一些问题.所以在此对使用讯飞接口做一个总结.这里我是用WebAPI来做. 1. 申请科大讯飞的接口 科大 ...

  2. 基于讯飞接口的语音识别(python)

    1.下载内容 1.pyaudio安装 简介: pyaudio库,使用这个可以进行录音,播放,生成wav文件等等.PyAudio 提供了 PortAudio 的 Python 语言版本,这是一个跨平台的 ...

  3. Android应用开发接入讯飞语音合成

    前言: 在日常的生活中免不了要有一些指定的文字需要手机帮我们读出来,那这个时候我就需要考虑到怎么样才能让手机帮我们读出来呢? 实现的方法: 接下来我来说说实现的方法以及步骤,我们都知道Android原 ...

  4. 在线语音合成 讯飞 5-2-1

    1.下载sdk 2.继承SDK 将在官网下载的Android SDK 压缩包中libs目录下所有子文件拷贝至Android工程的libs目录下.如下图所示: 注意:使用Android Studio的开 ...

  5. iOS使用讯飞语音-语音识别(最新版)

    引言 去年在一家公司实习,接触了一点人工智能.既然接触人工智能,那么语音识别.语音合成.人脸识别等等都是必不可少的. 本来已经是离开iOS开发这条路了,还剩下毕业设计要做,所以这段时间最后一次回来接触 ...

  6. C#讯飞实时语音识别和语音合成

    目录 MSC模块导入及添加枚举常量等 语音识别模块 语音合成模块 最终结果 工程使用说明 代码下载 最近由于需要做一个关于语音的c#项目,经老师推荐使用了讯飞的语音识别和合成的接口,但由于网上资源关于 ...

  7. C++通过调用Python函数调用讯飞OCR识别接口

    关于C++调用python函数的配置,在前两篇博客中已有介绍: C++调用Python函数(一)--配置及测试 C++调用Python函数(二)--调用函数并输出返回值 最近做OCR字符识别方面的工作 ...

  8. Unity与讯飞的aiui交互

    前言最近项目是做机器人,机器人最大的(普通的)AI功能就是语音交流,所以AIUI就是一个很好的选择.AIUI是封装了,讯飞的语音合成.语音识别等功能,重点是它有个兜底功能选择,还有技能工作室的加持,虽 ...

  9. “讯飞语音+”语音识别开放功能使用方法介绍

    1"讯飞语音+"功能介绍 "讯飞语音+"主要提供的语音服务包括语音合成.语音识别.语义理解和语音搜索. 语音合成 讯飞语音+提供的语音合成服务包括在线语音合成与 ...

最新文章

  1. Setting up CocoaPods master repo 卡着不动
  2. 4.12—002—周五
  3. centos7编译安装php7.3
  4. 无限超越超级机器人nds_阿里重新定义个人电脑!仅名片大小,无限升级,不怕丢失无惧病毒,价格仅传统PC一半...
  5. jquery实现输入框动态增减
  6. 2019递归实现字符串的逆序存储(C++)
  7. 成功者都在用的“成功咒语”
  8. xp系统突然上不了网【解决方案】
  9. [logstash-input-log4j]插件使用详解
  10. 【Luogu1908】逆序对(离散化,树状数组求逆序对)
  11. windows开启ftp服务及FTP命令使用
  12. 三角函数和角与差角公式的图形解释
  13. 许奔创新社-第38问:如何练就跨界打劫的本领?
  14. freyja2多数据源版本
  15. 一则“HTTP 405 Method Not Allowed”的解决办法
  16. Fabric-ca与现有fabric网络组织绑定
  17. XP系统电脑因“未激活”无法登录进入桌面,而输入序列号后提示“已激活”,以此死循环
  18. 一名合格的大数据测试工程师,需要掌握哪些基本知识
  19. HTML 几种特别分割线特效
  20. 深入浅出Flask PIN

热门文章

  1. 编译mysql提示make[2] [mysql] erro1_APACHE 编译错误:make[2]: *** [htpasswd] Error 1 解决办法...
  2. opencv-qt大津算法(Otsu)
  3. Socket.io之Socket类
  4. Jenkins安装、配置、构建、脚本、配置邮箱、上传fir
  5. java强制转换为string_toString() 和 强制类型转换 (String)
  6. 循环神经网络教程-第一部分 RNN介绍
  7. 有了这份攻略,再也不怕数据分析面试了!
  8. 1815. 得到新鲜甜甜圈的最多组数 状态压缩
  9. ROS2机器人编程简述humble-第三章-COMPUTATION GRAPH .2
  10. 许多博士生(人)的一个通病:对导师过度依赖!