Как получить аппаратный sampleRate с устройства iOS? - PullRequest
0 голосов
/ 06 июня 2018

В моем приложении я использую AVAudioEngine для распознавания речи, но мне трудно понять, как правильно настроить inputNode.

Я использовал это руководство в качестве примера для своего кода: https://www.raywenderlich.com/155752/speech-recognition-tutorial-ios

Эта часть кода вызывает у меня головную боль:

let node = audioEngine.inputNode
let recordingFormat = node.outputFormat(forBus: 0)

node.installTap(onBus: 0, bufferSize: 1024,
                format: recordingFormat) { [unowned self]
  (buffer, _) in
  self.request.append(buffer)
}

audioEngine.prepare()
try audioEngine.start()

В основном мое приложение вылетает с этой ошибкой:

AVAEInternal.h:70:_AVAE_Check: required condition is false: [AVAudioIONodeImpl.mm:897:SetOutputFormat:
(format.sampleRate == hwFormat.sampleRate)]

Итак, мой вопрос, как мнеполучить аппаратное значение sampleRate от устройства, на котором запущено приложение, поэтому я могу установить его в свой формат записи для узла?

Кроме того, если запущенное приложение записывается через Mac или отображается на экране Apple TV, я полагаюМне нужно будет получить hw sampleRate для этого устройства, чтобы мое приложение не зависало и в этих случаях?!

Любая помощь очень ценится!

1 Ответ

0 голосов
/ 06 июня 2018

Из AVAudioSession для аппаратной частоты дискретизации.

let sampleRate = AVAudioSession.sharedInstance().sampleRate

Но это может лучше соответствовать вашему конкретному случаю.

let sampleRate = node.inputFormat(forBus: 0).sampleRate
...