Swift随笔-生活工作点滴

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

2019-07-10  本文已影响6人  31313_iOS

语音阅读文本需要使用 三个主要的类 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的请在评论区留言。。。😝😝😝😝

上一篇下一篇

猜你喜欢

热点阅读