【问题标题】:Keep recording audio while navigating to another screen在导航到另一个屏幕时继续录制音频
【发布时间】:2021-02-03 20:14:24
【问题描述】:

我想在导航到另一个屏幕并返回时继续我在一个屏幕中开始的AVAudioSession(使用AVAudioRecorder 录制)。这可能吗?
因为我总是得到一个较短的文件。

会话开始/录制开始

  func startRecording() {
    let session = AVAudioSession.sharedInstance()
    do {
        try session.setCategory(AVAudioSession.Category.playAndRecord, mode: .default)
        try session.setActive(true)
        let settings = [AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
                        AVSampleRateKey: 44100,
                        AVNumberOfChannelsKey: 2,
                        AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue]
        audioRecorder = try AVAudioRecorder(url: getAudioFileUrl(), settings: settings)
        audioRecorder?.delegate = self
        audioRecorder?.record()
        isRecording = true
    }
    catch let error {
        print(error)
    }
}

录音机(录音机是其中的一部分:

class RecorderManager: NSObject {

static let shared = RecorderManager()

private var recordTimer : Timer?
private var recordTimerValue: Double?
private var audioRecorder = AudioRecordedManager()
private var videoRecorder = ScreenRecorderManager()

这就是记录的开始。在屏幕 A 中:

 func startRecord(view: UIView){
    self.recordTimerValue = Double(0)
    
    if (self.recordTimer != nil){
        self.recordTimer?.invalidate()
        self.recordTimer = nil
    }
    
    self.showCounterAnimation(view: view, doneCallback: {
        
        self.videoRecorder.recordingSetup()
        self.audioRecorder.startRecording()
        self.videoRecorder.startRecording {

            if (self.recordTimer == nil){
                self.recordTimer = Timer.scheduledTimer(timeInterval: 1.0,
                                                        target: self,
                                                        selector: #selector(self.onTimerFires),
                                                        userInfo: nil,
                                                        repeats: true)
            }
        }
    })
    
}

这是到屏幕 B 的过渡:

   if let item = self.videoItem{
        if let listItem = self.videoListItem{
            if let videoLOcalUrl = self.videoLocalUrl{
                let vc:SplitViewController  = SplitViewController()
                vc.currentTimeValue = currentTimeValue
                playVideoViewModel.pause()
                vc.videoModel = SplitViewModel(videoItem: item, videoListItem: listItem, videoLocalUrl: videoLOcalUrl)
                vc.modalPresentationStyle = .fullScreen
                self.present(vc, animated: true, completion: nil)

【问题讨论】:

    标签: ios swift audio avfoundation avaudiosession


    【解决方案1】:

    当然可以。与其在视图控制器中编写录音代码,不如创建一个录音类。使其成为单例。从您的视图控制器触发录音,并在您移动到不同的屏幕时让它运行。

    【讨论】:

    • 我实际上是这样做的......仍然是,由于某种原因,录音停止
    • 您在第 173 行有一个错误。我可以看出这是因为我有 ESP,但您可能需要编辑您的问题以包含您当前的代码,以便其他人可以看到发生了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2022-01-22
    • 2020-03-13
    • 2019-10-20
    • 1970-01-01
    相关资源
    最近更新 更多