首先使用的是科大讯飞的sdk

1.语音识别部分

AppDelegate.m

#import "AppDelegate.h"

#import <iflyMSC/iflyMSC.h>

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",@"你的app ID"];

[IFlySpeechUtility createUtility:initString];

return YES;

}

.h文件

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@end

.m实现文件

#import "ViewController.h"

#import <iflyMSC/iflyMSC.h>

@interface ViewController ()<IFlySpeechRecognizerDelegate>

{

//不带界面的识别对象

IFlySpeechRecognizer *iFlySpeechRecognizer;

}

@property(nonatomic,strong)UILabel * showLabel;

@end

@implementation ViewController

-(void)viewDidLoad{

[super viewDidLoad];

self.showLabel = [[UILabel alloc]initWithFrame:CGRectMake(8,200,300,200)];

self.showLabel.textColor = [UIColor redColor];

[self.view addSubview:self.showLabel];

//1.创建语音听写对象

iFlySpeechRecognizer = [IFlySpeechRecognizer sharedInstance]; //设置听写模式

iFlySpeechRecognizer.delegate = self;

[iFlySpeechRecognizer setParameter:@"iat" forKey:[IFlySpeechConstant IFLY_DOMAIN]];

//2.设置听写参数

[iFlySpeechRecognizer setParameter: @"iat" forKey: [IFlySpeechConstant IFLY_DOMAIN]];

//asr_audio_path是录音文件名,设置value为nil或者为空取消保存,默认保存目录在 Library/cache下。

[iFlySpeechRecognizer setParameter:@"asrview.pcm" forKey:[IFlySpeechConstant ASR_AUDIO_PATH]];

UIButton * startButton = [[UIButton alloc]initWithFrame:CGRectMake(20,100,100,50)];

[startButton addTarget:self action:@selector(startButtonDidClick) forControlEvents:UIControlEventTouchUpInside];

startButton.backgroundColor = [UIColor orangeColor];

[startButton setTitle:@"开始录音" forState:UIControlStateNormal];

[self.view addSubview:startButton];

UIButton * endButton = [[UIButton alloc]initWithFrame:CGRectMake(200,100,100,50)];

[endButton addTarget:self action:@selector(endButtonDidClick) forControlEvents:UIControlEventTouchUpInside];

endButton.backgroundColor = [UIColor orangeColor];

[endButton setTitle:@"结束录音" forState:UIControlStateNormal];

[self.view addSubview:endButton];

}

-(void)startButtonDidClick{

//3.启动识别服务

[iFlySpeechRecognizer startListening];

}

-(void)endButtonDidClick{

//识别服务

[iFlySpeechRecognizer stopListening];

}

- (void) onResults:(NSArray *) results isLast:(BOOL)isLast{

NSMutableString * resultString = [[NSMutableString alloc]init];

if (!isLast) {

NSDictionary *dic = results[0];

NSArray * keys = [dic allKeys];

for (NSString *key in keys) {

NSData * resData = [key dataUsingEncoding:NSUTF8StringEncoding];

NSDictionary * resultFromJson =  [NSJSONSerialization JSONObjectWithData:resData options:NSJSONReadingAllowFragments error:nil];

NSArray * tempArray = resultFromJson[@"ws"];

for (NSDictionary * tempDic in tempArray) {

NSArray * cwArray = tempDic[@"cw"];

for (NSDictionary * resultDic in cwArray) {

NSString * str = [NSString stringWithFormat:@"%@",resultDic[@"w"]];

[resultString appendString:str];

}

}

}

self.showLabel.text = [NSString stringWithFormat:@"%@",resultString];

}

}

/*识别会话结束返回代理

@ param error 错误码,error.errorCode=0表示正常结束,非0表示发生错误。 */

- (void)onError: (IFlySpeechError *) error{

NSLog(@"%@",error.errorDesc);

}

/**

停止录音回调

****/

- (void) onEndOfSpeech {

}

/**

开始识别回调

****/

- (void) onBeginOfSpeech {

}

/**

音量回调函数 volume 0-30

****/

- (void) onVolumeChanged: (int)volume {

}

@end

2  文字变语音 语音合成播报部分

首先写一个工具当然这个不是我写的,能用^_^

.h 文件如下

#import <UIKit/UIKit.h>

#import <AVFoundation/AVSpeechSynthesis.h>

@interface SpeechSynthesizer : NSObject

+ (instancetype)sharedSpeechSynthesizer;

- (void)speakString:(NSString *)string;

- (void)stopSpeak;

@end

.m 文件如下

#import "SpeechSynthesizer.h"

@interface SpeechSynthesizer () <AVSpeechSynthesizerDelegate>

@property (nonatomic, strong, readwrite) AVSpeechSynthesizer *speechSynthesizer;

@end

@implementation SpeechSynthesizer

+ (instancetype)sharedSpeechSynthesizer

{

static id sharedInstance = nil;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

sharedInstance = [[SpeechSynthesizer alloc] init];

});

return sharedInstance;

}

- (instancetype)init

{

if (self = [super init])

{

[self buildSpeechSynthesizer];

}

return self;

}

- (void)buildSpeechSynthesizer

{

if ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)

{

return;

}

self.speechSynthesizer = [[AVSpeechSynthesizer alloc] init];

[self.speechSynthesizer setDelegate:self];

}

- (void)speakString:(NSString *)string

{

if (self.speechSynthesizer)

{

AVSpeechUtterance *aUtterance = [AVSpeechUtterance speechUtteranceWithString:string];

[aUtterance setVoice:[AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"]];

//iOS语音合成在iOS8及以下版本系统上语速异常

if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0)

{

aUtterance.rate = 0.25;//iOS7设置为0.25

}

else if ([[[UIDevice currentDevice] systemVersion] floatValue] < 9.0)

{

aUtterance.rate = 0.15;//iOS8设置为0.15

}

if ([self.speechSynthesizer isSpeaking])

{

[self.speechSynthesizer stopSpeakingAtBoundary:AVSpeechBoundaryWord];

}

[self.speechSynthesizer speakUtterance:aUtterance];

}

}

- (void)stopSpeak

{

if (self.speechSynthesizer)

{

[self.speechSynthesizer stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];

}

}

@end

使用方法如下

语音播报“世界那么大我想去看看”

[[SpeechSynthesizer sharedSpeechSynthesizer] speakString:@"世界那么大我想去看看"];

停止播报

[[SpeechSynthesizer sharedSpeechSynthesizer] stopSpeak];

iOS语音识别,语音播报,文字变语音播报,语音变文字的更多相关文章

  1. iOS后台唤醒实战:微信收款到账语音提醒技术总结

    1.前言 微信为了解决小商户老板们在频繁交易中不方便核对.确认到账的功能痛点,产品MM提出了新版本需要支持收款到账语音提醒功能.本文借此总结了iOS平台上的APP后台唤醒和语音合成.播放等一系列技术开 ...

  2. 当语音识别搭配AI之后,我的语音助手更懂我的心了

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云AI中心发表于云+社区专栏 我今天演讲主要分四个部分,第一个是分享语音识别概述,然后是深度神经网络的基础:接下来就是深度学习在语 ...

  3. 实时语音趣味变声,大叔变声“妙音娘子”Get一下

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云 发表于云+社区专栏 游戏社交化是近年来游戏行业发展的重要趋势,如何提高游戏的社交属性已成为各大游戏厂商游戏策划的重要组成部 ...

  4. SLAM+语音机器人DIY系列:(七)语音交互与自然语言处理——1.语音交互相关技术

    摘要 这一章将进入机器人语音交互的学习,让机器人能跟人进行语音对话交流.这是一件很酷的事情,本章将涉及到语音识别.语音合成.自然语言处理方面的知识.本章内容: 1.语音交互相关技术 2.机器人语音交互 ...

  5. 离线语音Snowboy热词唤醒+ 树莓派语音交互实现开关灯

    离线语音Snowboy热词唤醒 语音识别现在有非常广泛的应用场景,如手机的语音助手,智能音响(小爱,叮咚,天猫精灵...)等. 语音识别一般包含三个阶段:热词唤醒,语音录入,识别和逻辑控制阶段. 热词 ...

  6. 论文笔记:语音情感识别(五)语音特征集之eGeMAPS,ComParE,09IS,BoAW

    一:LLDs特征和HSFs特征 (1)首先区分一下frame和utterance,frame就是一帧语音.utterance是一段语音,是比帧高一级的语音单位,通常指一句话,一个语音样本.uttera ...

  7. php如何清除html格式并去除文字中的空格然后截取文字

    PHP如何清除html格式并去除文字中的空格然后截取文字,详细分享一下处理方法(顺便对PHP清除HTML字符串的函数做了一个小结): htmlspecialchars 将特殊字元转成 HTML格式语法 ...

  8. C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字

    C#+OpenGL+FreeType显示3D文字(2) - 用GLSL+VBO绘制文字 +BIT祝威+悄悄在此留下版了个权的信息说: 上一篇得到了字形贴图及其位置字典(可导出为XML).本篇就利用此贴 ...

  9. UIButton图片文字控件位置自定义(图片居右文字居左、图片居中文字居中、图片居左文字消失等)

    在开发中经常会碰到需要对按钮中的图片文字位置做调整的需求.第一种方式是通过设置按钮中图片文字的偏移量.通过方法setTitleEdgeInsets和setImageEdgeInsets实现 代码如下: ...

随机推荐

  1. machine learning in action , part 1

    We should think in below four questions: the decription of machine learning key tasks in machine lea ...

  2. mysql的distinct理解

    select distinct id,name from route where update_time>=''; 上面的sql语句的逻辑是两条记录的id,name只要有一个不一样,就算不一样. ...

  3. c-整型家族(integer family)

    C中,整型有: characters, short integer, integer, long integer 看起来,long integer要比short integer大,但是这也是不一定的. ...

  4. 【转】深入理解Java内存模型(六)——final

    与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问.对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象 ...

  5. CSS3过渡效果实现菜单划出效果

    下载地址 这是大体上的原理,当然案例比这个多 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...

  6. php随机密码

    <?php /* * php自动生成新密码自定义函数(带实例演示) 适用环境: PHP5.2.x / mysql 5.0.x * */ function genPassword($a=1,$b= ...

  7. [转]extern,static存储空间矛盾

    其实,这两个语句的位置不同,会出现不同的解释.这主要是由于 static 具有的两重意义所导致的: (1) 如果 static int foo; 这一句位于函数中,则 static 表示的是存储属性, ...

  8. 关于Jquery EasyUI中的DataGrid服务器端分页随记

    一.关于DataGrid的分页和排序参数 对于分页参数不需要用户指定,程序在AJAX请求的时候会带上分页和排序需要的参数 每页显示条数:rows 当前页:page 排序字段:sort  [multiS ...

  9. 《javascript权威指南》读书笔记 -part2

    我真的很佩服副院长~他是一个很有耐心 极其细致的人 工作态度严谨  代码简洁风格统一~再乱遭遭的代码只要经过他的手就会变的很漂亮 羡煞我也~ 不说废话了  还是乖乖看书吧~maybe可能也许的某一天 ...

  10. WordPress插件制作笔记(一)---First Plugins Demo

    1->add_action  HOOK简单说明: http://codex.wordpress.org/Plugin_API/Action_Reference (参考网址) //在后台页脚位置加 ...