微信小程序和百度的语音识别接口

2023-10-30

介绍

因为项目需要,使用到了微信小程序和百度的语音接口 现在将项目中的一个小模块拿出来单独分享.

技术关键字

  1. 微信小程序
  2. 百度语音接口
  3. nodejs,express
  4. fluent-ffmegp

环境

  1. windows 10
  2. vs code 1.20.1
  3. 微信小程序开发工具 1.02.1802270
  4. 花生壳-提供域名和内容穿透-用于方便本地远程调试微信小程序

微信小程序

考虑到业务并不复杂,所以就将所有的代码都放在一个页面就可以了(wxml,wxss,js统称为一个页面)

文件目录

这里写图片描述

页面

这里写图片描述

index.wxml

<button type='default' bindtouchstart='startrecorderHandel' bindtouchend="sendrecorderHandel">开始8录音</button>
<view>
  你说的话是:
  <view>
    {{msg}}
  </view>
</view>

index.js

// 录音对象
const recorderManager = wx.getRecorderManager();

function sendRecord(src) {
  var obj = {
    // 已经在花生壳中映射到本地端口-3001 
    url: "http://xxx:34306/post",
    filePath: src,
    name: "fffile",
    header: {
      'Content-Type': 'application/json'
    },
    success: function (result) {
      var data = JSON.parse(result.data);
      // msg 为最终语音识别的字符串
      var msg = data.result;
      // 获取当前页面对象
      var page = getCurrentPages()[0];
      page.setData({ msg: msg });
    },
    fail: function (err) {
      console.log(err);
    }
  };
  wx.uploadFile(obj)
}

// 结束录音的时候触发 
recorderManager.onStop((res) => {
  // 获取文件路径-提交到后台-后台发送到百度
  sendRecord(res.tempFilePath);
})

recorderManager.onError((res) => {
  console.log("error", res);
});

Page({

  /**
   * 页面的初始数据
   */
  data: {
    msg: ""
  },
  // 按下按钮的时候触发
  startrecorderHandel() {
    // 开始录音
    recorderManager.start({
    });
  },
  // 松开按钮的时候触发-发送录音
  sendrecorderHandel() {
    // 结束录音
    recorderManager.stop();
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    wx.authorize({
      scope: 'record'
    })
  }
})

后台nodejs接口

文件目录

这里写图片描述

index.js

var express = require('express');
var app = express();
var fs = require('fs');
var Multiparty = require('multiparty');
// 转码工具
var ffmpeg = require('fluent-ffmpeg');
var AipSpeechClient = require("baidu-aip-sdk").speech;

// #region 创建百度授权 
// 设置APPID/AK/SK
var APP_ID = "xxx";
var API_KEY = "xxx";
var SECRET_KEY = "xxx";

// 百度请求对象
var client = new AipSpeechClient(APP_ID, API_KEY, SECRET_KEY);


// 新建一个对象,建议只保存一个对象调用服务接口
app.post('/post', function (req, res, next) {
  //生成multiparty对象,并配置上传目标路径
  var form = new Multiparty.Form({
    uploadDir: 'uploads/'
  });
  //上传完成后处理
  form.parse(req, function (err, fields, files) {
    var filesTemp = JSON.stringify(files, null, 2);
    var inputFile = files.fffile[0];
    var uploadedPath = inputFile.path;
    var command = ffmpeg();
    command.addInput(uploadedPath)
      // 将1.aac 变为1.wav
      .save(uploadedPath.slice(0, -3) + "wav")
      .on('error', function (err) {
        console.log(err);
      })
      .on('end', function () {
        // 将录音文件转为buffer
        var voice = fs.readFileSync(uploadedPath.slice(0, -3) + "wav");
        var voiceBuffer = new Buffer(voice);

        // 发送buffer到百度接口 返回语音对应的字符串
        client.recognize(voiceBuffer, 'wav', 16000).then(function (result) {
          console.log('<recognize>: ' + JSON.stringify(result));
          res.end(JSON.stringify(result));
        }, function (err) {
          console.log(err);
        });
      });
  });
});
var server = app.listen(3001, function () {
  var host = server.address().address;
  var port = server.address().port;
  console.log('Example app listening at http://%s:%s', host, port);
});

启动

  1. 下载项目

    git clone https://github.com/itcastWsy/wx_baidu.git
  2. 使用微信小程序打开 微信前台 目录

  3. 配置 后台的接口地址

    这里写图片描述

  4. 打开 微信nodejs后台 后台文件夹

  5. 输入 npm i 安装依赖

  6. 输入 命令 启动项目 npm run start

    这里写图片描述

  7. 手机微信扫一扫小程序 - 语音输入 “大吉大利”

这里写图片描述

注意事项

  1. 当使用微信开发工具 发送的语音文件的格式是 aac,但是使用手机微信发送的格式是 m4a 这里直接处理的是m4a 转码工具是ffmpeg

  2. 关于花生壳,如果不使用也可以,只不过需要自己代码提交到有外网域名的服务器上接口,注意 开发阶段需要打开小程序开发工具内的 不校验安全域名….的选项

    这里写图片描述

  3. 当调用百度接口的时候,需要填写上自己的相关信息

这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序和百度的语音识别接口 的相关文章

  • Phantom-node模块无法加载外部资源

    我正在开发一个nodejs服务器 它将发布的html呈现为pdf png或jpg https github com svenhornberg pagetox https github com svenhornberg pagetox ser
  • @mailchimp/mailchimp_marketing/types.d.ts'不是nodeJs中的模块

    我在 NodeJS 应用程序中导入了 import mailchimp mailchim marketing import mailchimp from mailchimp mailchimp marketing 但是 它给出以下错误 ty
  • 如何使用 Protractor 检查某个元素是否不可点击?

    测试一个元素是否很简单is可使用量角器点击 但我一直在挠头试图弄清楚如何检查元素是否not可点击 我尝试将 click 函数包装在 try catch 中 这样当尝试单击时抛出错误时 它应该捕获它并让测试通过 然而 这不起作用 这是我执行检
  • 渲染ejs模板

    我在nodejs中有以下代码 我读取temp ejs文件并获取ejsHtml作为字符串的内容 var html EJS render ejsHtml A div smth div 在 temp ejs 中 Output
  • 如何在node.js中存根process.env?

    我想存根process env FOO with bar var sinon require sinon var stub sinon stub process env FOO bar 我很困惑 我阅读了文档 但仍然不明白 sinonjs
  • 在ubuntu 12.04上安装nodejs和npm后找不到.npmrc文件

    我刚刚按照教程在我的 ubuntu 12 04 上安装了 nodejs 和 npm https gist github com dwayne 2983873 https gist github com dwayne 2983873 现在安装
  • 如果没有“new”,则无法调用类构造函数

    感谢这个问题已经被问过几次了 但是我遇到的几乎所有情况都是有人试图扩展非本地类的情况 我的情况有所不同 我有一个非常简单的基类 名为CObject如下 export class CObject extends BaseObject cons
  • 如何将多个 api 请求中的多个可读流传输到单个可写流?

    期望的行为 实际行为 我尝试过的 重现步骤 研究 期望的行为 将从多个 api 请求接收到的多个可读流传输到单个可写流 API 响应来自 ibm watsontextToSpeech synthesize https cloud ibm c
  • API 使用令牌向 odoo 进行身份验证

    我想使用令牌从 Express 应用程序向 Odoo 进行身份验证 我在用odoo xmlrpc https www npmjs com package odoo xmlrpc连接 Odoo 的节点模块 我的快递应用程序 Odoo 要求 A
  • Nodejs 中的子域

    如何处理nodejs的子域请求 例如以下代码回显test在控制台中的任何请求http localhost 9876 任何内容 http localhost 9876 5Banything 5D var http require http h
  • 监听文件夹和文件(更改)

    可以直接在 PHP 或 Node 上监听文件夹和文件的更改 通过事件 还是我需要创建自己的方法来执行此操作 Example 我需要听文件夹 user 如果我将一些文件添加到该目录中 PHP 或 Node 会收到信息并运行PathEvent
  • 如何在查询语句之外从mysql查询中获取值?

    这是下面的函数console log function quo value value connection query SELECT role from roles where id 1 function error results fi
  • 沙箱中的 Nodejs

    我使用 NodeJS 作为客户端浏览器和服务器之间的中间人来处理所有请求 我正在尝试使用 nodejs 作为过滤工具并突出显示 如果不是 所有恶意脚本 但我意识到nodejs让脚本以当前环境权限运行 因此 我决定通过安装沙箱在新的上下文中运
  • 使用 React.js + Express.js 发送电子邮件

    我在 ES6 中使用 React js 构建了一个 Web 应用程序 我目前想要创建一个基本的 联系我们 页面并想要发送电子邮件 我是 React 新手 刚刚发现我实际上无法使用 React 本身发送电子邮件 我正在遵循教程nodemail
  • Node JS - 如何检测用户语言

    我正在尝试在纯 Node js 中检查用户语言 而不使用 npm 的任何扩展 我使用了进程和全局命令 有很多规范但我找不到系统语言 这是获取默认区域设置的独立于操作系统 节点 浏览器的方法 let locale Intl DateTimeF
  • 如何设置上传的文件名?

    By using multer I made it to request image file like this 这个文件存储在我设置的 上传 文件夹中 我的代码如下 var multer require multer var uploa
  • 缺少节点-v59-linux-x64/grpc_node.node

    我正在尝试在我的服务器中使用 Firebase admin SDK 当我部署时 出现错误 我在 firebase admin node module 映射中缺少文件 node v59 linux x64 grpc node node 我在包
  • 节点无法抓取某些页面

    我不知道这是否与冷融合页面有关 但我无法刮掉这些 cfm pages 在目录中的命令行中request run node gt var request require request node gt var url http linguis
  • editMessageReplyMarkup 方法删除内联键盘

    我正在使用 node js 制作一个电报机器人node telegram bot api图书馆 我回答callback query并想更换我的内联键盘 下面的代码显示了我如何尝试使用此方法 但是当我在电报中点击键盘时 它就消失了 bot o
  • 如何在超级测试中模拟中间件?

    我想测试中间件是否在app js叫做 虽然我嘲笑该模块work js 它仍然运行原始代码 app js const work require work const express require require const app expr

随机推荐

  • 安装SQL2012出现[HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1

    本人安装SQL2012出现这个错误 找了三天三夜 终于把问题找出来 共享给有需要的人们 不用重新换系统 错误如下 1 此问题是系统 net Framework版本冲突 首先下载 net Framework清理工具 如 cleanup too
  • C++学习(三八八)Doxygen

    Doxygen 是一个 C C Java Objective C Python IDL CORBA 和 Microsoft flavors Fortran VHDL PHP C 和D语言的文档生成器 可以运行在大多数类Unix系统 以及Ma
  • Java中,定时任务Timer使用缺陷

    缺陷主要有2点 1 管理并发任务的缺陷 timer有且仅有一个线程去执行定时任务 如果存在多个任务 且任务时间过长 会导致执行效果与预期不符 2 当任务抛出异常时的缺陷 如果TimerTask抛出RuntimeException Timer
  • Flutter Card踩坑经历

    Card包含的Column的Text文本显示居中 且设置textAlign TextAlign start无效 在Column添加属性 crossAxisAlignment CrossAxisAlignment start
  • Python的MySQL库,fetchone,fetchall,fetchmany的比较

    fetchone 返回一条记录 row 一维元组 如 小李 21 如果没有结果 则返回 None 再次调用fetchone 则继续返回下一条记录 直到为空 fetchmany 返回指定的前n条记录 二维元组 如fetchmany 3 获取前
  • JavaWeb项目运维部署

    一 项目部署介绍 Web项目网络拓扑图 部署目录介绍 项目目录 home projectName 启动文件目录 home projectName bin 后端项目 home projectName target Web前端资源 home p
  • HTML实现3D相册

    今天 我给大家分享一个3D相册的代码 废话不说先上效果图 先新建两个文件夹 一个叫css 另一个叫img 如下图 先新建一个文本文档 输入下面的代码 div ul li img src img 1 jpg li ul div
  • 性能测试 —— jmeter计数器

    jmeter计数器 如果需要引用的数据量较大 且要求不能重复或者需要递增 那么可以使用计数器来实现 如 新增功能 要求名称不能重复 1 新增计数器 计数器 允许用户创建一个在线程组之内都可以被引用的计数器 计数器允许用户配置一个起点 一个最
  • 西瓜书-2习题

    文章目录 2 习题 2 1 2 2 2 3 2 4 2 5 有待解决 2 6 2 7 2 8 2 9 有待解决 2 10 有待解决 2 习题 2 1 数据集1000个样本 其中500个正例 500个反例 将其划分为包含70 样本的训练集和3
  • 笔记:pycharm中ModuleNotFoundError:No Module named ‘sklearn‘ 解决办法

    windows10 Anaconda tensorflow2 1 python3 7 开发环境 pycharm 错误 代码 from sklearn import datasets 报错 ModuleNotFoundError No Mod
  • HTTPS:确保Web安全

    参考书籍 图解HTTP HTTP的不足 1 通信使用明文可能会被窃听 HTTP本身不具备加密的功能 无法对通信整体加密 即HTTP使用的是明文方式发送 加密技术可以防止被窃听 加密对象 通信的加密 HTTP和SSL的组合被称为HTTPS 内
  • 字节跳动开源神器:btrace 2.0 技术原理大揭秘

    项目 GitHub 地址 https github com bytedance btrace 1 背景介绍 在一年多前 我们对外正式开源了 btrace AKA RheaTrace 它是基于 Systrace 的高性能 Trace 工具 目
  • Unmapped Spring configuration files found找到未映射的spring配置文件

    在以下位置配置即可
  • 基于Arduino的智能小车-代码部分

    紧接上篇Arduino智能小车 这篇主要是智能小车的代码部分 首先 定义相关模块引脚 注 这里只是粘贴了部分代码 int sp1 8 定义舵机接口数字接口8 int pulsewidth 定义脉宽变量 int v int val1 int
  • DateFormat类:日期格式化的便捷工具

    系列文章目录 文章目录 系列文章目录 前言 一 什么是DateFormat类 二 格式化日期和时间 三 解析字符串为日期和时间 四 本地化支持 总结 前言 在软件开发中 处理日期和时间是一个常见而重要的任务 为了满足不同的需求 Java提供
  • ubuntu操作系统学习笔记之NFS安装

    1 安装 nfs 服务版 机器一 机器二都要装 服务器端安装 sudo aptitude install nfs common nfs kernel server portmap 在客户端则需要安装 sudo aptitude instal
  • 2022高教杯思路 数模思路

    三年比赛经验 国一美赛F 公众号 千千小屋grow 首先切记获奖的前提是要完成论文模型的全部内容 如果A B题玩成编程和建模难度较大 可以选择C题 注 但选择C题 如果中规中矩的完成大概率与国一国二无缘 但很大概率可以省奖保底 A题 物理类
  • 机器学习-定序回归及python实现

    参考链接 深入浅出机器学习算法 定序回归 机器学习 保序回归 IsotonicRegression 一种可以使资源利用率最大化的算法 scikit learn一般实例之一 保序回归 Isotonic Regression
  • MySQL子查询

    子查询指一个查询语句嵌套在另一个查询语句内部的查询 这个特性从MySQL 4 1开始引入 SQL 中子查询的使用大大增强了 SELECT 查询的能力 因为很多时候查询需要从结果集中获取数据 或者需要从同一个表中先计算得出一个数据结果 然后与
  • 微信小程序和百度的语音识别接口

    介绍 因为项目需要 使用到了微信小程序和百度的语音接口 现在将项目中的一个小模块拿出来单独分享 技术关键字 微信小程序 百度语音接口 nodejs express fluent ffmegp 环境 windows 10 vs code 1