AudioKit: AKNodeRecorder случайным образом останавливает микрофон - PullRequest
2 голосов
/ 26 марта 2020

У меня странный случай - я использую AKRecorder для записи коротких сегментов с AKMicrophone. Однако случайно, время от времени, микрофон замолкает. Иногда это происходит довольно быстро, иногда это занимает несколько минут.

Я сократил код до минимума, чтобы повторить эту проблему. По сути, я делаю следующее:

  1. Передача экземпляра AKMicrophone в экземпляр AKBooster.
  2. Использование экземпляра AKBooster для создания экземпляра AKNodeRecorder и AKMixer.
  3. Передача AKMixer на выход AudioKit.
  4. Начало записи AKRecorder.
  5. Запуск таймера каждые 2 секунды, который сбрасывает AKNodeRecorder и попросить его начать запись снова.

Вот код:

    import UIKit
    import AudioKit
    import AudioKitUI

    class TempViewController: UIViewController {
        var recorder: AKNodeRecorder!
        var micBooster: AKBooster!
        var mainMixer: AKMixer!
        var timer: Timer?

        let mic = AKMicrophone()

        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)


            do {
                try AKSettings.setSession(category: .playAndRecord, with: .allowBluetoothA2DP)
            } catch {
                AKLog("Could not set session category.")
            }

            AKSettings.defaultToSpeaker = true
            micBooster = AKBooster(mic)

            do {
                recorder = try AKNodeRecorder(node: micBooster)
            } catch {
                AKLog("Couldn't create Recorder")
            }

            mainMixer = AKMixer(micBooster)

            AudioKit.output = mainMixer
            do {
                try AudioKit.start()
            } catch {
                AKLog("AudioKit did not start!")
            }
        }

        override func viewDidLoad() {
            super.viewDidLoad()
            self.timer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(repeatRecorder), userInfo: nil, repeats: true)
            do {
                try recorder.record()
            } catch { AKLog("Error on first record")}
        }

        @objc func repeatRecorder() {
            do {
                try self.recorder.reset()
                try self.recorder.record()
            } catch { AKLog("Errored recording.") }
        }
    }

Я был бы очень признателен за помощь, если у кого-либо есть идеи:

  1. как не дать микрофону замолчать.
  2. как определить, когда mi c замолчал, и снова его разбудить.

Если вам нужен проект github, который иллюстрирует проблему, вот он: https://github.com/craiggrummitt/AudioKitBug

Чтобы добавить AudioKit, вам нужно вызвать 'pod update'.

...