高德语音导航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)

        }

    }

}

原文地址:https://www.cnblogs.com/supersr/p/13677684.html