如何在userDefauls中保存m4a文件并在表视图ios swift 3中显示它

如何在userDefauls中保存m4a文件并在表视图ios swift 3中显示它,swift,tableview,nsuserdefaults,avaudioplayer,avaudiorecorder,Swift,Tableview,Nsuserdefaults,Avaudioplayer,Avaudiorecorder,我已经开发了一个录音和播放用户的声音,我需要保存在用户默认值和下一个屏幕中,以在列表视图中显示所有录音数据 我的问题是如何保存文件?以后如何呈现数据 var soundRecorder : AVAudioRecorder! var soundPlayer : AVAudioPlayer! var audioFileName = "sound.m4a" let arrayOfRecords = [""] //recording issues let recordSettings = [AVS

我已经开发了一个录音和播放用户的声音,我需要保存在用户默认值和下一个屏幕中,以在列表视图中显示所有录音数据

我的问题是如何保存文件?以后如何呈现数据

var soundRecorder : AVAudioRecorder!
var soundPlayer : AVAudioPlayer!

var audioFileName = "sound.m4a"
let arrayOfRecords = [""]

//recording issues

let recordSettings = [AVSampleRateKey : NSNumber(value: Float(44100.0) as Float),
                      AVFormatIDKey : NSNumber(value: Int32(kAudioFormatMPEG4AAC) as Int32),//change to 850k vs 25Mb at (kAudioFormatAppleLossless)
                          AVNumberOfChannelsKey : NSNumber(value: 1 as Int32),
                          AVEncoderAudioQualityKey : NSNumber(value: Int32(AVAudioQuality.high.rawValue) as Int32)]

override func viewDidLoad() {
    super.viewDidLoad()
    setupRecorder()

    buttonPlay.isHidden = true
    readableText()        

    //audio speaker not mic option

    let session = AVAudioSession.sharedInstance()
    try! session.setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSessionCategoryOptions.defaultToSpeaker)    
}


override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    textViewTest.setContentOffset(CGPoint.zero, animated: false)
}


/////recording
@IBAction func ActionRecord(_ sender: AnyObject) {
    if sender.titleLabel?!.text == "Record"{
        buttonPlay.isHidden = false    
        if isTimerRunning == false{
        }
        sender.setTitle("Stop", for: UIControlState())    

        //stop recording + save
        UserDefaults.standard.set(arrayOfRecords, forKey: "userRecord")
        // defaults.object(forKey: "userRecord")//print   
    }
    else{
        print("record")
        stopTimer()
        soundRecorder.stop()
        sender.setTitle("Record", for: UIControlState())
        buttonPlay.isEnabled = true    
    }    
}

//play record
@IBAction func ActionPlay(_ sender: AnyObject) {
    if sender.titleLabel?!.text == "Play" {                
        butttonRecord.isEnabled = true
        sender.setTitle("Stop", for: UIControlState())    
        preparePlayer()
        soundPlayer.play()    
    }
    else{
        soundPlayer.stop()
        sender.setTitle("Play", for: UIControlState())    
    }    
}

//    override func viewDidAppear(_ animated: Bool) {
//        if let x = UserDefaults.standard.object(forKey: "userRecord") as? String{
//            print("your record has been saved")
//        }
//   }
//HELPERS
func preparePlayer(){        
    do {
        try soundPlayer = AVAudioPlayer(contentsOf: directoryURL()!)
        soundPlayer.delegate = self
        soundPlayer.prepareToPlay()
        soundPlayer.volume = 1.0
    } catch {
        print("Error playing")
    }    
}

func setupRecorder(){        
    let audioSession:AVAudioSession = AVAudioSession.sharedInstance()

    //ask for permission
    if (audioSession.responds(to: #selector(AVAudioSession.requestRecordPermission(_:)))) {
        AVAudioSession.sharedInstance().requestRecordPermission({(granted: Bool)-> Void in
        if granted {
            print("granted")         
            //set category and activate recorder session
            do {            
                try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
                try self.soundRecorder = AVAudioRecorder(url: self.directoryURL()!, settings: self.recordSettings)
                        self.soundRecorder.prepareToRecord()
            } catch {            
                print("Error Recording");        
            }        
        }
    })
}

}

func directoryURL() -> URL? {
    let fileManager = FileManager.default
    let urls = fileManager.urls(for: .documentDirectory, in: .userDomainMask)
    let documentDirectory = urls[0] as URL
    let soundURL = documentDirectory.appendingPathComponent("sound.m4a")
    return soundURL
}

func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) {
    buttonPlay.isEnabled = true
}

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
    butttonRecord.isEnabled = true
    buttonPlay.setTitle("Play", for: UIControlState())
}

}

您应该将音频加密到base_64并存储到userdefault中。我建议您采用将.m4a文件保存到documents目录并保存其路径的方法…@AhmadF最后,知道此类文件的人不应使用UserDefaults。。。很多人不知道应该使用UserDefaults来保存默认设置,比如语言。不是音频/密码/敏感数据。您应该将音频加密到base_64并存储到UserDefaults。我建议您遵循将.m4a文件保存到documents目录并保存其路径的方法…@AhmadF最后,知道此类文件的人不应使用UserDefaults。。。很多人不知道应该使用UserDefaults来保存默认设置,比如语言。不是音频/密码/敏感数据。