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的请在评论区留言。。。😝😝😝😝