美文网首页
记录iOS 语音播报封装

记录iOS 语音播报封装

作者: 舟_e9ce | 来源:发表于2020-09-18 15:05 被阅读0次

    需要实现 AVSpeechSynthesizerDelegate 代理

     // 设置一段文字播报的次数
        var speechNum : Int = 1
        // 记录播报次数
        var speechInit : Int = 0
    
        private var avSpeaker : AVSpeechSynthesizer!
        
        override init() {
            super.init()
            avSpeaker = AVSpeechSynthesizer()
            avSpeaker.delegate = self
            
        }
        
        /// 开始播报
        /// - Parameter content: 播报内容
        func startSpeech(content : String) {
            stopSpeech()
            let tempContent = configSpeechContent(content: content)
            let utterance = configUtterance(speechContent: tempContent)
            avSpeaker.speak(utterance)
            
        }
        
        
        /// 停止播报
        func stopSpeech() {
            avSpeaker.stopSpeaking(at: .immediate)
        }
        
        
        /// 暂停播报
        func pauseSpeech() {
            avSpeaker.pauseSpeaking(at: .immediate)
        }
        
        /// 继续播报
        func continueSpeech() {
            avSpeaker.continueSpeaking()
        }
        
        /// 初始化播报的语音文字
        /// - Parameter speechContent: 播报文字
        /// - Returns: AVSpeechUtterance
        func configUtterance(speechContent : String) -> AVSpeechUtterance {
            let utterance = AVSpeechUtterance(string: speechContent)
            // 设置语速
            utterance.rate = 0.4
            // 设置音高
            utterance.pitchMultiplier = 1
            // 设置音量
            utterance.volume = 1
            // 读一段话前停顿时间
            utterance.preUtteranceDelay = 0
            // 读完一段后的停顿时间
            utterance.postUtteranceDelay = 0
            // 设置声音 是 AVSpeechSynthesisVoice对象
            let voice = AVSpeechSynthesisVoice(language: "zh-CN")
            
            utterance.voice = voice
            return utterance
        }
    
        
        /// 这里做处理主要是不想在读多位数字时读成几百,几十这种类型
        /// 配置播报内容
        /// - Parameter content: 播报数据源
        /// - Returns: stirng
        func configSpeechContent(content : String) -> String{
            var speech = ""
            for charStr in content.enumerated() {
                speech = speech + " " + String(charStr.element)
            }
            return speech
        }
        
        
        
        func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didStart utterance: AVSpeechUtterance) {
            
        }
        
        func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didPause utterance: AVSpeechUtterance) {
            
        }
        
        func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didCancel utterance: AVSpeechUtterance) {
            
        }
        
        func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
            speechInit += 1
            if speechInit == speechNum {
                speechInit = 0
            } else {
                avSpeaker.speak(utterance)
            }
        }
        
        func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didContinue utterance: AVSpeechUtterance) {
            
        }
        
        func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, willSpeakRangeOfSpeechString characterRange: NSRange, utterance: AVSpeechUtterance) {
        
        }
    
    图片.png

    相关文章

      网友评论

          本文标题:记录iOS 语音播报封装

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