高德语音导航SpeechSynthesizer
SpeechSynthesizer.swift -- >类名
import Foundation ->> 依赖库头文件
import AVFoundation ->> 依赖库头文件
final class SpeechSynthesizer: NSObject, AVSpeechSynthesizerDelegate {
public static let Shared = SpeechSynthesizer()
private var speechSynthesizer: AVSpeechSynthesizer!
private override init(){
super.init()
buildSpeechSynthesizer()
}
public func speak(_ aString: String) {
let aUtterance = AVSpeechUtterance(string: aString)
aUtterance.voice = AVSpeechSynthesisVoice(language: "zh-CN")
//iOS语音合成在iOS8及以下版本系统上语速异常
let sysVer = (UIDevice.current.systemVersion as NSString).doubleValue
aUtterance.rate = 0.53;
if sysVer < 8.0 {
aUtterance.rate = 0.25//iOS7设置为0.25
}
else if sysVer < 9.0 {
aUtterance.rate = 0.15//iOS8设置为0.15
}
if speechSynthesizer.isSpeaking {
speechSynthesizer.stopSpeaking(at: .word)
}
speechSynthesizer.speak(aUtterance)
}
public func isSpeaking() -> Bool {
return speechSynthesizer.isSpeaking
}
public func stopSpeak() {
speechSynthesizer.stopSpeaking(at: .immediate)
}
private func buildSpeechSynthesizer() {
do {
// try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
} catch {
print(error.localizedDescription)
}
speechSynthesizer = AVSpeechSynthesizer()
speechSynthesizer.delegate = self
}
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
do {
try AVAudioSession.sharedInstance().setActive(false)
} catch {
print(error.localizedDescription)
}
}
}