在桌面视图中保存和显示录制的语音笔记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")
}
答
您只能保存一个视频的原因是您只指定了一个文件名。如果您想保留多个视频,则必须使用不同的文件名。您可以要求用户输入视频文件名,然后存储它们。您可以检查是否存在同名的视频in this way。
您必须将所有视频文件存储到文档文件夹中,以便当用户关闭并重新打开应用程序时,视频文件仍然存在。一系列视频存储在手机内存中,当应用程序关闭时,您将失去一切。
将所有视频文件存储在文档文件夹中后,启动视频列表视图控制器后,可以从use this method获取文档文件夹中的视频名称列表,然后在表格视图中显示该名称。
一旦你保存了你的录音,你必须打包并通过UITableView的委托和数据源方法将它插入到你的表格视图中。我想知道如何保存录音先写入该方法,然后如果您在创建数据模型或将项目插入UITableView时遇到问题,则只需提出一个新问题。看看这篇文章保存录音:https://*.com/questions/39433639/how-to-save-recorded-audio-ios –
@buttler_baby谢谢你的回应,这个链接帮了我很多。但一旦数据保存,我知道如何在tableview中显示数据。只是不知道如何实际保存多个录音。有什么建议么? –
更改'soundFileUrl'名称,您将创建一个新的音频文件。例如sound1.caf,sound2.caf,sound3.caf – zsteed