iOS语音识别,语音播报,文字变语音播报,语音变文字

首先使用的是科大讯飞的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];

时间: 2024-11-01 02:24:30

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

Win8系统语音识别使用方法和xp内置语音输入软件安装

下面介绍两款现在主流系统的一些特殊功能,语音输入,也许你还没有正式使用这些功能,但是系统中既然有这项功能就有着它存在的意义,这节就讲下Win8与XP的语音识别功能的使用方法. 之一<Win8>启动语音识别功能 首先,用户需要准备一部笔记本电脑和一个麦克风.Win8语音识别程序能够支持任何类型的麦克风,甚至包括内置在用户笔记本中的扩音器.不过,微软表示,价格在20美元左右的麦克风效果最佳. 激活语音识别功能最简单方法就是打开"开始"(Start)界面,输入"语音&q

【iOS开发】封装聊天输入框MKInputBar,语音支持iOS &amp; Android平台

最近做的一个项目,有聊天的功能,最开始从网上找了个被人封装好的输入框,写的很复杂(反正我有点被看迷糊了),用起来呢又有点问题,最终放弃,自己封装了一个聊天输入框MKInputBar,难度不大.语音支持iOS和Android平台,其实就是把caf转换为mp3.底部给出了Demo工程,用起来很简单. 先上几张图吧       用法很简答,封装好只有两个文件MKInputBar.h & MKInputBar.m,实现三个代理方法: 1 - (void)inputBar:(MKInputBar *)in

文字怎样转换成语音的?转换的方法

文字怎样转换成语音?转换的方法,当我们在阅读一些文字时,有的时候我们需要将这些文件中的文字进行转换成语音的形式,这就需要我们进行在线转换,下面就让小编给大家简单介绍一下.步骤一:我们可以通过在浏览器上的查找和搜索迅捷语音云服务找到文字转语音的网站中进行转换: 步骤二:找到文字转语音的功能按钮,点击进入之后就可以进行一些参数的设置,输出格式.音色类型.背景音乐等一系列的设置: 步骤三:等设置完后即可进行文字的输入,将需要转换成语音的文字输入到界面中去: 步骤四:等输入好之后就可以进行文件的转换了点

ExtJS4.2 Grid知识点四:改变表格Grid行文字颜色,划过Grid行时文字变粗

在ExtJS4.2 Grid知识点一:改变表格Grid单元格文字颜色一文中讲解了如何改变单元格中文字颜色,接下来在本章学习如何改变Grid中整行文字的颜色,这样就不需要为每列单独定义renderer函数,显示结果如图片: 在线演示  /  示例代码 实现方式是在Grid中设置viewConfig属性的getRowClass函数,函数参数列表如下: record: 当前待渲染行数据Model,类型为:Ext.data.Model rowIndex: 当前待渲染行数,类型为:Number rowPa

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

PHP如何清除html格式并去除文字中的空格然后截取文字,详细分享一下处理方法(顺便对PHP清除HTML字符串的函数做了一个小结): htmlspecialchars 将特殊字元转成 HTML格式语法: string htmlspecialchars(string string);传回值: 字串函式种类: 资料处理内容说明 本函式将特殊字元转成 HTML 的字串格式 ( &....; ).最常用到的场合可能就是处理客户留言的留言版了.& (和) 转成 & " (双引号)

Python3基础 字符串 swapcase 英文字母小写变大写 并且 大写变小写

镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.------------------------------------------ code: myStr='hello WORLD' #大写变小写 并 小写变大写 myNewStr=myStr.swapcase() print(myStr) print(myNewStr) result: ============= RESTART: C:/Users/Administr

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

在开发中经常会碰到需要对按钮中的图片文字位置做调整的需求.第一种方式是通过设置按钮中图片文字的偏移量.通过方法setTitleEdgeInsets和setImageEdgeInsets实现 代码如下: /*!**方式一***/ - (void)updateBtnStyle_rightImage:(UIButton *)btn { CGFloat btnImageWidth = btn.imageView.bounds.size.width; CGFloat btnLabelWidth = btn

CSS文字被鼠标选中后的文字颜色及背景

::selection {background:#FF9; color:#F00;}::-moz-selection {background:#FF9; color:#F00;}::-webkit-selection {background:#FF9; color:#F00;} CSS文字被鼠标选中后的文字颜色及背景

CSS图标文字对齐和表单输入框文字对齐兼容

张鑫旭的一篇文章,讲到20像素图标对齐和表单元素40像素对齐有所收获,谢谢@张鑫旭 ,很多观点跟平时的处理方式不谋而合,一般来说,我处理图标如果临近的话都会使用同样宽高,然后使用inline-block比较多,表单输入框和按钮以line-height:21-22为准.然后超出的用padding来补充. 以下摘录部分原文中的实践代码. 1.图标和文字对齐 一般的图标和文字对齐html代码: <p><i class="icon"></i>前端开发博客&l