目前的代码
askSpeechPermission() var request = SFSpeechAudioBufferRecognitionRequest() var listOfInputs = AVAudioSession.sharedInstance().availableInputs do { try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryRecord, mode: AVAudioSessionModeDefault, options: AVAudioSessionCategoryOptions.allowBluetooth) } catch { } let node = audioEngine.inputNode let recordingFormat = node.outputFormat(forBus: 0) node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { buffer, _ in self.request.append(buffer) }
报crash
*** Terminating app due to uncaught exception ‘com.apple.coreaudio.avfaudio’, reason: ‘required condition is false: format.sampleRate == hwFormat.sampleRate’
解决
需要如下设置采样率,在最后添加如下代码
let sampleRate = AVAudioSession.sharedInstance().sampleRate let fmt = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: sampleRate, channels: 1, interleaved: true) node.installTap(onBus: 0, bufferSize: 1024, format: fmt) { buffer, _ in self.request.append(buffer) }