使用语音框架的自定义语音交互器

步骤2:设计UI

现在,在我们的默认视图控制器中添加一些UI元素。

TextView:显示语音输入的文本输出,并接受文本输入进行语音合成。

“听我的家伙”按钮 :开始收听。

“可以说”按钮 :将您输入的文本合成为语音消息。

步骤3:申请权限

为了安全起见,要访问任何硬件,该应用必须获得用户的许可。

只需转到Info.plist文件>>添加新行>>搜索“隐私-语音识别用法说明” >>提供一些获得用户许可的有效理由。 只是忽略我的理由😉

重复上述步骤,这一次是“隐私-麦克风使用说明”。

步骤4:添加语音框架

下一步,也许是最重要的步骤是在我们的项目中添加Speech Framework。

为此,只需单击项目文件>>向下滚动到“链接的框架和库” >>单击微小的“ +”按钮>>搜索“语音” >>单击“添加”按钮。

现在我们已经完成了配置和UI工作。 让我们开始编码。

步骤5:定义对象

为了使我们的应用能够进行语音输入,我们必须初始化以下四个属性。

让我们看看它们的作用是什么。

  1. ognitionRequest: 音频缓冲区将传递给RecognitionTask对象。
  2. ognitionTask :执行语音识别并检索结果的任务。
  3. audioEngine 连接的AVAudioNode组(稍后再讨论)。

步骤6:添加方法StartListening()

现在,创建一个名称为“ startListening”的方法。

在方法startListening()中添加以下行

在第一行中,我们正在创建SFSpeechRecognizer类的实例。

它基本上告诉RecognitionTask 识别本地/语言的语音输入。

在下一行中,我们正在初始化我们的RecognitionRequest。

第三行,我们正在检查是否成功初始化了ognitionRequest ,如果没有成功则返回致命错误。

步骤7:添加节点

让我们继续前进,并在我们的startListening()方法中添加更多行。

audioEngine!.inputNode返回引擎的单例输入节点。

现在什么是“ inputNode ”?

简单来说,它是用于执行音频信号生成,处理或输入/输出任务的缓冲区。

步骤8:启动音频引擎

让我们添加更多代码。

您在上面的代码中所做的就是准备您的audioEngine实例。

然后启动它以接受来自RecognitionTask的语音输入 如果失败,则打印错误消息。

步骤9:开始任务识别

RecognitionRequestabove的shouldReportPartialResults属性用于告知每种话语的报告结果。

在第二行中,我们将使用RecognitionRequest和完成处理程序初始化识别任务。

完成处理程序将返回结果和错误。

结果将包含语音输入,而错误将包含错误(如果发生)。

现在,我们完成了startListening()方法,在“ Listen To Me Dude”按钮上单击它。

步骤10:添加方法StartSpeaking()

现在,让我们继续进行项目“语音合成器”的第二部分。

此方法将使用文本视图文本作为输入并产生其语音输出。

这种方法很小,因此我们将一口气讨论它。

在第一行中,我们使用字符串消息创建AVSpeechUtterance类的实例( 话语 )。 它将作为对AVSpeechSynthesizer类实例的请求而工作。

在第二行中,我们定义语音输出语言。 (本文将相应地进行综合)。

在第三行中,我们设置发声率。 速率越高,语音输出越慢。

在第四行中,我们将创建AVSpeechSynthesizer类的实例,该类将产生语音输出。

在最后一行中,我们通过将话语作为参数来调用对象合成语音方法。

我们都完成了..恭喜..

编码愉快…。