AV Foundation 实现文字转语音
AV Foundation
主要框架
- CoreAudio
- 音频处理框架
- 扩展学习:《Learning CoreAudio》
- CoreVideo
- 视频处理的管道模式,逐帧访问
- CoreMedia
- 提供音频和视频处理的低级数据类型和接口,如CMTime
- CoreAnimation
- 动画框架
AV Foundation解析
- 音频播放和记录
- AVAudioPlayer
- AVAudioRecorder
- 媒体文件检查
- 媒体文件的信息,媒体长度,创建时间等
- 艺术家
- 视频播放
- AVPlayer
- AVPlayerItem
- 媒体捕捉
- 摄像头 AVCaputureSession
- 媒体编辑
- 音视频整合,编辑,修改,场景动画,如IMovie
- 媒体处理
- AVAssetReader
- AVAssetWriter
文字转语音
文字转语音主要是用到
AVSpeechSynthesizer
类里面封装了一些语音的常见操作,包括常见的播放、暂停、停止等
使用AV Foundation需要包含头文件
#import <AVFoundation/AVFoundation.h>
声明一个
AVSpeechSynthesizer
实例
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()
/**语音播放对象*/
@property (nonatomic, strong) AVSpeechSynthesizer *synthesizer;
/**语音支持类型数组*/
@property (nonatomic, copy) NSArray *voices;
/// 播放的文字数组
@property (nonatomic, copy) NSArray *speechStrings;
/// 当前播放
@property (nonatomic, assign) NSInteger *currentIndex;
@end
- 初始化实例对象
//1 创建AVSpeechSynthesizer对象 _synthesizer = [[AVSpeechSynthesizer alloc] init];
- 设置支持的语模式,可以通过方法
speechVoices
获得系统支持的语音
// 查看支持的语音体系
NSLog(@"%@",[AVSpeechSynthesisVoice speechVoices]);
// 这里只用中文演示
_voices =
@[
[AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"]
];
- 然后从本地读取一个文件,以换行符分隔
// 从本地读取文件
- (void)read {
_speechStrings = [[NSString stringWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"test" ofType:@"txt"] encoding:NSUTF8StringEncoding error:nil] componentsSeparatedByString:@"\n"];
}
- 最后点击屏幕即可播放
// 开始播放
- (void)beginConversation {
for (NSInteger i = 0; i < self.speechStrings.count; i ++) {
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:self.speechStrings[i]];
// 播放语音类型
utterance.voice = self.voices[0];
// 播放速率
utterance.rate = 0.4f;
// 音调改变
utterance.pitchMultiplier= 0.8f;
// 播放下一条暂停一下
utterance.postUtteranceDelay = 0.1f;
[_synthesizer speakUtterance:utterance];
}
}
播放控制
- (IBAction)play:(id)sender {
if (_currentIndex == 0) {
[self beginConversation:_currentIndex];
}else {
[_synthesizer continueSpeaking];
}
}
- (IBAction)stop:(id)sender {
_currentIndex = 0;
[_synthesizer stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];
}
- (IBAction)pause:(id)sender {
[_synthesizer pauseSpeakingAtBoundary:AVSpeechBoundaryImmediate];
}
- (IBAction)previous:(id)sender {
_currentIndex -= 2;
if (_currentIndex <= 0) {
_currentIndex = 0;
}else if(_currentIndex >= _speechStrings.count) {
_currentIndex = _speechStrings.count;
}
[_synthesizer stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];
[self beginConversation:_currentIndex];
}
- (IBAction)next:(id)sender {
if (_currentIndex <= 0) {
_currentIndex = 0;
}else if(_currentIndex >= _speechStrings.count) {
_currentIndex = _speechStrings.count;
}
[_synthesizer stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];
[self beginConversation:_currentIndex];
}
// 代理方法
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didStartSpeechUtterance:(AVSpeechUtterance *)utterance {
_currentIndex ++;
if (_currentIndex <= 0) {
_currentIndex = 0;
}else if(_currentIndex >= _speechStrings.count) {
_currentIndex = _speechStrings.count;
}
self.currentLabel.text = [NSString stringWithFormat:@"%zd",_currentIndex];
}
- (void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance *)utterance {
}
AV Foundation 实现文字转语音的更多相关文章
- IOS开发之学习《AV Foundation 开发秘籍》
敲了这么久的代码,查阅了很多资料,都是网络电子版的,而且时间久了眼睛也累了,还不如看一下纸质的书籍,让眼睛休息休息. 本篇开始学习<AV Foundation 开发秘籍>,并记录对自己本人 ...
- C# 语音识别(文字to语音、语音to文字)
最近打算研究一下语音识别,但是发现网上很少有C#的完整代码,就把自己的学习心得放上来,和大家分享一下. 下载API: 1)SpeechSDK51.exe (67.0 ...
- Android文字转语音
虽然视觉上的反馈通常是给用户提供信息最快的方式,但这要求用户把注意力设备上.当用户不能查看设备时,则需要一些其他通信的方法.Android提供了强大的文字转语音Text-to-Speech,TTS A ...
- Android实例-调用GOOGLE的TTS实现文字转语音(XE7+小米2)(无图)
注意:在手机上必须选安装文字转语音引擎“google Text To Speech”地址:http://www.shouji56.com/soft/GoogleWenZiZhuanYuYinYinQi ...
- iOS语音识别,语音播报,文字变语音播报,语音变文字
首先使用的是科大讯飞的sdk 1.语音识别部分 AppDelegate.m #import "AppDelegate.h" #import <iflyMSC/iflyMSC. ...
- 简单C#文字转语音
跟着微软走妥妥的,C#文字转语音有很多参数我就不说了,毕竟我也是初学者.跟大家分享最简单的方法,要好的效果得自己琢磨喽: 先添加引用System.Speech程序集: using System; us ...
- Android技术分享-文字转语音并朗读
Android技术分享-文字转语音并朗读 最近在做一个项目,其中有一个功能是需要将文本转换成语音并播放出来.下面我将我的做法分享一下. 非常令人开心的是,Android系统目前已经集成了TTS,提供了 ...
- TTS 文字转语音 ekho
1.源码下载 使用svn客户端,执行如下命令下载 svn co https://svn.code.sf.net/p/e-guidedog/code/ 2.官方网站查看说明 http://www.egu ...
- Android文字转语音引擎(TTS)使用
百度网盘下载地址 密码:3si0资源来源:https://blog.csdn.net/Sqq_yj/article/details/82460580?utm_source=blogxgwz4 简单比较 ...
随机推荐
- 生理周期,POJ(1006)
题目链接:http://poj.org/problem?id=1006 解题报告: 1.枚举天数的时候可以根据前面的结果直接跳过一些错误的答案. ///三个周期是23,28,33, #include ...
- eclipse properties 文件查看和编辑插件
*.properties属性文件,如果文件中包含中文,会出现乱码.为了解决这个问题,可以为Eclipse安装Properties Editor插件解决这个问题. 步骤 1 安装Properties ...
- 【luogu P2939 [USACO09FEB]改造路Revamping Trails】 题解
题目链接:https://www.luogu.org/problemnew/show/P2939 本来说是双倍经验题,跟飞行路线一样的,结果我飞行路线拿deque优化SPFA过了这里过不了了. 所以多 ...
- 【luoguP1219】【USACO】八皇后
P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...
- AngularJS 三 控制器和事件
AngularJS控制器: ngularJS中的控制器是一个使用 $ scope 对象维护应用程序数据和行为的JavaScript函数. 您可以将属性和方法附加到控制器函数内的 $ scope 对象 ...
- Python 学习笔记(三)数字
Python 数字 int 整型 是正或负整数 2 long 长整型 整数最后是一个大写或小写的L 2L float 浮点型 由整数部分和小数部分组成 2.0 complex 复数 小 ...
- 菜鸟笔记 -- Chapter 11 格式化
我们在String中介绍过它有一个格式化的方法,在其它很多地方,也都能看到格式化的操作,那么这节我们就来认真了解一下Java中的格式化操作. 我们在操作中涉及到的格式化有字符串的格式化和一些其它数据类 ...
- JavaFXML实现新窗口打开
实现原理顺着往下看就明白了,流程看红色字体.具体还有什么问题可以留言. 主页面配置文件,一共三个按钮.这里说明第一个按钮触发打开新窗口 <?xml version="1.0" ...
- 02-第一个iOS程序
第一个iOS程序 第一个iOS程序简介 初学iOS开发,研究的程序不要过于复杂,应该从最基本的开始 大房子都是由小砖一块一块堆成的,而大型app是由无数个小程序段组成的 接下来实现一个简单的“加法计算 ...
- 使用缓存时出现java.io.NotSerializableException:xxx.xxx.xxx.Bean解决办法
解决方案: 开发过程中如果想缓存某个JavaBean,请确保它所引用的对象都implents Serializable,如果某个对象不需要被cache,可以加上transient关键字,否则Ehc ...