Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
录制的音频无法在设备上播放,但无法在iOS模拟器上播放_Ios_Swift_Xcode_Audio_Avaudioplayer - Fatal编程技术网

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

录制的音频无法在设备上播放,但无法在iOS模拟器上播放,ios,swift,xcode,audio,avaudioplayer,Ios,Swift,Xcode,Audio,Avaudioplayer,我正在使用AVAudioRecorder在一个视图控制器中录制音频,然后在另一个视图控制器的桌子上显示录制的音频 var numberOfRecords = 0 var recordingSession:AVAudioSession! var audioRecorder:AVAudioRecorder! @IBAction func recordAudio(_ sender: UIButton) { // Check if we have an active audio recorder i

我正在使用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模拟器中播放音频,而不是在我的物理设备中播放

要加载的更多代码:

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

}

我猜你是在错误地处理你的音频会话。这是至关重要的。您不能像那样保留对音频会话的引用;它不是一个东西,而是一个与媒体服务守护进程对话的管道。对于录制,必须在会话上配置录制类别,并且必须激活会话。对于播放,请将您的类别更改为播放类别并激活该会话。

是!!!这就成功了!非常感谢你,你不知道这对我有多大帮助!lolSo我在viewDidLoad中加入了更多的代码,从而使录音正常工作。我在底部的原始问题中添加了代码。现在可以录制了,但应用程序中的其他声音非常安静。记住我说的后半部分。录制完成后,停用音频会话,将其类别更改为播放类别,然后再次激活。现在回放。