语音合成
在 iOS 中可以使用 AV Foundation提供的 AVSpeechSynthesizer
实现文本转语音(语音合成)功能,这个类用来播放一个或多个语言内容,这些语音内容都是 AVSpeechUtterance
的类的实例。
AVSpeechSynthesizer
AVSpeechSynthesizer
主要负责从文本话语中生成合成语音并能够监视或控制正在进行的语音的对象。
要说出一些文本,可以创建一个包含文本的 AVSpeechUtterance
实例并将其传递给 AVSpeechSynthesizer
实例,通过 speakUtterance:
进行播放。AVSpeechSynthesizer
会维护一个队列,如果当前没有任务执行就会立刻开始合成,如果当前正在执行合成任务,则会将其添加到队列中,并按照接收到的顺序合成它们。
语音开始后,您可以使用AVSpeechSynthesizer
实例来暂停或停止语音。暂停后,可以从暂停点恢复语音或完全停止语音并删除队列中所有剩余的话语。可以通过 speaking
和 paused
检查当前的状态,通过 id <AVSpeechSynthesizerDelegate> delegate
接收合成过程中的事件节点。
AVSpeechUtterance
AVSpeechUtterance
封装用于语音合成的文本和影响语音的参数的对象:
-
rate
速率 -
pitchMultiplier
音调 -
volume
音量 -
postUtteranceDelay
播放下一句时间隔时间
AVSpeechSynthesisVoice
在语音合成中区分语音的主要因素是语言、区域设置和质量。创建一个AVSpeechSynthesisVoice
实例以选择适合文本和语言的语音,并将其设置为 AVSpeechUtterance
实例上的 voice
属性值。
实现
AVSpeechSynthesizer *speechSynthesizer = [[AVSpeechSynthesizer alloc] init];
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:@"Hello world!"];
//速率
utterance.rate = 0.4f;
//声调
utterance.pitchMultiplier = 0.8f;
//音量
utterance.volume = 1.0f;
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
utterance.postUtteranceDelay = 0.1f;
[speechSynthesizer speakUtterance:utterance];