AVSpeechSynthesizer ios 原生语音合成与播放

AVSpeechSynthesizer

1. 现代语言翻译的基础:将所说的单词转录成文本,将文本翻译成目标语言,并为所翻译的文本合成语音。

2. AvspeechSynther 在iOS 7中引入,在MacOS 10.14 Mojave中可用

3.Voiceover支持30多种语言。 有关可用内容的最新列表,请调用avspeechSynthesVoice类方法speechVoices() 默认情况下,AvSpeech合成器将使用基于用户当前语言首选项的语音进行讲话。

4.https://www.jianshu.com/c/f4d8d50984d8  《AVFoundation》专辑 待深入了解

5. 核心的部件就是AVSpeechSynthesizer

6.基础和其他系统框架中的许多API使用ISO 681代码来识别语言。然而,avspeechSynthesVoice采用了指定的bcp 47文档系列的IETF语言标记。如果一个发声串和声音不是同一种语言,那么语音合成就失败了。

7. 并不是所有的语言都预先加载到设备上,在合成语音之前,可能需要在后台下载。


看一下 AVFundtion中 AVFAudo 中的 AVSpeechSynthesis.h

1.首先是枚举

typedefNS_ENUM(NSInteger, AVSpeechBoundary) {

    AVSpeechBoundaryImmediate,

    AVSpeechBoundaryWord

} NS_ENUM_AVAILABLE(10_14, 7_0);

这是一个枚举. 在暂停, 或者停止说话的时候, 停下的方式用这个枚举标示. 包括两种:

AVSpeechBoundaryImmediate: 立即停

AVSpeechBoundaryWord : 说完一个整词再停

2. 语音质量

typedefNS_ENUM(NSInteger, AVSpeechSynthesisVoiceQuality) {

    AVSpeechSynthesisVoiceQualityDefault =1,

    AVSpeechSynthesisVoiceQualityEnhanced

} NS_ENUM_AVAILABLE(10_14, 9_0);

AVSpeechSynthesisVoiceQualityDefault  语音质量默认值

AVSpeechSynthesisVoiceQualityEnhanced 语音质量增强

3. 声明。播放语音时的速率

AVF_EXPORT const float AVSpeechUtteranceMinimumSpeechRate API_AVAILABLE(ios(7.0), watchos(1.0), tvos(7.0), macos(10.14));  

 播放语音时的最小速率

AVF_EXPORT const float AVSpeechUtteranceMaximumSpeechRate API_AVAILABLE(ios(7.0), watchos(1.0), tvos(7.0), macos(10.14));

播放语音时的最大速率

AVF_EXPORT const float AVSpeechUtteranceDefaultSpeechRate API_AVAILABLE(ios(7.0), watchos(1.0), tvos(7.0), macos(10.14));

播放语音时的默认速率

-----------

AVF_EXPORT NSString*const AVSpeechSynthesisVoiceIdentifierAlex API_AVAILABLE(ios(9.0), watchos(2.0), tvos(9.0), macos(10.14));

 用于初始化声音语言,仅仅代表 en-US

-----------

AVF_EXPORTN SString*const AVSpeechSynthesisIPANotationAttribute API_AVAILABLE(ios(10.0), watchos(3.0), tvos(10.0), macos(10.14));

用于包含国际音标(ipa)符号。控制某个词或短语的发音,例如正确的名称。

AVSpeechSynthesizerDelegate

@interface AVSpeechSynthesisVoice :NSObject<NSSecureCoding>


AVSpeechSynthesisVoice 封装了用于在系统上合成语音的语音属性。

+ (NSArray<AVSpeechSynthesisVoice *> *)speechVoices;

可以 通过 NSLog(@"AVSpeechSynthesisVoice所有语言的最新列表 %@",AVSpeechSynthesisVoice.speechVoices);

+ (NSString*)currentLanguageCode;

获取设备当前语言语音码

+ (nullable AVSpeechSynthesisVoice*)voiceWithLanguage:(nullable NSString*)languageCode;

设置语言

+ (nullable AVSpeechSynthesisVoice*)voiceWithIdentifier:(NSString*)identifierAPI_AVAILABLE(ios(9.0), watchos(2.0), tvos(9.0), macos(10.14));

通过标识符检索获取语音,传递无效的标识符将返回nil。如果标识符有效,但语音在设备上不可用(即用户尚未下载),则返回nil。

@interface AVSpeechUtterance : NSObject<NSCopying, NSSecureCoding>

要开始讲话,请指定要讲话的AvSpeechSynthesVoice和字符串,然后根据需要更改速率、音调或音量。

+ (instancetype)speechUtteranceWithString:(NSString*)string;

语言播报 //初始化类方法,需要传一个字符串进去 

+ (instancetype)speechUtteranceWithAttributedString:(NSAttributedString*)stringAPI_AVAILABLE(ios(10.0), watchos(3.0), tvos(10.0), macos(10.14));

语言播报 //初始化类方法,需要传一个 NSAttributedString类型字符串进去 

- (instancetype)initWithString:(NSString*)string;

语言播报 //初始化对象方法,需要一个字符串作为参数

- (instancetype)initWithAttributedString:(NSAttributedString*)stringAPI_AVAILABLE(ios(10.0), watchos(3.0), tvos(10.0), macos(10.14));

语言播报 //初始化对象方法,需要一个 NSAttributedString类型字符串作为参数

@property(nonatomic, retain, nullable) AVSpeechSynthesisVoice *voice;

*****需要用什么语言来朗读,系统提供了很多语言选项,如果有中文,一定要选择中文语言,要不然读不出来。

如果未指定语音,将使用系统的默认值。 AVSpeechSynthesisVoice 语言对象


在语音话语排队之后设置这些值将没有效果。

@property(nonatomic)floatrate;

语速0.0f~1.0f AVSpeechUtteranceMinimumSpeechRate -AVSpeechUtteranceMaximumSpeechRate.之间

@property(nonatomic)floatpitchMultiplier;

声音的音调0.5f~2.0f 默认是1

@property(nonatomic)floatvolume;

音量 0-1 默认是1

@property(nonatomic)NSTimeIntervalpreUtteranceDelay;

播放下下一句话的时候有多长时间的延迟 默认是0.0

@property(nonatomic)NSTimeIntervalpostUtteranceDelay;

开始播放之前需要等待多久 默认是0.0

AvSpeechSyntheter允许使用基本排队机制说出语音。


@property(nonatomic, weak, nullable) id<AVSpeechSynthesizerDelegate> delegate;

代理方法

---------------------属性

@property(nonatomic,readonly,getter=isSpeaking)BOOLspeaking;

是否正在朗读(只读)

@property(nonatomic,readonly,getter=isPaused)BOOL paused;

是否已经暂停(只读)

- (void)speakUtterance:(AVSpeechUtterance*)utterance;

朗读方法 ,如果将已经排队或正在说话的同一个avspeechutrance排队,会引起异常。

- (BOOL)stopSpeakingAtBoundary:(AVSpeechBoundary)boundary;

停止朗读,会清理掉当前正在执行朗读操作的队列

- (BOOL)pauseSpeakingAtBoundary:(AVSpeechBoundary)boundary;

暂停朗读,这里面需要传递一个AVSpeechBoundary类型参数,两种选择,是立即停止还是读完这个单词再停止。

- (BOOL)continueSpeaking;

继续朗读

@property(nonatomic,retain,nullable)NSArray *outputChannelsAPI_AVAILABLE(ios(10.0), watchos(3.0), tvos(10.0), macos(10.14));

指定要用于合成语音的音频通道 默认为nil 。 不太懂

-----------------

代理方法 AVSpeechSynthesizerDelegate

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didStartSpeechUtterance:(AVSpeechUtterance*)utteranceAPI_AVAILABLE(ios(7.0), watchos(1.0), tvos(7.0), macos(10.14));

开始朗读的代理方法

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer didFinishSpeechUtterance:(AVSpeechUtterance*)utteranceAPI_AVAILABLE(ios(7.0), watchos(1.0), tvos(7.0), macos(10.14));

//结束朗读的代理方法

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

暂停朗读的代理方法

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

继续朗读的代理方法

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

取消朗读的代理方法

- (void)speechSynthesizer:(AVSpeechSynthesizer*)synthesizer willSpeakRangeOfSpeechString:(NSRange)characterRange utterance:(AVSpeechUtterance*)utter

将要播放的语音文字代理方法


 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容

  • 文字阅读例子AVSpeechSynthesizer * synthesizer = [[AVSpeechSynth...
    CAICAI0阅读 2,129评论 0 50
  • 一、音频相关的iOS类库 1、音频相关的iOS类库 使用AVAudioSession负责调解APP和iOS系统里面...
    萧修阅读 603评论 0 0
  • 前言 在IOS7之前一般语音识别是靠一些第三方库,iOS7之后,苹果提供了文字转语音的API可以使用。 导入框架 ...
    超_爱编程阅读 5,508评论 5 2
  • 请原谅,请允许我记个随笔,文章结构不讲究,用词造句不讲究,就是随便记点,写点,当下一个真实的自己,当下一个真实的状...
    Maple_郑小波阅读 206评论 0 0
  • 蛙声、蝉鸣声此起彼伏的盛夏夜晚,凉风阵阵袭来,吹得人舒爽轻松,卸下一整天的劳累,仿佛能够闭上眼即刻入睡。月藏星稀,...
    胡少敏阅读 230评论 0 0