AVSpeechSynthesizer
可以在iOS设备上讲文本内容转化为声音,并提供了一系列方法可以控制正在播放的语音内容。先看代码:
//初始化一个合成器
let sythesizer = AVSpeechSynthesizer()
//初始化需要转换的文本
let utterrance = AVSpeechUtterance.init(string: "这是一段内容,请不要静音,因为等会你会听到这段文字的声音。");
//设置朗读速率,这里设为默认的
utterrance.rate = AVSpeechUtteranceDefaultSpeechRate
//设置朗读语言
utterrance.voice = AVSpeechSynthesisVoice.init(language: "zh-cn")
//设置朗读的音量
utterrance.volume = 0.8
//开始朗读
sythesizer.speak(utterrance);
编译以上代码,我们就会听到了。(是不是和Siri女声一样的)
如果在朗读过程中我要暂停或者取消需要怎么做,AVSpeechSynthesizer提供了这些方法。
暂停:synthesizer.pauseSpeaking(at boundary: AVSpeechBoundary)
取消:synthesizer.stopSpeaking(at boundary: AVSpeechBoundary)
继续:synthesizer.continueSpeaking()
其中调用stopSpeaking会interrupt current speech and clear the queue.
当我们调用这些方法时,在遵循了代理的情况下,会触发AVSpeechSynthesizerDelegate中的方法:
@available(iOS 7.0, *)
optional public func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didStart utterance: AVSpeechUtterance)
@available(iOS 7.0, *)
optional public func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance)
@available(iOS 7.0, *)
optional public func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didPause utterance: AVSpeechUtterance)
@available(iOS 7.0, *)
optional public func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didContinue utterance: AVSpeechUtterance)
@available(iOS 7.0, *)
optional public func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didCancel utterance: AVSpeechUtterance)
@available(iOS 7.0, *)
optional public func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, willSpeakRangeOfSpeechString characterRange: NSRange, utterance: AVSpeechUtterance)
AVSpeechSynthesizerDelegate提供了朗读开始,结束,暂停,继续,取消,以及朗读进度的回调方法,如果我们需要在朗读过程中进行一些处理我们可以在func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, willSpeakRangeOfSpeechString characterRange: NSRange, utterance: AVSpeechUtterance)
代理方法中进行操作。
至此,我们就掌握了AVSpeechSynthesizer文本转声音这些基本功能了。