Сбой приложения в AVAudioEngine при установке крана на узле ввода для записи - PullRequest
0 голосов
/ 05 февраля 2020

Я использую AVAudioInputNode для записи звука с микрофона. Всякий раз, когда Tap устанавливается на узел ввода, я получаю следующее cra sh:

*** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'required condition is false: format.sampleRate == hwFormat.sampleRate'

Вот мой код для установки крана на микрофон:

private func startRecording() {
    fileName = "Session_" + Date().toStringDescription()
    audioPath = getAudioFilePath(fileName: fileName + fileExtension)
    do {
        audioFile = try AVAudioFile(forWriting: audioPath, settings: audio_Setting)
        print(audio_Setting)
    } catch let error {
        print("error: ", error.localizedDescription)
        showError(error: error)
    }
    if(!micTapped) {
        microphone_Node.installTap(onBus: .zero, bufferSize: bufferSize, format: inputFormat) { [weak self] (buffer, when) in
            print("Tap installed")
            do {
                try self?.audioFile?.write(from: buffer)
            } catch let error {
                print(error.localizedDescription)
            }
            if self?.micTapped == false {
                self?.micTapped = true
            }
        }
    }
    startEngine()
}

А вот мой установка словаря для создания аудиофайла для записи из буфера:

    lazy var audio_Setting: AudioSettings = {
    return [AVFormatIDKey: NSNumber(value: kAudioFormatMPEG4AAC_HE),
            AVSampleRateKey: NSNumber(value: inputFormat.sampleRate), // 16000, 32000, 44100, or 48000, av_Session.sampleRate
            AVNumberOfChannelsKey: NSNumber(value: 1),
            AVEncoderAudioQualityKey:
            NSNumber(value: AVAudioQuality.high.rawValue)]
}()

Вот значение inputFormat:

 private lazy var inputFormat: AVAudioFormat = {
    return microphone_Node.inputFormat(forBus: .zero)
}()

Я также пытаюсь решить эту проблему, изменив inputFormat(forBus: .zero) на outputFormat(forBus: .zero), следуя этому ответу , но не получил разрешения. Пожалуйста, помогите мне выйти из этой проблемы.

Примечание : Если я открываю экран рекордера только в моем приложении, он никогда не падает, но всякий раз, когда я открываю Tuner Fork сначала включите ViewController и вернитесь к Recorder View Controller, он всегда вылетает с этой проблемой.

Предварительный просмотр приложения Image

...