语音合成框架管理iOS、tvOS和watchOS的语音和语音合成。(要在macOS中执行文本到语音的任务,请使用nsspeech合成器类。)合成语音需要两个主要步骤:
创建一个或多个avspeech hutterance对象,其中包含要说话的文本。可选地,为每个话语配置语音参数(如语音和速率)。
将话语传递给语音合成器对象以产生语音。可选地,使用该对象来控制或响应正在进行的语音。
AVSpeechUtterance
要讲的一大段文字,以及影响其语言的参数。
语音合成对象是语音合成的基本单元。
要合成语音,你必须:
创建一个avspeech hutterance实例,其中包含要说出的文本。(参见创造话语。)
(可选)更改其声音(包括使用的语言)、速率或其他参数。(参见配置话语。)
将语音传递给avspeech合成器实例以开始语音(或者如果合成器已经在说话,则将稍后要说出的语音编入队列)。
您可以选择是否以及如何将正文分割为多个话语。因为话语可以控制语音参数,所以可以将文本分割成需要不同参数的部分。例如,你可以通过增加音高和降低相对于其他话语的语速来强调一个句子,或者你可以通过将每个句子放在一个具有前置或后置延迟的话语中来引入句子之间的停顿。因为语音合成器在它开始或结束讲话时向它的委托发送消息,所以您可以为更长的文本中的每个有意义的单元创建一个讲话,以便在它的讲话进行时得到通知。
创建一个话语
- initWithString:用要讲的文本初始化话语对象。
+ speechUtteranceWithString:创建一个话语对象,其中包含要讲的文本。
- initWithAttributedString:
+ speechUtteranceWithAttributedString:
AVSpeechSynthesisIPANotationAttribute
配置话语的演讲
pitchMultiplier发出声音的基线音高。
postUtteranceDelay语音合成器在发出语音后等待处理下一个排队的语音的时间。
preUtteranceDelay语音合成器在处理语音之前等待的时间。
rate发出声音的速度。
voice说话的声音。
volume发音时使用的音量。
AVSpeechSynthesisVoice
在语音合成中使用的独特的声音。
在语音合成中,声音主要由语言、场所和质量来区分。使用这个类来选择适合要讲的文本语言的声音,或选择显示该语言的特定本地变体的声音(如澳大利亚或南非英语)。
要选择语音用于语音,使用查找语音的方法之一获取avspeech合成器语音实例,然后将其设置为包含要语音的文本的avspeech hutterance实例上的voice属性的值。有关受支持语言的完整列表,请参见VoiceOver支持的语言。
发现声音
+ voiceWithIdentifier:返回指定标识符的语音对象。
+ voiceWithLanguage:返回指定语言和区域设置的voice对象。
+ speechVoices返回所有可用的声音。
AVSpeechSynthesisVoiceIdentifierAlex这个声音物体被确认为Alex。
AVSpeechSynthesizer
一种从文本话语中产生合成语音的对象,并为监控正在进行的语音提供控制。
avspeech合成器类在iOS设备上从文本生成合成语音,并提供控制或监视正在进行的语音的进展的方法。
要说出一定数量的文本,您必须首先创建一个包含文本的avspeech hutterance实例。(您还可以选择使用utterance对象来控制影响其语音的参数,如语音、音调和速率。)然后,将其传递给speakUtterance:语音合成器实例上的方法来说出该语音。
语音合成器维护要发出的话语的队列。如果合成器当前没有说话,调用speakUtterance:立即开始说话(或开始等待通过它的preUtteranceDelay,如果设置了一个)。如果合成器正在说话,则将话语添加到队列中,并按接收它们的顺序说话。
语音开始后,您可以使用合成器对象来暂停或停止语音。讲话停顿后,可以从中断的地方继续下去;完全停止语音,从合成器队列中删除任何尚未发出的语音。
您可以通过检查语音合成器的说话和暂停属性,或通过设置委托来监视语音合成器。AVSpeechSynthesizerDelegate协议中的消息是作为语音合成过程中发生的重要事件发送的。
本文如果对你有帮助,请点赞收藏《iOS——转换文本到语音》,同时在此感谢原作者。