使用AVAudioEngine语音识别录制后的声音块

我试图运行苹果SpeakToMe:使用语音识别与AVAudioEngine样本从他们的网站在这里 。 我的问题是,当你停止AVAudioEngine和SpeechRecognizer你不能再使用系统声音。

如何释放AVAudioEngine和SpeechRecognizer以使声音在录制停止后再次工作?

要复制这个:

  • 下载示例代码
  • 添加一个UITextField到故事板。
  • 运行项目并键入到文本字段(您会注意到您可以听到您的键入事件的声音)。
  • 然后开始录制并停止录制
  • 再次input文本字段(现在不会有声音)

UPDATE

这只发生在一个真实的设备 – 不是在模拟器上。

经过几个小时的debugging,我发现未发布的对象导致问题。 在他们的示例代码中,他们不释放AVAudioSession。 这会导致声音通道被阻止。

解决方法是使AVAudioSession属性:

private var audioSession : AVAudioSession? 

然后在停止录制时将audioSession.active设置为false:

 if let audioSession = audioSession { do { try audioSession.setActive(false, with: .notifyOthersOnDeactivation) } catch { // handle error } }