overview.png
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)
繼續(xù):synthesizer.continueSpeaking()
其中調用stopSpeaking會interrupt current speech and clear the queue.
當我們調用這些方法時,在遵循了代理的情況下,會觸發(fā)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提供了朗讀開始,結束,暫停,繼續(xù),取消,以及朗讀進度的回調方法,如果我們需要在朗讀過程中進行一些處理我們可以在func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, willSpeakRangeOfSpeechString characterRange: NSRange, utterance: AVSpeechUtterance)
代理方法中進行操作。
至此,我們就掌握了AVSpeechSynthesizer文本轉聲音這些基本功能了。