使用AVAudioEngine进行语音识别会在录制后阻止声音

Chi*_*len 2 audio speech-recognition ios swift swift3

我正在尝试运行Apple SpeakToMe:他们的网站上使用语音识别和AVAudioEngine样本.我的问题是,当您停止AVAudioEngine和SpeechRecognizer时,您将无法再使用系统声音.

如何释放AVAudioEngine和SpeechRecognizer,以便在录制停止后声音再次起作用?

要复制这个:

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

UPDATE

这只发生在真实设备上 - 而不是在模拟器上.

Chi*_*len 5

经过几个小时的调试后,我遇到了未发布的对象导致问题.在他们的示例代码中,他们不会释放AVAudioSession.这会导致声道被阻挡.

解决方法是使AVAudioSession成为一个属性:

private var audioSession : AVAudioSession?
Run Code Online (Sandbox Code Playgroud)

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

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