使用swift 做一个简单的录音器封装类

作者: 嘿晴天 | 来源:发表于2016-03-25 23:23 被阅读589次

    最近在用swift 做一个录音的项目,中间学习了一些语法 , 现在封装了录音类 ,和大家分享学习一下。
    录音封装类主要分为4个部分,录音,暂停,播放,保存,
    一(知识点梗概)首先大致说下录音需要的一些知识点和框架
    这里主要用到了avfoundation 这个框架,还有这里不得不提到一个就是AVAudioSession
    你必须通过AVAudioSession.sharedInstance() 获得音频会话的实例,然后音频会话进行设置

       do  {
                try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
                try session.setActive(true);
            }catch
            {
                print("session 设置失败")
            }
    

    设置相应的session 模式就各种做相应的操作这里主要用到了两种
    AVAudioSessionCategoryPlayAndRecord 这种用于录音
    AVAudioSessionCategoryPlayback 此种可以适用于播放音乐

    二 录音封装类大概思路
    1 录音的时候将会保存在一个固定的地址,每次录音就覆盖这个文件,防止生成多余的垃圾文件, 保存的时候将当前录音另存到,另一个录音的路径下,并且为了防止文件命名重复,使用当前时间给文件命名,并且使用一个userdefault 去保存相关的录音信息, 路径,大小,和时间

    2 关键代码
    这里比较麻烦的也就是,保存录音这个环节,大体是要将要保存的录音 另存到 audio 的目录下,然后将录音文件相关信息,保存到userdefault,

    func saveRecord(){
            let docDir: AnyObject = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
                .UserDomainMask, true)[0]
            //组合录音文件路径
            //
            let date : NSDate = NSDate()
            let timeInterval =  date.timeIntervalSince1970*1000
            let timeStr = String(format:"%f",timeInterval)
            let saveAacPath = (docDir as! String) + "/audio/" + timeStr + ".aac"
            //
            let fileManager = NSFileManager.defaultManager()
            //创建另存为路径
            let isDirExist = fileManager.fileExistsAtPath((docDir as! String) + "/audio")
            if !isDirExist{
                do
                {
                    try fileManager.createDirectoryAtPath((docDir as! String) + "/audio", withIntermediateDirectories: true, attributes: nil)
                }
                catch
                {
                    
                }
            }
            
            if fileManager.fileExistsAtPath(aacPath!)
            {
                
                do
                {
                    try fileManager.copyItemAtPath(aacPath!, toPath: saveAacPath)
                    let userDefault:NSUserDefaults = NSUserDefaults.standardUserDefaults()
                    var audioDict = [String:String]()
                    var arr = [[String :String]]()
                  
                    if let a = userDefault.objectForKey("audio")
                    {
                        arr = a as! [[String : String]]
                    }
                    do{
                        let dict = try fileManager.attributesOfItemAtPath(saveAacPath)
                        let fileSize = dict["NSFileSize"] as! CGFloat
                        audioDict = ["path" : saveAacPath,"second":String(seconds/10),"size":String(format: "%.2f",fileSize/(1024.0*1024.0)),"time":getTodayTime()]
                    }
                    catch
                    {
                        audioDict = ["path" : saveAacPath,"second":String(seconds/10),"size":"0","time":getTodayTime()]
                        
                    }
                    
                    arr += [audioDict]
                    print("arr is %@",arr)
                    userDefault.setObject(arr, forKey: "audio")
                    userDefault.synchronize()
                    
                }
                catch
                {
                    print("复制失败")
                }
                
            }
        }
    
    

    https://github.com/heysunnyboy/Recorder.git

    简单的demo 上传至以上链接,demo需要 先录音 然后暂停录音 ,才可以播放

    相关文章

      网友评论

        本文标题:使用swift 做一个简单的录音器封装类

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