目录

前语

起步

完结进程

webkitSpeechRecognition

speechSynthesis

小比如

遇到的问题

作用展现

总结


前语

去年写了两篇关于接入ChatGPT的文章:微信接入ChatGPT,运用Node+ChatGPT+Wechaty做一个微信机器人_DieHunter1024的博客-CSDN博客

站在伟人的肩膀上,用Node+ChatGPT模块完结一个接口_DieHunter1024的博客-CSDN博客

我自己也把微信小号接入了ChatGPT,搭档们直呼过瘾,每天在群里聊得风生水起

这不前段时间看了《流浪地球2》,在感叹国产科幻片如此优秀的一起,心中萌生出了一个想法,我是不是也能把语音技能结合到ChatGPT中,做个语音对话机器人玩玩?

说干就干,参照之前的文章,咱们运用nodejs完结了chatGPT接口,现在只需在前端页面中完结语音辨认以及语音组成就行了

起步

提到语音功用,浏览器已经供给了对应的Web Speech API,其中有两个目标,分别是

  • webkitSpeechRecognition:语音辨认目标
  • speechSynthesis:语音组成目标

借助这两个目标,咱们能够调用麦克风和扬声器,对浏览器进行交互

下面是一个简略的流程,用户运用webkitSpeechRecognition中的函数进行语音辨认,将字符发送到之前做的chatGPT接口中,chatGPT模块调用openai换取AI模型输出成果,返回到浏览器,浏览器经过speechSynthesis组成音效,完结一个对话周期

基于Web Speech API给ChatGPT加上语音功能,距离MOSS又近了一步

完结进程

webkitSpeechRecognition

      // 创建语音辨认目标
      const recognition = new webkitSpeechRecognition();
      // 语音设置成中文
      recognition.lang = "zh-CN";
      // 开端辨认
      recognition.start();
      // 当辨认到语音时触发事情
      recognition.addEventListener("result", (event) => {
        console.log(event.results);
      });

运用上述代码后,页面中会弹出权限恳求,点击允许

基于Web Speech API给ChatGPT加上语音功能,距离MOSS又近了一步

然后咱们直接说话就会有辨认成果(需求挂vpn)

基于Web Speech API给ChatGPT加上语音功能,距离MOSS又近了一步

假如打开了麦克风,但是说话没有反应的,大概率是因为辨认服务没恳求到,需求挂vpn

此外,webkitSpeechRecognition类还有以下常用装备:

recognition.continuous = true 继续辨认,直到调用stop,默以为false,辨认一次就会主动封闭

recognition.interimResults = true 辨认时是否打断并更新成果,默以为false,设置为true时会有如下作用

基于Web Speech API给ChatGPT加上语音功能,距离MOSS又近了一步

speechSynthesis

接下来看看语音组成

      const speakText = new SpeechSynthesisUtterance("hello world");
      speechSynthesis.speak(speakText);

在控制台输入以下代码,即可组成hellow world的语音作用

小比如

了解了上述用法,咱们能够在浏览器上完结仿照自己说话的功用,代码如下

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>ASR-Node</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      #app {
        width: 1000px;
        margin: 100px auto 0;
        text-align: center;
      }
      h3 {
        margin-bottom: 20px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <h3>ChatGPT-ASR-Bot</h3>
      <main>
        <span>发送:</span>
        <span id="send_msg"></span>
        <br />
        <span>接收:</span>
        <span id="rec_msg"></span>
      </main>
    </div>
    <script type="module">
      const speak = (str) => {
        rec_msg.textContent = str;
        const speakText = new SpeechSynthesisUtterance(str); // 转换字符
        speechSynthesis.speak(speakText); // 语音组成
      };
      const listen = () => {
        // 创建语音辨认目标
        const recognition = new webkitSpeechRecognition();
        // 语音设置成中文
        recognition.lang = "zh-CN";
        // 当辨认到语音时触发事情
        recognition.addEventListener("result", (event) => {
          const { results } = event;
          console.log(results);
          const len = results.length;
          const { transcript } = results[len - 1][0];
          send_msg.textContent = transcript;
          speak(transcript);
        });
        return recognition;
      };
      // 开端辨认
      listen().start();
    </script>
  </body>
</html>

虽然放不了声音,但是作用仍是很直观的:

基于Web Speech API给ChatGPT加上语音功能,距离MOSS又近了一步

完结结束后,咱们就能够在语音辨认完结和语音组成之前这两个节点对接ChatGPT接口(代码比较多,就不贴出来了,有兴趣能够直接下载源码)

遇到的问题

虽然在辨认时运用了continuous:true属性。webkitSpeechRecognition仍然会超时主动封闭。处理方式是在其end事情钩子中履行从头辨认的操作

作用展现

基于Web Speech API给ChatGPT加上语音功能,距离MOSS又近了一步

总结

本文带领各位认识了Web Speech API的两个目标以及常用的函数,完结了一个仿照自己说话的事例,并接入最近比较火的ChatGPT模型,以完结一个类似小爱同学的语音助手的语音对话功用。

最后,感谢你的阅览,假如文章对你有帮助,还希望支持一下作者。

在这里我也抛砖引玉,等待看到大家的进阶玩法

源码:chatGPT-ASR: ChatGPT接入语音辨认与组成的功用