iOS开发播放文本
iOS7以后AVSpeechSynthesizer苹果开放了这个类 它可以将文本转化成声音并播放;
下面的是我的封装使用起来特别简单;
//
// TTSSpeak.h
// SayLoveYou
//
// Created by zyyt on 16/7/1.
//
//
/*
汉语: zh-CN (普通话)
粤语: zh-HK
英语: en-US
俄语: ru-RU
日语: ja-JP
泰语: th-TH
德语: de-DE
韩语: ko-KO
法语: fr-FR
希腊语: gr-GR
意大利语: it-IT
西班牙语: es-ES
阿拉伯语: ar-Ar
葡萄牙语: pt-PT
*/
#import <Foundation/Foundation.h>
@interface TTSSpeak : NSObject
//所需的源语言
@property (nonatomic,copy)NSString * languageCode;
//播放的速度
@property (nonatomic,readonly)NSString * playRate;
//当前播放的源语言
@property (nonatomic,readonly)NSString * currentLanguageCode;
//声音大小
@property(nonatomic) NSString * volume; // [0-1] Default = 1
+ (instancetype)shareInstance;
/*
* playText:播放的文本
*languageCode:播放的语言
*rate:播放的速度 默认为0.7
*/
- (void)playText:(NSString*)playText withNativeLanguage:(NSString*)languageCode rate:(NSString *)rate volume:(NSString*)volume ;
//停止播放
- (BOOL)stopSpeaking;
//暂停播放
- (BOOL)pauseSpeaking;
//继续播放
- (BOOL)continueSpeaking;
@end
//
// TTSSpeak.m
// SayLoveYou
//
// Created by zyyt on 16/7/1.
//
//
#import "TTSSpeak.h"
#import <AVFoundation/AVFoundation.h>
@interface TTSSpeak ()
@property (nonatomic,copy)NSString * rate;
@property (nonatomic,strong)AVSpeechSynthesizer * speechSynthesizer;
@property (nonatomic,copy)NSString * LanguageCode;
@end
@implementation TTSSpeak
- (AVSpeechSynthesizer *)speechSynthesizer
{
if (_speechSynthesizer == nil) {
_speechSynthesizer = [[AVSpeechSynthesizer alloc] init];
}
return _speechSynthesizer;
}
+ (instancetype)shareInstance
{
static TTSSpeak * sharedAccountManagerInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
sharedAccountManagerInstance = [[TTSSpeak alloc] init];
});
return sharedAccountManagerInstance;
}
- (void)playText:(NSString*)playText withNativeLanguage:(NSString*)languageCode rate:(NSString *)rate volume:(NSString*)volume {
self.rate = rate;
[self setLanguageCode:languageCode];
AVSpeechSynthesisVoice * voice = [AVSpeechSynthesisVoice voiceWithLanguage:languageCode];
AVSpeechUtterance * utterance = [[AVSpeechUtterance alloc] initWithString:playText];
utterance.rate *= [rate floatValue];
utterance.volume = volume?[volume floatValue]:[self.volume floatValue];
self.volume = volume?volume:self.volume;
if (!rate) {
utterance.rate *= 0.7;
}
utterance.voice = voice;
[self.speechSynthesizer speakUtterance:utterance];
}
- (BOOL)stopSpeaking
{
return [self.speechSynthesizer stopSpeakingAtBoundary:AVSpeechBoundaryImmediate];
}
- (BOOL)pauseSpeaking{
return [self.speechSynthesizer pauseSpeakingAtBoundary:AVSpeechBoundaryImmediate];
}
- (BOOL)continueSpeaking
{
return [self.speechSynthesizer continueSpeaking];
}
- (NSString *)playRate
{
if (!self.rate) {
return @"0.7";
}
return self.rate;
}
- (NSString *)currentLanguageCode
{
if (!self.languageCode) {
return @"没有设置源语言";
}
return self.languageCode;
}
@end
iOS开发播放文本的更多相关文章
- IOS开发计算文本尺寸
在IOS开发中例如微博,QQ聊天界面中要显示大量的文字信息,这样需要计算出文字部分的尺寸,才能设计出合适的控件尺寸和位置.下面是IOS 7.0计算文本尺寸的方法.- (CGRect)boundingR ...
- iOS开发——TTS文本发音
iOS的文本转发音,从iOS7开始,iOS系统自带这个功能.能够实现中文.英文的发音.而且实现的起来非常方便.就像我看到有的博主说的三行代码搞定. (在iOS7之前(目前已不适配了),比如iOS6实现 ...
- iOS开发富文本制作 图片和文字/NSMutableParagraphStyle/NSMutableAttributedString
/NSMutableParagraphStyle/NSMutableAttributedString 组合使 NSString * titlestr=@"日产GT-R"; NSMu ...
- iOS 开发富文本之TTTAttributedLabel 在某个特定位置的文字添加跳转,下划线,修改字体大小,颜色
@property(nonatomic , strong) TTTAttributedLabel * ttLabel; @property(nonatomic , strong) NSRange li ...
- iOS开发富文本
NSMutableAttributedString * attributedStr = [[NSMutableAttributedString alloc] initWithString:@" ...
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
--iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制, ...
- IOS开发之简单音频播放器
今天第一次接触IOS开发的UI部分,之前学OC的时候一直在模拟的使用Target-Action回调模式,今天算是真正的用了一次.为了熟悉一下基本控件的使用方法,和UI部分的回调,下面开发了一个特别简易 ...
- 给iOS开发新手送点福利,简述文本属性Attributes的用法
给iOS开发新手送点福利,简述文本属性Attributes的用法 文本属性Attributes 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSF ...
- iOS开发----音频播放、录音、视频播放、拍照、视频录制
随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操 ...
随机推荐
- 关于JAVA中split方法使用竖线异常的问题
split表达式,其实就是一个正则表达式. * ^ | 等符号在正则表达式中属于一种有特殊含义的字符,如果使用此种字符作为分隔符,必须使用转义符即\\加以转义.不然分割的结果就不是你想要的.
- 50道java线程面试题
50道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序 ...
- 剑指offer ------ 刷题总结
面试题3 -- 搜索二维矩阵 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 1. 每行中的整数从左到右是排序的. 2. 每行的第一个数大于上一行的最后一个整数. publi ...
- 关于onCreate(Bundle savedInstanceState, PersistableBundle persistentState)
API 21为Activity增加了一个新的属性,只要将其设置成persistAcrossReboots,activity就有了持久化的能力,另外需要配合一个新的bundle才行,那就是Persist ...
- hadoop bug 笔记
1.sqoop从mysql导入数据到hdfs的时候,总是在本地运行,而没有运行在集群上 sqoop 配置文件的问题 在 /usr/lib/sqoop/conf 目录下新增文件 sqoop-env.s ...
- <hdu - 1600 - 1601> Leftmost Digit && Rightmost Digit 数学方法求取大位数单位数字
1060 - Leftmost Digit 1601 - Rightmost Digit 1060题意很简单,求n的n次方的值的最高位数,我们首先设一个数为a,则可以建立一个等式为n^n = a * ...
- brew install nvm
brew install nvm mkdir ~/.nvm nano ~/.bash_profilectrl+x 退出 source ~/.bash_profile echo $NVM_DIR nvm ...
- Tiny6410之重定位代码到SDRAM
在上一章中,将代码重定位到了SRAM中,但是这样的做法作用不大.正确的做法的是将代码重定位到更大的主存中,即DRAM.Tiny6410的DRAM控制寄存器最多只能支持两个同一类型的芯片.每个芯片最多可 ...
- Objective-C Runtime 运行时之四:Method Swizzling(转载)
理解Method Swizzling是学习runtime机制的一个很好的机会.在此不多做整理,仅翻译由Mattt Thompson发表于nshipster的Method Swizzling一文. Me ...
- ps遇到的问题及笔记
1. ps软件图层面板中不显示缩略图 打开软件后,任意打开一个文件,再打开图层面板(直接按F7也可),点图层面板右上角的小三角后有一个新的面板出现,点下面的"面板选项"弹出一个面板 ...