AVSpeechSynthesizer:文本到语音

2016-03-30  本文已影响1679人  d9541e04136b

原文首发:http://coderzhang.xyz

AV Foundation中提供了一个AVSpeechSynthesizer类来向app中添加朗诵文本的功能.
这个类用来播放一个或者多个语音内容,每条语音内容都是一个AVSpeechUtterance对象.
(快速记忆:一个语音合成器(SpeechSynthesizer)播放需要一段语音内容(SpeechUtterance))

春天到了,让代码为我们读几句春天的诗句.

  1. 定义一个包含诗句的数组,

    self.verses = @[
    @"最是一年春好处,绝胜烟柳满皇都",
    @"陌上花开,可缓缓归矣",
    @"沾衣欲湿杏花雨,吹面不寒杨柳风",
    @"竹外桃花三两枝,春江水暖鸭先知",
    @"几处早莺争暖树,谁家新燕啄春泥",
    @"乱花渐欲迷人眼,浅草才能没马蹄"
    ];

  2. 初始化一个AVSpeechSynthesizer对象,

     self.synthesizer = [[AVSpeechSynthesizer alloc]init];
    
  3. 给每句诗生成一个对应的AVSpeechUtterance对象,并传递给self.synthesizer进行播放,

     for (int i = 0; i < self.verses.count; i++) {
         AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc]initWithString:self.verses[i]];
         utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-CN"];
         utterance.rate = 0.4;
         utterance.pitchMultiplier = 0.8;
         utterance.postUtteranceDelay = 0.1;
         [self.synthesizer speakUtterance:utterance];
    

    }

(1) voice属性指定了要朗诵的语言类型,中文or英文or其他,下文会给出一个支持的语言列表,

(2) rate属性指定播放语音时的速率,最小值和最大值分别是AVSpeechUtteranceMinimumSpeechRate和AVSpeechUtteranceMaximumSpeechRate,

(3) pitchMultiplier属性设置声调,属性值介于0.5(低音调)~2.0(高音调)之间,

(4) postUtteranceDelay告诉synthesizer本句朗读结束后要延迟多少秒再接着朗读下一秒,对应的属性还有preUtteranceDelay

此外,AVSpeechSynthesizerDelegate中还提供了一些监听朗读状态的方法.

swift语言的AVSpeechSynthesizer介绍请戳这里: swift版介绍传送门

支持的语言列表:

上一篇 下一篇

猜你喜欢

热点阅读