ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

高德语音导航SpeechSynthesizer

2020-09-16 10:31:41  阅读:341  来源: 互联网

标签:SpeechSynthesizer 语音 AVAudioSession 高德 aUtterance public func 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)

        }

    }

}

标签:SpeechSynthesizer,语音,AVAudioSession,高德,aUtterance,public,func,speechSynthesizer
来源: https://www.cnblogs.com/supersr/p/13677684.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有