我正在使用AVAudioRecorder在一个视图控制器中录制音频,然后在另一个视图控制台的桌面上显示录制的音频
var numberOfRecords = 0
var recordingSession:AVAudioSession!
var audioRecorder:AVAudioRecorder!
@IBAction func recordAudio(_ sender: UIButton) {
// Check if we have an active audio recorder
if audioRecorder == nil {
numberOfRecords = numberOfRecords + 1
let filename = getDirectory().appendingPathComponent("\(numberOfRecords).m4a")
let settings = [AVFormatIDKey: Int(kAudioFormatMPEG4AAC), AVSampleRateKey: 12000, AVNumberOfChannelsKey: 1, AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue]
// Start audio recording
do {
audioRecorder = try AVAudioRecorder(url: filename, settings: settings)
print(filename)
audioRecorder.delegate = self
audioRecorder.record()
} catch {
displayAlert(title: "Oops!", message: "Recording Failed")
}
} else {
// Stopping audio recording
audioRecorder.stop()
audioRecorder = nil
UserDefaults.standard.set(numberOfRecords, forKey: "myNumber")
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Record
recordingSession = AVAudioSession.sharedInstance()
if let number:Int = UserDefaults.standard.object(forKey: "myNumber") as? Int {
numberOfRecords = number
}
AVAudioSession.sharedInstance().requestRecordPermission { (hasPermission) in
if hasPermission {
}
}
}
这是在第一个视图控制器中录制音频的代码,这是在第二个视图控制器中播放音频的代码
var audioPlayer:AVAudioPlayer!
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let path = getDirectory().appendingPathComponent("\(indexPath.row + 1).m4a")
do {
audioPlayer = try AVAudioPlayer(contentsOf: path)
audioPlayer.prepareToPlay()
audioPlayer.play()
} catch {
print(error)
}
当我尝试在我的iPhone上播放时,我收到此错误:
Error Domain=NSOSStatusErrorDomain Code=1685348671 "(null)"
我已经有这个问题好几个星期了,仍然没有找到解决方案。我在线尝试了很多东西,比如更改AVSampleRateKey,它保存的文件类型没有任何效果。我真的不知道我做错了什么。我不知道是不是我在一个视图控制器中录制并在另一个视频控制器中播放,但它只播放Xcode模拟器中的音频,而不是我的物理设备。
更多代码到viewdidload:
do {
try recordingSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
try recordingSession.setActive(true)
AVAudioSession.sharedInstance().requestRecordPermission { (hasPermission) in
if hasPermission {
}
}
} catch {
}
我的猜测是你错误处理你的音频会话。这至关重要。您不得保留对此类音频会话的引用;它不是一个东西,而是与媒体服务守护进程通信的管道。要进行录制,您必须在会话中配置录制类别,并且必须激活会话。要播放,请将类别更改为播放类别并激活该会话。