gpt4 book ai didi

ios - 录制的音频无法在设备上播放,但不能在 iOS 模拟器上播放

转载 作者:行者123 更新时间:2023-11-28 06:07:08 31 4
gpt4 key购买 nike

我正在使用 AVAudioRecorder 在一个 View Controller 中录制音频,然后在另一个 View Controller 的表格上显示录制的音频

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 {
}
}

}

这是在第一个 View Controller 中录制音频的代码,这是在第二个 View Controller 中播放音频的代码

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,它保存的文件类型,但没有任何效果。我真的不知道我做错了什么。我不知道我是不是在一个 View Controller 中录制并在另一个 View Controller 中播放,但它只在 Xcode 模拟器中播放音频,而不是在我的物理设备中播放音频。

查看didload的更多代码:

do {
try recordingSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
try recordingSession.setActive(true)
AVAudioSession.sharedInstance().requestRecordPermission { (hasPermission) in
if hasPermission {
}
}
} catch {

}

最佳答案

我的猜测是您对 Audio Session 处理不当。这是至关重要的。您不得那样保留对您的 Audio Session 的引用;它不是一个东西,而是一个与媒体服务守护进程对话的管道。对于录制,您必须在 session 上配置一个录制类别,并且您必须激活该 session 。对于播放,将您的类别更改为播放类别并激活那个 session 。

关于ios - 录制的音频无法在设备上播放,但不能在 iOS 模拟器上播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47860297/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com