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

Posted

技术标签:

【中文标题】使用 AVAudioEngine 进行语音识别会在录制后阻止声音【英文标题】:Speech Recognition with AVAudioEngine Blocks Sound After Recording 【发布时间】:2016-12-13 00:36:51 【问题描述】:

我正在尝试运行来自their website here 的 Apple SpeakToMe: Using Speech Recognition with AVAudioEngine 示例。我的问题是,当您停止 AVAudioEngine 和 SpeechRecognizer 时,您将无法再使用系统声音。

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

复制这个:

下载示例代码 向情节提要添加 UITextField。 运行项目并在文本字段中输入(您会注意到您可以听到您的输入事件的声音)。 然后开始录制和停止录制 再次输入文本字段(现在不会有声音了)

更新

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

【问题讨论】:

【参考方案1】:

经过数小时的调试,我发现了导致问题的未发布对象。在他们的示例代码中,他们没有发布 AVAudiosession。这会导致声道被阻塞。

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

private var audioSession : AVAudioSession?

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

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

【讨论】:

以上是关于使用 AVAudioEngine 进行语音识别会在录制后阻止声音的主要内容,如果未能解决你的问题,请参考以下文章

AvaudioEngine - 以特定采样率录制语音 AvaudioEngine for Analysis

wpf可以进行语音识别吗

golang 使用科大讯飞进行语音合成与识别

尝试在使用 SpeechKit 进行语音识别之前播放系统声音

使用 Buildozer 进行语音识别

使用OpenAI的Whisper 模型进行语音识别