利用微信网页录音接口实现语音搜索

article/2025/7/22 6:16:16

微信网页接口有3个录音相关接口

开始录音接口

wx.startRecord();

停止录音接口

wx.stopRecord({
success: function (res) {
var localId = res.localId;
}
});

监听录音自动停止接口

wx.onVoiceRecordEnd({
// 录音时间超过一分钟没有停止的时候会执行 complete 回调
complete: function (res) {
var localId = res.localId;
}
});


还有1个语音转换接口

识别音频并返回识别结果接口

wx.translateVoice({
localId: '', // 需要识别的音频的本地Id,由录音相关接口获得
isShowProgressTips: 1, // 默认为1,显示进度提示
success: function (res) {
alert(res.translateResult); // 语音识别的结果
}
});


所以可以利用这几个接口实现语音搜索

config签名验证前面微信分享有写过,这里不再写


网页样式

<% if @open %><div class="search-micro"><div class="talk" id="talk" data-type="product"><%= icon 'microphone' %> 按住说话</div></div><% end %>

需要判断是否微信浏览器,所以open为判断

@open = false
if is_wechat_brower@open = trueend


js

wx.config({   debug: false,   appId: '<%= @jsapi_config[:appid] %>', // 必填,公众号的唯一标识   timestamp: <%= @jsapi_config[:timestamp] %>, // 必填,生成签名的时间戳   nonceStr: '<%= @jsapi_config[:noncestr] %>', // 必填,生成签名的随机串   signature: '<%= @jsapi_config[:signature] %>',// 必填,签名    jsApiList: ['startRecord', 'stopRecord', 'onVoiceRecordEnd', 'translateVoice'] // 必填,需要使用的JS接口列表   });wx.ready(function(){  var localId;  //开始录音  $('#talk').on('touchstart',function(e){  e.preventDefault();  var $this = $(this);  $this.addClass('red');  //开始录音  wx.startRecord();  });  //停止录音接口  $('#talk').on('touchend', function(){  var $this = $(this);  $this.removeClass('red');  //停止录音接口  wx.stopRecord({  success: function (res) { // alert(res.localId); localId = res.localId;wx.translateVoice({  localId: localId, // 需要识别的音频的本地Id,由录音相关接口获得isShowProgressTips: 1, // 默认为1,显示进度提示success: function (res) {// alert(res.translateResult);result = res.translateResult;//去掉最后一个句号result = result.substring(0,result.length-1);var searchUrl = "/mobile/search?utf8=✓&search_type=product&text=" + result;window.location.href = searchUrl;} });  }  });   });//监听录音自动停止接口  wx.onVoiceRecordEnd({  //录音时间超过一分钟没有停止的时候会执行 complete 回调  complete: function (res) {  localId = res.localId;  // alert(localId);$('#talk').removeClass('red');   wx.translateVoice({  localId: localId, // 需要识别的音频的本地Id,由录音相关接口获得isShowProgressTips: 1, // 默认为1,显示进度提示success: function (res) {// alert(res.translateResult);result = res.translateResult;//去掉最后一个句号result = result.substring(0,result.length-1);var searchUrl = "/mobile/search?utf8=✓&search_type=product&text=" + result;window.location.href = searchUrl;} });}  }); });  wx.error(function(res){   // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。    // alert(res);    });


这里有个问题,就是语音识别接口返回结果默认有一个句号结尾 ,至少我这里是这样,所以需要把最后一个字符去掉



http://chatgpt.dhexx.cn/article/x5tnifSA.shtml

相关文章

Unity WebGL基于js通信实现网页录音

Unity WebGL基于js通信实现网页录音 由于Unity发布WebGL后无法使用Unity中的Microphone,所以无法进行录音&#xff0c;只能借助与网页进行录音操作&#xff0c;因此基于Unity新版页面对接方式jslib实现页面录音。可以将录音数据回传至unity&#xff0c;并在unity中进行播放。理…

php录音功能,h5做出网页录音功能

这次给大家带来h5做出网页录音功能,h5做出网页录音功能的注意事项有哪些,下面就是实战案例,一起来看一下。 得益于前辈的分享,做了一个h5录音的demo。效果图如下: 点击开始录音会先弹出确认框: 首次确认允许后,再次录音不需要再确认,但如果用户点击禁止,则无法录音: …

java 网页 录音_Java+FlashWavRecorder实现网页录音并上传【新】

【注意】 【说明】 1.在线录音并直接上传到服务器中 【使用】 1.运行 1.请下载本项目&#xff0c;并导入myeclipse中 2.跑起项目&#xff0c;访问http://localhost:8080/recorder-online-upload查看效果 2.定制 1.打开WEB-INF/view/index.html 2.只有两段html注释中的代码是需要…

java 网页 录音_Java+FlashWavRecorder实现网页录音并上传

【注意】 【前言】 肯定有需求要网页录音&#xff0c;并且要上传。这奇葩需求。 然后找到了FlashWavRecorder&#xff0c; 【原始版本号】 1.下载 在上面的地址下载zip解压之后&#xff0c;目录里面有个index.html。打开之后这效果&#xff1a; 2.录音权限 必须保证你的电脑有麦…

10.WebRTC实现网页录音功能

一、概述 通过WebRTC&#xff0c;实现在页面上进行录音&#xff0c;并将录音结果转换为.wav格式进行播放 二、录音实现 检测是否有麦克风权限 navigator.mediaDevices.enumerateDevices().then(function(devices) {// 检测视频输入let video devices.find((device) > {…

uniapp中使用网页录音并上传声音文件(发语音)——js-audio-recorder的使用【伸手党福利】

uniapp中上传音频只能在app或小程序当中实现&#xff0c;如何使用网页完成语音的录制和上传则成为了困扰前端童鞋的重点。 本文着重解决&#xff1a; js-audio-recorder报 error:浏览器不支持getUserMedia ! 的问题。 js-audio-recorder报 NotFoundError : Requested device no…

前端实现在浏览器网页中录音

一、整体实现的思想 页面中实现录音需要使用浏览器提供的MediaRecorder API,所以要实现页面录音就需要浏览器支持MediaStream Recording相关的功能&#xff0c;即浏览器能够获取浏览器的录音权限。 页面内容&#xff0c;需要一个记录录音开始和结束的按钮&#xff0c;以及一个用…

基于神经网络的自适应最优控制

《 N e u r a l n e t w o r k a p p r o a c h t o c o n t i n u o u s − t i m e d i r e c t a d a p t i v e o p t i m a l c o n t r o l f o r p a r t i a l l y u n k n o w n n o n l i n e a r s y s t e m s 》 D r a g u n a V r a b i e ∗ , F r a n k L e w …

堆排序(排升序为啥建大堆,排降序为啥建小堆)

简介&#xff1a; 之前对堆排序认识的不是很透彻&#xff0c;今天回过头来再把堆排序的知识整理整理&#xff01;以及排升序为什么要建大堆&#xff0c;排降序要建小堆。 正文&#xff1a; 首先我们要知道&#xff1a;   ①堆的逻辑是一颗完全二叉树&#xff1b;   ②它使…

残差网络Residual Networks-残差网络的创建、训练、测试、调参

残差网络的创建、训练、测试、调参加粗样式 在Keras中实现残差网络模型的创建&#xff0c;并通过模型来实现对图片的分类。 残差网络的预备知识 网络越深越好&#xff1f; 随着网络层级的不断增加&#xff0c;模型精度不断得到提升&#xff0c;而当网络层级增加到一定的数目…

堆排序,为什么升序排列要建大堆,降序排列要建小堆

堆排序中用到了建立大小堆和向下调整的内容&#xff0c;对这些内容有些不了解的同学可以去补一补专门写堆的博客&#xff0c;方便更好的理解堆排序数据结构之堆&#xff08;Heap&#xff09;&#xff0c;堆的相关操作&#xff0c;用堆模拟优先级队列。 如果把待排序序列分为未排…

操作系统——动态分配算法(首次适应算法,最佳适应算法,最坏适应算法及回收)

操作系统——动态分配 写的时间早了&#xff0c;有些许漏洞和不足&#xff0c;请大家不要介意 分配方式可分为四类:单一连续分配、固定分区分配、动态分区分配以及动态可重定位分区分配算法四种方式&#xff0c;其中动态分区分配算法就是此实验的实验对象。动态分区分配又称为…

pandas中对列进行排序(单列/多列)/(升序/降序)/(多列升序,降序控制)

前言 我想把数据分析刻进DNA里 如下面的数据,对price,要进行最简单的升序操作: 这个好整: import pandas as pdshop pd.read_csv("data/shop.csv", index_colid)shop.sort_values(byprice, inplaceTrue)结果: 如果你想整活(被迫)要把数据进行降序排列: 按照降序,传…

最先适应法、最佳适应法、下次适配法、最差适配法

题&#xff1a; 分析&#xff1a; 1. 首先分析是不是最差适配法&#xff0c;最差适配法意思是首先找到最大的内存空间进行分配&#xff0c; 对于请求的5K存储空间&#xff0c;首先找到地址200K容量为56K的地方进行分配&#xff0c;然后剩余51K。 再对请求的15K进行分配&…

自适应滤波器更新算法-EP1

自适应滤波器更新算法-EP1 自适应滤波器是回声消除系统中非常重要的一个功能模块&#xff0c;而对于自适应滤波器来说&#xff0c;如果更新滤波器系数则是关键所在。本文将介绍几种现有的滤波器更新算法&#xff0c;并附上Matlab测试代码。 1、LMS算法 1.1算法原理 LMS算法即…

自适应神经网络算法原理,单神经元自适应控制

关于神经网络自适应控制求助 这句话你可以直接用&#xff0c;不用加引用。因为这句话是很容易验证的。在网络层数、隐含层节点数逐渐增加&#xff0c;训练次数增加之后&#xff0c;他的拟合能力也是不断增加的&#xff0c;所以说&#xff0c;他可以以任意精度逼近任何非线性连…

【转载】梯度下降算法的参数更新公式

NN这块的公式&#xff0c;前馈网络是矩阵乘法。损失函数的定义也是一定的。 但是如何更新参数看了不少描述&#xff0c;下面的叙述比较易懂的&#xff1a; 1、在吴恩达的CS229的讲义的第四页直接给出参数迭代公式 在UFLDL中反向传导算法一节也是直接给出的公式 2、例子&#x…

Java中Comparator的个人简单理解(升序降序)与使用

目录 Java自定义排序返回值简单记忆理解实践LInkedList升序&#xff08;默认情况&#xff09;降序 PriorityQueue升序下的小顶堆&#xff08;默认情况&#xff09;降序下的大顶堆 总结补充数组类型自定义排序降序排序 数组 Java自定义排序返回值简单记忆理解 默认情况下&#…

深度残差收缩网络(从信号降噪的角度进行理解)

本文探讨了深度残差收缩网络的另一种理解方式。 传统信号降噪算法的常见步骤是&#xff1a; ① 采用某种信号变换方法&#xff08;例如小波、经验模态分解&#xff09;&#xff0c;将含噪信号变换到另外一种形态&#xff08;例如小波系数、本征模态分量等&#xff09;。在这些…

NIPS 2016 深度学习 迁移学习 ---残差转移网络用于无监督领域自适应

深度学习的成功得益于大量的标注数据&#xff0c;而数据标注是非常消耗资源的。当一个问题中缺少标注数据时&#xff0c;可以从另一个源中所学知识迁移过来&#xff0c;并且用于新问题中。 清华大学的学者提出了一种新的方法&#xff08;https://arxiv.org/pdf/1602.04433.pdf&…