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基础练习 4
import java.util.Scanner; public class Forth { public static void main(String[] args){ /*请输入星期几的第一个字 ...
- oc内容5大区
1.堆区(malloc):不需要手动管理内存,自动管理 2.栈区(stack):需要手动管理内存 3.静态区 4.常量区 5.方法区 load类方法:把类加载进内存的时候调用,只会调用一次 initi ...
- ng1 http 读取json数据
在前端开发过程中,有时后端还没开发出接口,需要经常自己构造获取本地mock数据. AngularJS XMLHttpRequest $http 是 AngularJS 中的一个核心服务,用于读取远程服 ...
- angular中的cookie读写
AngularJS中对cookie的操作封装了一个单独的模块,模块名为ngCookies,若想使用需在页面中先引入angular-cookies.js: <script src="js ...
- line-height 行高
line-height 行高指一行文字的高度,具体来说是指两行文子间基线间的距离 line-height 与 font-size 的计算值之差(行距)分为两半,分别加到一个文本行内容的顶部和 ...
- Java 多线程 笔记 转自http://www.cnblogs.com/lwbqqyumidi/p/3804883.html
多线程作为Java中很重要的一个知识点, 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程各重要知识点.掌握了上图中 ...
- on事件绑定阻止冒泡的问题
当使用on进行事件绑定时当要给document绑定click,而子元素要禁止冒泡,那么子元素里面的子元素的click事件就会无效了, 下面无效版: $('#queue').on('click', '. ...
- The property System
The property System 和其它编译器厂商一样, Qt 也提供了复杂的属性机制, 但是作为一个编译器无关.平台无关的库,Qt没有那些不被标准编译器支持的特征, 如 BCB的 __prop ...
- 从excel读数据到informix的Found a quote for which there is no matching quote错误
我从excel读取数据,然后存储到Informix数据库里.偶尔会发现出现Found a quote for which there is no matching quote这个错误.调试后发现,是因 ...
- windows自带的线程池
#define _CRT_SECURE_NO_WARNINGS #include "iostream" #include "windows.h" using n ...