【发布时间】:2017-06-21 21:06:24
【问题描述】:
我是 Swift 的新手,因此我们将不胜感激。我正在创建这个项目来记录、保存记录的数据并在表格视图中显示数据。现在我只能录制和播放当前的录音。如果我再次按下录制,之前录制的音频将被删除。但我想永久保存录制的音频并显示在表格视图中。这是我到目前为止得到的。提前致谢!
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")
}
【问题讨论】:
-
保存录制文件后,您必须将其打包并通过 UITableView 的委托和数据源方法将其插入到表格视图中。我想说弄清楚如何保存记录首先编写该方法,然后如果您在创建数据模型或将项目插入 UITableView 时遇到问题,那么只需提出一个新问题。查看此帖子以保存录音:stackoverflow.com/questions/39433639/…
-
@buttler_baby 感谢您的回复,该链接对我帮助很大。但是一旦数据被保存,我就知道如何在 tableview 中显示数据。只是不知道如何实际保存多个录音。有什么建议吗?
-
更改
soundFileUrl名称,您将创建一个新的音频文件。例如 sound1.caf、sound2.caf、sound3.caf -
@IamWayne 您将不断覆盖您保存的同一个文件,因为它一直以相同的名称保存。所以我建议你这样做:让 audioRecording = NSUUID().UUIDString + ".m4a" 这样你总能得到一个唯一的文件名。
-
@zsteed 感谢您的回复,但是如何为每个录制的音频创建不同的文件名?如果我可以创建一个数组来保存记录的文件会更好吗?
标签: ios iphone swift uitableview swift3