ios原生文字转语音

因新项目需求,需要接入类似支付宝收款提示声----“支付宝到账xxxx元”,就查看了一些文章,苹果还是想的很周全,废话不多说。

首先

在General  -> Linked Frameworks and Libraries 中导入 AVFoundation框架

其次

头文件包含 #import <AVFoundation/AVSpeechSynthesis.h>

AVSpeechSynthesizerDelegate 实现文字转语音需要代理方法 用来控制声音,由于我的项目不需要进行控制,所以代理方法暂时不需要,稍后会贴上代理控制的方法,根据项目需求自行设置。

定义一个全局变量(局部也可),如果需要进行暂停,继续播放等控制操作,定义全局变量

@property(nonatomic,strong) AVSpeechSynthesizer *voice;

.m下创建一个textfield  --------- 用来输入需要转换的文字 (如果不需要就不创建,直接AVSpeechUtterance初始化的时候添加文字即可 稍后会讲到)

创建一个按钮 ---------用来控制语音的暂停/继续。(按钮创建就不用多说了,不会的赶紧买块豆腐去O(∩_∩)O)

按钮点击方法 在实现中需要将按钮传过去

[speechaddTarget:selfaction:@selector(speech:)forControlEvents:UIControlEventTouchUpInside];

实现

- (void)speech:(UIButton*)btn

因为要用这个按钮来判断点击状态  让她播放或者暂停或者继续播放

在实现方法中,进行初始化。

如果需要用代理方法控制声音的暂停/继续那就需要设置代理,不需要就请忽略

先初始化 后面带上需要转换的文字,也就是textField输入的内容。

接着 我们就可以玩一玩这个语音了

第一个 pitchMultiplier

音调调节  调节范围 :[0.5 - 2]  默认是:1

第二个  volume

音量调节  调节范围 :[0-1]  默认是 :1

第三个 tate

语速调节  调节范围 :[0-1]  0最慢  1 最快

说个题外话  之前一直认为支付宝的提示声也是转出来的,后来看到一个视频,发现我错了, 支付宝的提示声 是他们一个员工的声音录制的,这个员工是台湾人,也是支付宝的交互设计师,叫唐啥来着 我记不起来了。日后有机会 可以封装一个 定制文字转语音播放的库,各式各样的声音 。。。。扯多了 继续,

既然是转语音 那就需要进行语种的设置了

附上 各个语种  如果直接设置  如 “th -TH”放到 设置语种的方法最好就哦啦

"[AVSpeechSynthesisVoice 0x978a0b0] Language: th-TH",

"[AVSpeechSynthesisVoice 0x977a450] Language: pt-BR",

"[AVSpeechSynthesisVoice 0x977a480] Language: sk-SK",

"[AVSpeechSynthesisVoice 0x978ad50] Language: fr-CA",

"[AVSpeechSynthesisVoice 0x978ada0] Language: ro-RO",

"[AVSpeechSynthesisVoice 0x97823f0] Language: no-NO",

"[AVSpeechSynthesisVoice 0x978e7b0] Language: fi-FI",

"[AVSpeechSynthesisVoice 0x978af50] Language: pl-PL",

"[AVSpeechSynthesisVoice 0x978afa0] Language: de-DE",

"[AVSpeechSynthesisVoice 0x978e390] Language: nl-NL",

"[AVSpeechSynthesisVoice 0x978b030] Language: id-ID",

"[AVSpeechSynthesisVoice 0x978b080] Language: tr-TR",

"[AVSpeechSynthesisVoice 0x978b0d0] Language: it-IT",

"[AVSpeechSynthesisVoice 0x978b120] Language: pt-PT",

"[AVSpeechSynthesisVoice 0x978b170] Language: fr-FR",

"[AVSpeechSynthesisVoice 0x978b1c0] Language: ru-RU",

"[AVSpeechSynthesisVoice 0x978b210] Language: es-MX",

"[AVSpeechSynthesisVoice 0x978b2d0] Language: zh-HK",中文(香港)粤语

"[AVSpeechSynthesisVoice 0x978b320] Language: sv-SE",

"[AVSpeechSynthesisVoice 0x978b010] Language: hu-HU",

"[AVSpeechSynthesisVoice 0x978b440] Language: zh-TW",中文(台湾)

"[AVSpeechSynthesisVoice 0x978b490] Language: es-ES",

"[AVSpeechSynthesisVoice 0x978b4e0] Language: zh-CN",中文(普通话)

"[AVSpeechSynthesisVoice 0x978b530] Language: nl-BE",

"[AVSpeechSynthesisVoice 0x978b580] Language: en-GB",英语(英国)

"[AVSpeechSynthesisVoice 0x978b5d0] Language: ar-SA",

"[AVSpeechSynthesisVoice 0x978b620] Language: ko-KR",

"[AVSpeechSynthesisVoice 0x978b670] Language: cs-CZ",

"[AVSpeechSynthesisVoice 0x978b6c0] Language: en-ZA",

"[AVSpeechSynthesisVoice 0x978aed0] Language: en-AU",

"[AVSpeechSynthesisVoice 0x978af20] Language: da-DK",

"[AVSpeechSynthesisVoice 0x978b810] Language: en-US",英语(美国)

"[AVSpeechSynthesisVoice 0x978b860] Language: en-IE",

"[AVSpeechSynthesisVoice 0x978b8b0] Language: hi-IN",

"[AVSpeechSynthesisVoice 0x978b900] Language: el-GR",

"[AVSpeechSynthesisVoice 0x978b950] Language: ja-JP"

最后 开始  播放 停止播放 这里就不用代理实现了

[voice speakUtterance:speech];  //开始播放

[voice continueSpeaking]; // 停止播放

[voice pauseSpeakingAtBoundary:AVSpeechBoundaryWord];//暂停

如果想用代理实现的话 方法如下

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didStartSpeechUtterance:(AVSpeechUtterance*)utterance;

//开始

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance*)utterance;

//完成

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didPauseSpeechUtterance:(AVSpeechUtterance*)utterance;

//暂停

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didContinueSpeechUtterance:(AVSpeechUtterance*)utterance;

//恢复

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didCancelSpeechUtterance:(AVSpeechUtterance*)utterance;

//取消

这是我git地址  对这些简单的进行了包装  大家有空可以去看看https://github.com/FormerMonster/JCVoice 纯属为了方便设置 ,节省开发时间。大家见谅 如若有需要修正的 望指正 。

原文地址:https://www.cnblogs.com/deepsum/p/9713526.html

时间: 2024-10-10 07:33:17

ios原生文字转语音的相关文章

苹果原生文字转语音播报

1.CHiOSSpeech.h // // 文 件 名:CHiOSSpeech.h // // 版权所有:Copyright ? 2018年 leLight. All rights reserved. // 创 建 者:leLight // 创建日期:2018/7/30. // 文档说明:苹果原生文字转语音播报. // 修 改 人: // 修改日期: // #import <Foundation/Foundation.h> #import <AVFoundation/AVFoundati

iOS开发----文字转语音

AVSpeechSynthesizer *av=[[AVSpeechSynthesizer alloc]init];    AVSpeechUtterance *UTT=[[AVSpeechUtterance alloc]initWithString:yourText];    [av speakUtterance:UTT];

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

首先使用的是科大讯飞的sdk 1.语音识别部分 AppDelegate.m #import "AppDelegate.h" #import <iflyMSC/iflyMSC.h> @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictiona

文字转语音,语音合成,文字语音播报---解决过程

做了很久生产项目 经常遇到一个问题:就是想把文字用语音播报出来:当然了声音要清晰,好听,不能太机械.  这个问题怎么解决呢?一般不外乎两种方法,第一种,将文字录成MP3格式用控件播放.另外一种:直接文字语音播报. 我一直都是用第一种方法居多,但是最近遇到个棘手的事情,就是数量巨大和文字变动较大.因此深入研究了下,记录下过程. 第一种方法:就是费时费力但是好处是人工转换了删选了效果比较好.但是两大或者文字变动 是个大隐患. 第二种方法:用微软自带的tts引擎,效果不好.播放不清晰,好处是com组件

Android文字转语音

虽然视觉上的反馈通常是给用户提供信息最快的方式,但这要求用户把注意力设备上.当用户不能查看设备时,则需要一些其他通信的方法.Android提供了强大的文字转语音Text-to-Speech,TTS API.使开发者能够在应用中添加语音通知和其他语音反馈功能,而不要求用户看着屏幕. 下面的代码展示了如何使用TTS API: public class TextToSpeechDemo implements TextToSpeech.OnInitListener { private final Tex

HTML5能取代IOS原生应用吗

介绍 移动应用程序(App)和HTML5都是目前最火的技术,二者之间也有不少重叠之处.在移动设备浏览器里运行的html5的web页面,也可以重新打包成不同平台上运行的app.目前很多浏览器都有很好的跨平台支持,(译注:firefox居然可以在android中使用和windows下同样的浏览器内核),HTML5的web方案,对开发者来说更为方便.完成一次,即可多平台使用.但这确实可行吗?仍然有许多必要原因,使得开发者选择了app开发.很明显,很多人已经在这么做了.本文将详细分析两种方案的优劣. 功

React Native iOS原生模块开发实战|教程|心得|如何创建React Native iOS原生模块

尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691432) 前言 一直想写一下我在React Native原生模块封装方面的一些经验和心得,来分享给大家,但实在抽不开身,今天看了一下日历发现马上就春节了,所以就赶在春节之前将这篇博文写好并发布(其实是两篇:要看Android篇的点这里<React Native Android原生模块开发>). 我平时在用React Nativ

iOS原生CIFilter创建二维码

iOS原生CIFilter创建二维码 2016-05-31 未来C 关于二维码生成,网上也是有很多,很早以前的第三方库大多数都是通过C++写,也是有的如zxing,也是挺好用,这里介绍的是通过CIFilter创建二维码.   创建二维码非常简单,只要传入简单的字符串就好了 - (CIImage *)createQRForString:(NSString *)qrString { NSData *stringData = [qrString dataUsingEncoding:NSUTF8Stri

二维码扫描(iOS原生二维码扫描)

一.关于二维码扫描的第三方库有很多:例如比较常用的两个 1.ZBar SDK ZBar为我们提供了两种使用方式,一种是直接调用ZBar提供的ZBarReaderViewController打开一个扫描界面,另一种方式是使用ZBar提供的可以嵌在其他视图中的ZBarReaderView,实际项目中我们更可能会使用第二种方式,这可以让我们对界面做更多的定制,详细的百度查找相关文档来看. 2.ZXing(Github镜像地址)是一个开源的条码生成和扫描库(开源协议为Apache2.0).它不但支持众多