美文网首页
iOS开发笔记-99:Swift5 - 录音播放AVAudioP

iOS开发笔记-99:Swift5 - 录音播放AVAudioP

作者: 原味蛋炒饭 | 来源:发表于2020-02-12 11:49 被阅读0次

    AVAudioSession配置,一定要配置,否则有很多莫名其妙的问题
    这个是配置手机硬件的类。

    let audioSession: AVAudioSession = AVAudioSession.sharedInstance()
    //        AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
            do {
                //设置这个,可以修复录音只录一遍的问题
                try audioSession.setCategory(.playAndRecord)
                //设置这个,可以增加录音音量
                try audioSession.overrideOutputAudioPort(.speaker)
                 //设置这个,配置生效
                try audioSession.setActive(true)
            } catch let error {
                debugPrint("Couldn't force audio to speaker: \(error)")
            }
    
    //存储地址
    //        let fruitsPath: String = NSHomeDirectory() + "/Documents/" + "record" + ".wav"
            
            let url: URL = URL.init(string: fruitsPath)!
            
            let configDic: [String: AnyObject] = [
                // 编码格式
                AVFormatIDKey: NSNumber(value: Int32(kAudioFormatLinearPCM)),
                // 采样率
                AVSampleRateKey: NSNumber(value: 11025.0),
                // 通道数
                AVNumberOfChannelsKey: NSNumber(value: 2),
                // 录音质量
                AVEncoderAudioQualityKey: NSNumber(value: Int32(AVAudioQuality.min.rawValue))
            ]
            
            do {
                let recordT = try AVAudioRecorder(url: url, settings: configDic)
                // 准备录音(系统会给我们分配一些资源)
                recordT.prepareToRecord()
                record = recordT
            }catch {
                print(error)
                record = nil
            }
      //开始录音
            record?.record()
    
    //record?.currentTime 是录音时,获取录音时长的。停止录音后,这个参数为0
    let cTime: Int = Int(record?.currentTime ?? 0)
            JJLog("录音时长")
            JJLog(cTime)
            if  cTime > 2 {
                record?.stop()
                print("录音成功")
                successAct(time: cTime)
            } else {
                print("录音太短")
                JJHUDManage.show("录音时间太短")
               
                // 如果想要删除录音文件, 必须先让录音停止
                record?.stop()
     // 删除录音文件
                record?.deleteRecording()
                record = nil
            }
    

    AVAudioPlayer

    func playUrl() {
    
    //        let fruitsPath: String = NSHomeDirectory() + "/Documents/" + "record" + ".wav"
            
            let url: URL = URL.init(string: fruitsPath)!
            do {
                let  playerT =   try AVAudioPlayer.init(contentsOf: url)
                playerT.prepareToPlay()
                player = playerT
            }catch{
                print(error)
                player = nil
            }
            player?.play()
        }
    

    获取录音文件

    let url = URL.init(fileURLWithPath: fruitsPath)
            var voiceStr: String = ""
            
            do {
                let voiceData = try? Data(contentsOf: url)
                
                voiceStr = voiceData?.base64EncodedString() ?? ""
                // 没有错误消息抛出
            } catch {
                voiceStr = ""
                // 有一个错误消息抛出
            }
    

    相关文章

      网友评论

          本文标题:iOS开发笔记-99:Swift5 - 录音播放AVAudioP

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