美文网首页Swift随笔-生活工作点滴
SWift5.0-调用系统API语音阅读文本

SWift5.0-调用系统API语音阅读文本

作者: 31313_iOS | 来源:发表于2019-07-10 18:38 被阅读6次

    语音阅读文本需要使用 三个主要的类 AVSpeechSynthesizer、AVSpeechUtterance、AVSpeechSynthesisVoice,导入头文件 import AVFoundation

    一、 AVSpeechSynthesizer

    AVSpeechSynthesizer允许使用基本排队机制讲话语音。 创建AVSpeechSynthesizer的实例以使用AVSpeechUtterance对象开始生成合成语音。

    private lazy var speechSynth: AVSpeechSynthesizer = {
            let  speechSynth = AVSpeechSynthesizer()
            speechSynth.delegate = self
            return speechSynth
        }()
    
     ///结束并重新开始
        func lg_finishedRespeech() {
            speechSynth.stopSpeaking(at: .word)//停止播放,调用这个方法,再开始时会从头开始重新朗读
        }
        
        ///暂停
        func lg_pauseSpeech() {
            speechSynth.pauseSpeaking(at: .word)//停止播放,调用这个方法,再开始时会从头开始重新朗读
        }
        
    

    AVSpeechSynthesizerDelegate方法

     func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didStart utterance: AVSpeechUtterance) {
            print("---开始播放")
            lg_textSpeechCallBack(type: .startSpeech)
        }
        
        func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
            print("---结束播放");
            lg_textSpeechCallBack(type: .finishSpeech)
        }
        
        
        func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didPause utterance: AVSpeechUtterance) {
            print("---暂停播放");
            lg_textSpeechCallBack(type: .pauseSpeech)
        }
        
        
        func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didContinue utterance: AVSpeechUtterance) {
            print("---继续播放");
            lg_textSpeechCallBack(type: .continueSpeech)
        }
        
        func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didCancel utterance: AVSpeechUtterance) {
            print("---取消播放")
            lg_textSpeechCallBack(type: .cancelSpeech)
        }
        
        
        func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, willSpeakRangeOfSpeechString characterRange: NSRange, utterance: AVSpeechUtterance) {
        }
        
    

    二、 AVSpeechUtterance

    AVSpeechUtterance是说一个字符串或暂停合成器的原子。指定AVSpeechSynthesisVoice和要说出的字符串。可以根据需要随意更改速率,音高或音量等。

    let utterance = AVSpeechUtterance(string: text)
    utterance.rate = 0.4  // 设置语速,范围0-1,注意0最慢,1最快;
    let speechVoice = AVSpeechSynthesisVoice(language:lanSimpleStr)
    utterance.voice = speechVoice //设置语速
    utterance.volume = 0.9;//设置音量
    utterance.pitchMultiplier = 1.0 // 声音的音调 0.5f~2.0f
    utterance.preUtteranceDelay = 0.0 //播放下下一句话的时候有多长时间的延迟 Default is 0.0
    utterance.postUtteranceDelay = 0.0 //开始播放之前需要等待多久 Default is 0.0
     speechSynth.speak(utterance)
    

    三、 AVSpeechSynthesisVoice

    AVSpeechSynthesisVoice封装了用于在系统上合成语音的语音属性。对于已知的语音标识符, 通过指定要在其中说出文本的语言代码或使用voiceWithIdentifier来检索语音 。

    ///lanSimpleStr指语音标识符 如  zh-CN, zh-HK, zh-TW等
    let speechVoice = AVSpeechSynthesisVoice(language:lanSimpleStr)
    
    

    四、 系统支持的语音

    Arabic (ar-SA) --- 阿拉伯语(沙特阿拉伯)
    Chinese (zh-CN, zh-HK, zh-TW) --- 中文 /中文(香港特区)/ 中文(台湾)
         Czech (cs-CZ)  -- 捷克语
         Danish (da-DK) -- 丹麦语
         Dutch (nl-BE, nl-NL) -- 荷兰语(标准)/ 荷兰语(比利时)
         English (en-AU (英语(澳大利亚)), en-GB(/英语(英国)), en-IE(英国(爱尔兰)), en-US(英语(美国)), en-ZA(英语(南非))
         Finnish (fi-FI  (芬兰语))
         French (fr-CA (法语(加拿大)), fr-FR (法语(标准)))
         German (de-DE - (德语(标准)))
         Greek (el-GR (希腊))
         Hebrew (he-IL (希伯来语))
         Hindi (hi-IN (印地文))
         Hungarian (hu-HU (匈牙利语))
         Indonesian (id-ID (印度尼西亚语))
         Italian (it-IT (意大利语(标准)))
         Japanese (ja-JP (日语))
         Korean (ko-KR (韩语))
         Norwegian (no-NO (挪威文))
         Polish (pl-PL (波兰语))
         Portuguese (pt-BR (葡萄牙语(巴西)), pt-PT (葡萄牙语(葡萄牙)))
         Romanian (ro-RO (罗马尼亚语))
         Russian (ru-RU (俄语))
         Slovak (sk-SK (斯洛伐克语))
         Spanish (es-ES (西班牙语(西班牙)), es-MX(西班牙语(墨西哥)))
         Swedish (sv-SE (瑞典语))
         Thai (th-TH (泰国语))
         Turkish (tr-TR (土耳其语))
    

    😝😝😝😝 语音阅读的分享就到这里了,如果有需要demo的请在评论区留言。。。😝😝😝😝

    相关文章

      网友评论

        本文标题:SWift5.0-调用系统API语音阅读文本

        本文链接:https://www.haomeiwen.com/subject/iqnhkctx.html