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

最近在用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 做一个简单的录音器封装类)