在网页中实现录音功能

使用WebRTC实现网页录音功能 连接后,音频数据将从音频流传递到ScriptProcessorNode,然后传递到输出目标(这里使用的是默认的音频输出设备)。在回调函数中,我们可以访问音频数据并进行处理。连接后,音频数据将从音频流传递到ScriptProcessorNode,然后传递到输出目标(这里使用的是默认的音频输出设备)。接下来,我们可以创建一个ScriptProcessorNode,它允许我们通过回调函数来处理音频数据。接下来,我们可以创建一个ScriptProcessorNode,它允许我们通过回调函数来处理音频数据。 阅读详情

最近在项目中遇到问题,需要在页面中实现录音功能,如下:

需求分析:在微信浏览器内打开的页面,制作一个按钮,用户按住按钮后开始录音,松手后停止录音并将录音上传并长期保存。

1.开发流程

        录音功能需要调用微信app的录音接口,需要使用微信jssdk。

          使用微信jssdk:微信JS-SDK说明文档

  • 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。[需要有微信公众号]
  • 引入JS文件
  • 通过config接口注入权限验证配置
  • 通过ready接口处理成功验证
  • 通过error接口处理失败验证

//假设已引入微信jssdk。【支持使用 AMD/CMD 标准模块加载方法加载】
wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名,见附录1
    jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});

wx.ready(function(){

    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});

wx.error(function(res){

    // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。

});
本次需求核心功能:录音并保存
//假设全局变量已经在外部定义
//按下开始录音
$('#talk_btn').on('touchstart', function(event){
    event.preventDefault();
    START = new Date().getTime();

    recordTimer = setTimeout(function(){
        wx.startRecord({
            success: function(){
                localStorage.rainAllowRecord = 'true';
            },
            cancel: function () {
                alert('用户拒绝授权录音');
            }
        });
    },300);
});
//松手结束录音
$('#talk_btn').on('touchend', function(event){
    event.preventDefault();
    END = new Date().getTime();
    
    if((END - START) < 300){
        END = 0;
        START = 0;
        //小于300ms,不录音
        clearTimeout(recordTimer);
    }else{
        wx.stopRecord({
          success: function (res) {
            voice.localId = res.localId;
            uploadVoice();
          },
          fail: function (res) {
            alert(JSON.stringify(res));
          }
        });
    }
});

//上传录音
function uploadVoice(){
    //调用微信的上传录音接口把本地录音先上传到微信的服务器
    //不过,微信只保留3天,而我们需要长期保存,我们需要把资源从微信服务器下载到自己的服务器
    wx.uploadVoice({
        localId: voice.localId, // 需要上传的音频的本地ID,由stopRecord接口获得
        isShowProgressTips: 1, // 默认为1,显示进度提示
        success: function (res) {
            //把录音在微信服务器上的id(res.serverId)发送到自己的服务器供下载。
            $.ajax({
                url: '后端处理上传录音的接口',
                type: 'post',
                data: JSON.stringify(res),
                dataType: "json",
                success: function (data) {
                    alert('文件已经保存到七牛的服务器');//这回,我使用七牛存储
                },
                error: function (xhr, errorType, error) {
                    console.log(error);
                }
            });
        }
    });
}

//注册微信播放录音结束事件【一定要放在wx.ready函数内】
wx.onVoicePlayEnd({
    success: function (res) {
        stopWave();
    }
});

2.小麻烦(需要后台转码,微信下载的是amr文件,audio不支持,需要转码之后进行播放)

要防止用户误操作(如:反复点击、误触摸)导致的无效录音。

小于300ms不录音

防止用户长按导致的浏览器默认弹出微信浏览器默认的“复制对话框”。

使用css设置按钮 user-select:none;

微信播放录音接口事件回调函数无效

微信注册事件一定要放在wx.ready中。

阻止默认事件

touch 事件记得加 event.preventDefault(); 防火防爆

微信存储静态资源时间为3天,如何长期保存

要么存到自己服务器,要么利用其它资源,比如七牛,还可以帮我们自由转换amr格式到mp3等格式呢! 微信服务器默认资源格式为amr,这个格式在android机器可以使用audio标签播放,在ios机器使用audio标签无法播放。

微信录音功能授权引发的交互问题

使用微信jssdk接口录音,在同一个域只需要授权一次,即第一次使用录音的时候,微信自己会弹出对话框询问是否允许录音,用户点击允许后,之后再使用录音时,便不会再咨询用户是否允许。 在第一次按住录音后,由于用户未曾允许录音,微信会提示用户授权允许在本页面使用微信录音功能,这时用户会放开录音按钮转而去点击允许,在用户允许后,才真正会开始录音,而此时用户早已放开录音按钮,那么录音按钮上便不会再有touchend事件,录音便会一直进行。 解决策略:使用localStorage记录用户是否曾授权,并以此来判断是否需要在刚进入页面是自动录一段录音来触发用户授权

if(!localStorage.rainAllowRecord || localStorage.rainAllowRecord !== 'true'){
    wx.startRecord({
        success: function(){
            localStorage.rainAllowRecord = 'true';
            wx.stopRecord();
        },
        cancel: function () {
            alert('用户拒绝授权录音');
        }
    });
}



基于Web Audio API的网页录音功能实现 Web录音功能作为现代浏览器交互体验的重要组成部分,正逐步成为在线教育、语音协作、内容创作等领域的核心技术之一。它通过浏览器内置的 Web Audio API 与 MediaRecorder API,实现无需插件即可完成音频采集、处理与存储的功能。本章将从基本概念入手,介绍其典型应用场景,并探讨其在现代 Web 开发中的技术价值与发展趋势。掌握这些内容,将为后续章节中深入音频处理流程、可视化展示与项目实战打下坚实基础。 阅读详情

相关推荐

微信网页录音

实现微信录音,上传下载

JS - 微信浏览器(H5)语音录音插件(Recorder H5)

Recorder H5使用简单,功能丰富,支持PC、Android,但IOS上仅Safari支持录音;RecordApp除Recorder支持的外,支持Hybrid App,IOS上支持微信网页和小程序Web-View。 传送门:https://xiangyuecn.github.io/Recorder ...

4855

MID360+fastlio功能笔记

前言。

qq_35598561的博客 5301

微信内置浏览器音频直播

公司需求想在微信里面搞一个音频直播。 既然有了需求,程序猿苦逼的干。其中肯定也走了不扫弯路,在此记下,让后人少走一点弯路。 首先我们用的直播技术用的是百度云 音视频直播LSS,直播用的硬件是UtrackPro,相对于专业来说这个设备确实比较差。 一切就这样调好了。前端显示的播放空间,我开始用的是百度云自带的 var player = cyber

zjy660358的专栏 5167

用Scratch实现凯撒密码:图形化编程与古典密码学的趣味结合

字符编码与移位运算是计算机处理文本数据的基础原理之一,它通过将字母映射为数字实现信息转换。在密码学领域,凯撒密码作为最经典的替换密码,直观地展示了基于规则字符替换的加密思想,其核心价值在于通过简单算法揭示加密解密的基本框架。这种原理在编程教育中尤为重要,能够帮助初学者理解循环、变量和字符串处理等核心概念。结合Scratch图形化编程环境,学习者可以通过拖拽积木可视化构建加密算法,将抽象的移位操作转化为交互式游戏。本项目以凯撒密码为例,通过实时密钥调整和动态字母表映射,生动演示加密过程,并自然融入暴力破解和密

weixin_32428571的博客 310

python-调用动态链接库dll/so的方法

使用python ctyeps CDLL来调用linux下的so动态链接库或windows下的dll动态链接库

XIAOXIANG233233的博客 3662

微信浏览器自动播放在线语音(安卓,ios)

在线语音是利用百度提供的API生成的 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>语音自动播放</title> <style> </style&gt

qq_33347814的博客 715

QtNodeEditor实战:构建高效可视化编程环境的完整指南

本文是QtNodeEditor实战的完整指南,详细介绍了如何利用这一基于Qt框架的可视化编程工具构建高效节点编辑器。内容涵盖从快速集成、自定义节点模型到深入理解MVC数据流架构,并提供了样式定制、场景序列化、动态端口等高级功能的实现方法,帮助开发者快速搭建灵活、可维护的可视化编程环境。

lemon的博客 702

h5页面嵌入微信进行语音识别和分享功能注意问题

我们要做与微信相关的功能一定是进入api文档来参照文档操作[https://mp.weixin.qq.com/wiki?2、在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js。备注:登录后可在“开发者中心”查看对应的接口权限->网页授权->业务域名和JS接口安全域名。第一步: “公众号设置”的“功能设置”里填写“JS接口安全域名”加入域名。1、首先需要先登录微信公众平台进入。3、首先需要将配置项填写完整。

哈喽234的博客 8659

Android P HAL层添加HIDL实例(详细实现步骤)

Android P HAL层添加HIDL实例 本文将介绍如何在P OS上添加HIDL实例,简单增加seLinux策略使得可以在system_service调用测试,并用模拟器emulator验证。 调用过程为 APP->TestManager->TestService->ITast.hal 文章目录Android P HAL层添加HIDL实例实现过程一 、hardware部分1...

sinat_18179367的博客 1万+

角谱迭代与傅里叶变换迭代算法(GS)的原理及其实例演示分析

角谱迭代与傅里叶变换迭代算法(GS)的原理及其实例演示分析 目前,迭代法和强度传输方程(TIE)法是两类典型的非干涉相位检索技术(Phase Retrieval,被称为相位恢复、相位检索、相位反演法、相位复原等)。迭代法中的经典算法是Gerchberg-Saxton(GS),随后,出现了包括错误减少算法(ER)、混合输入输出法(HIO)、梯度搜索算法、角谱迭代算法等改进算法。...

简单光学 2万+

网页上实现一个在线录音的功能

网页上实现一个在线录音的功能 我想在网页上实现一个在线录音的功能,并且录完之后可以回放,如果用户满意则发送给服务器进行处理。请问各位大虾如何实现呢?如果使用MCI控件的话,是必须用脚本控制它呢还是也可以在服务器端控制它呢?如果不使用控件还有什么其他好的方法吗?录音的格式wav等 

pphhqq_888的专栏 3625

SAP和Oracle EBS作为全球顶级的ERP系统,在中国市场深耕数十年,尤其是在大型国企、央企和跨国企业中,已经形成了强大的用户习惯和“舒适区”依赖

国产ERP替代国际系统的关键挑战在于打破用户对SAP/Oracle的操作习惯和心理依赖。需采取多维策略:战略上明确价值主张、分阶段实施;产品上优化用户体验、确保数据迁移;实施上加强情景化培训、流程再造。成功替代70%取决于变革管理,需将"被动替换"转为"主动升级",让用户在新系统中建立更优的舒适区。

金牌架构师 383

web网页上实现录音功能(vue3)

在Web开发中实现音频录制功能是许多应用场景的常见需求,本文详细解析如何利用现代浏览器API实现网页端的录音功能

to_prototy的博客 3360

RK356x U-Boot研究所(命令篇)3.12 mtd命令的用法

RK356x U-Boot研究所(命令篇)3.12 mtd命令的用法

Systemcall名屋 1686

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

10.WebRTC实现网页录音功能

通过WebRTC,实现在页面上进行录音,并将录音结果转换为.wav格式进行播放。

qq_29517595的博客 1972

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

HTML5页面实现录音功能:轻松集成网页录音,提升用户体验

HTML5页面实现录音功能:轻松集成网页录音,提升用户体验 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代互联网环境下,网页与用户的互动性成为提升用户体验的关键因素之一。HTML5页面实现录音功能,正是基于这种需求而诞生的解决方案。该项目提供了一种在网页上直接实现录音功能的方案,让用户能够像使用微信发送语音消息一样,在网页上轻松完成录音操作。 项目技术分析 核心...

gitblog_06759的博客 658

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【免费下载】 Recorder H5 快速入门指南:从零开始实现网页录音功能

Recorder H5 是一个功能强大的网页端音频录制库,它基于HTML5的Web Audio API和MediaRecorder API实现,能够在现代浏览器中轻松实现音频录制功能。该库具有以下核心特点: - 跨平台支持:兼容PC端和移动端(Android/iOS 14.3+) - 多格式输出:支持MP3、WAV等多种音频格式 - 实时处理:提供音频波形可视化能力 - 简单易用:API设计简洁...

gitblog_00002的博客 838

已解决:H5移动端网页实现录音功能,js实现录音功能,包括安卓webview接口也可以使用

需要注意的是,由于安卓设备的硬件配置和性能各异,因此录音的质量和可靠性可能会有所不同。遇到一个需求,需要做一个手机网页录音的功能,嵌入到webview中去,用安卓原生录音倒是可以,但是想着尽量去安卓化开发,就想着用纯的js前端代码去实现录音功能。需要注意的是,在使用 pause() 和 resume() 方法时,我们需要考虑到录音时长和暂停/恢复时的延迟时间,以确保正确的录音效果。-----------------------这是一条美丽的分割线-----------------------

Spy003的博客 1万+

如何用Recorder.js快速实现网页录音功能:5分钟上手教程

Recorder.js是一款轻量级的网页录音工具,能够帮助开发者在5分钟内为网站添加专业的录音功能。无论是在线教育平台的语音留言、社交媒体的语音评论,还是企业内部的语音笔记应用,Recorder.js都能提供稳定高效的录音体验,让你的网页交互更加丰富多样。 ## 准备工作:两种安装方式任选 ### npm快速安装(推荐) 如果你使用现代前端构建工具,通过npm安装是最便捷的方式: ```js

gitblog_00015的博客 682

前端网页实现录音功能(React)

前端网页实现录音功能(React),发布到线上需要安全的域名即需要https或者本地运行localhost,才能访问avigator.mediaDevices.getUserMedia API,要不然会直接报undefined

qq_56894932的博客 1053

php手机网页在线录音ios,iOS 实现录音功能

参考资料音频文件相关知识文件格式wav:特点:音质最好的格式,对应PCM编码适用:多媒体开发,保存音乐和音效素材mp3:特点:音质好,压缩比比较高,被大量软件和硬件支持适用:适合用于比较高要求的音乐欣赏caf:特点:适用于几乎iOS中所有的编码格式编码格式PCMPCM:脉冲编码调制,是一种非压缩音频数字化技术,是一种未压缩的原音重现,数字模式下,音频的初始化信号是PCMMP3AACAAC:其实是“...

weixin_39959236的博客 235

【免费下载】 HTML5录音插件Recorder.js:轻松实现网页端录音功能

在互联网技术飞速发展的今天,网页端的交互体验越来越丰富。Recorder.js 是一款优秀的HTML5录音插件,它让开发者能够轻松地在网页中实现录音功能,下面我们将详细了解这款插件的核心功能、技术特点及其应用场景。 ## 项目介绍 Recorder.js 是一款基于 HTML5 的麦克风录音插件,旨在为开发者提供一种简单而高效的方法,在网页中集成录音功能。这款插件支持将录音输出为标准的WAV格...

gitblog_06766的博客 497

网页录像录音功能的实现之MediaRecorder的使用

前面介绍了通过H5实现在网页内打开摄像头和麦克风,实现截图和图像预览的相关知识。 getUserMedia API及HTML5 调用摄像头和麦克风 一个简单的demo 实现摄像头的调用及视频录制,截图,下载等功能,逐渐完善中。。。。 地址:https://github.com/zhangdexian/videorecorder 页面效果: 但是我们无法将将数据保存到...

1453

JavaScript 实现页面中录音功能

页面中实现录音需要使用浏览器提供的 Media​Recorder API,所以前提是需要浏览器支持 MediaStream Recording 相关的功能。 以下代码默认工作在 Chrome 环境中。 准备页面 首先准备一个页面,其中内容很简单,一个录音按钮,一个用于播放的 <audio> 标签。 <!DOCTYPE html...

weixin_30343157的博客 1549

html5中网页触摸出现录音,离开停止并上传的功能实现

以下是实现功能实例: html &amp;amp;lt;!DOCTYPE html&amp;amp;gt; &amp;amp;lt;html&amp;amp;gt; &amp;amp;lt;head&amp;amp;gt; &amp;amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charse

佚名 3008
上一篇: 苹果手机用H5audio标签无法自动播放音乐处理方法
下一篇: 手机端网页禁止在非微信浏览器中打开
wait9166
博客等级 码龄10年 0粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值