在桌面视图中保存和显示录制的语音笔记Swift 3

问题描述:

我是Swift的新手,所以任何帮助都会很乐意。我创建这个项目来记录,保存记录的数据并在表格视图中显示数据。现在我只能录制和播放当前的录音。如果我再次按录音,则先前录制的音频将被删除。但我想永久保存录制的音频并以表格视图显示。这是我到目前为止。提前致谢!在桌面视图中保存和显示录制的语音笔记Swift 3

import UIKit 
import AVFoundation 

class ViewController: UIViewController, AVAudioPlayerDelegate, 
AVAudioRecorderDelegate { 


    var audioPlayer: AVAudioPlayer? 
    var audioRecorder: AVAudioRecorder? 

    @IBOutlet weak var recordAudio: UIButton! 
    @IBOutlet weak var stopAudio: UIButton! 
    @IBOutlet weak var playAudio: UIButton! 

    var arrayData: [FileManager] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

    playAudio.isEnabled = false 
    stopAudio.isEnabled = false 

    // Creating File Manager 

     let fileMgr = FileManager.default 

     let dirPath = fileMgr.urls(for: .documentDirectory, in: .userDomainMask) 
     let soundFileUrl = dirPath[0].appendingPathComponent("sound.caf") 

     let recordSettings = [AVEncoderAudioQualityKey: AVAudioQuality.min.rawValue, 
           AVEncoderBitRateKey: 16, 
           AVNumberOfChannelsKey: 2, 
           AVSampleRateKey: 44100.0 ] as [String:Any] 

     let audioSession = AVAudioSession.sharedInstance() 

     do { 
       try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord) 

     } catch { 

        print(error.localizedDescription) 

     } 

     do { 
       try audioRecorder = AVAudioRecorder(url: soundFileUrl, settings: recordSettings as [String : Any]) 

     audioRecorder?.prepareToRecord() 

     } catch { 

      print(error.localizedDescription) 
     } 
} 

    @IBAction func recordButton(_ sender: Any) { 

     if audioRecorder?.isRecording == false { 

     playAudio.isEnabled = false 
     stopAudio.isEnabled = true 
     audioRecorder?.record() 
    } 

    } 

    @IBAction func stopButton(_ sender: Any) { 

     stopAudio.isEnabled = false 
     playAudio.isEnabled = true 
     recordAudio.isEnabled = true 

     if audioRecorder?.isRecording == true{ 

      audioRecorder?.stop() 

     } else { 

       audioPlayer?.stop() 

     } 

} 

@IBAction func playButton(_ sender: Any) { 

    if audioRecorder?.isRecording == false{ 

     stopAudio.isEnabled = true 
     recordAudio.isEnabled = true 

     do { 
       try audioPlayer = AVAudioPlayer(contentsOf: (audioRecorder?.url)!) 

      audioPlayer!.delegate = self 
      audioPlayer!.prepareToPlay() 
      audioPlayer!.play() 

     } catch { 

       print(error.localizedDescription) 

     } 
    } 
} 

func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { 
    recordAudio.isEnabled = true 
    stopAudio.isEnabled = false 
} 

func audioPlayerDecodeErrorDidOccur(_ player: AVAudioPlayer, error: Error?) { 
    print("Audio Player Error") 
} 

func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) { 

} 

func audioRecorderEncodeErrorDidOccur(_ recorder: AVAudioRecorder, error: Error?) { 
     print("Audio Recorder Error") 
} 
+0

一旦你保存了你的录音,你必须打包并通过UITableView的委托和数据源方法将它插入到你的表格视图中。我想知道如何保存录音先写入该方法,然后如果您在创建数据模型或将项目插入UITableView时遇到问题,则只需提出一个新问题。看看这篇文章保存录音:https://*.com/questions/39433639/how-to-save-recorded-audio-ios –

+0

@buttler_baby谢谢你的回应,这个链接帮了我很多。但一旦数据保存,我知道如何在tableview中显示数据。只是不知道如何实际保存多个录音。有什么建议么? –

+0

更改'soundFileUrl'名称,您将创建一个新的音频文件。例如sound1.caf,sound2.caf,sound3.caf – zsteed

您只能保存一个视频的原因是您只指定了一个文件名。如果您想保留多个视频,则必须使用不同的文件名。您可以要求用户输入视频文件名,然后存储它们。您可以检查是否存在同名的视频in this way

您必须将所有视频文件存储到文档文件夹中,以便当用户关闭并重新打开应用程序时,视频文件仍然存在。一系列视频存储在手机内存中,当应用程序关闭时,您将失去一切。

将所有视频文件存储在文档文件夹中后,启动视频列表视图控制器后,可以从use this method获取文档文件夹中的视频名称列表,然后在表格视图中显示该名称。