JavaScript 实现页面中录音功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript 实现页面中录音功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4670字,纯文字阅读大概需要7分钟。
内容图文
![JavaScript 实现页面中录音功能](/upload/InfoBanner/zyjiaocheng/1327/43fec607035c4c4cba7ae34293b59545.jpg)
页面中实现录音需要使用浏览器提供的 Media?Recorder API,所以前提是需要浏览器支持 MediaStream Recording 相关的功能。 以下代码默认工作在 Chrome 环境中。 准备页面首先准备一个页面,其中内容很简单,两个按钮,一个用于录音,一个用于播放。 <!DOCTYPE html> <htmllang="en"> <head> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width, initial-scale=1.0"> <metahttp-equiv="X-UA-Compatible"content="ie=edge"> <title>audio record</title> </head> <body> <divclass="app"> <buttonclass="record-btn">record</button> <audiocontrolsclass="audio-player"></audio> </div> <scriptsrc="./index.js"></script> </body> </html> 获取录音权限因为录音需要使用设备的话筒,所以第一步应该是向用户索要录音的权限。这是通过 Media?Devices?.get?User?Media() 来完成的,其用法为: var promise =navigator.mediaDevices.getUserMedia(constraints); 其中 constraints 为需要获取的权限列表,这里只需要指定音频 其返回是个 Promise,因为用户何时进行授权是不确定的。通过在 Promise 的回调中进行授权成功或失败的处理。 在使用前需要判断浏览器是否已经支持相应的 API,此时得到如下的代码: if (navigator.mediaDevices.getUserMedia) { constconstraints= { audio:true }; navigator.mediaDevices.getUserMedia(constraints).then( stream=> { console.log("授权成功!"); }, () => { console.error("授权失败!"); } ); } else { console.error("浏览器不支持 getUserMedia"); } 其中成功回调里得到的入参 此时运行后可看到浏览器展示出了让用户授权使用麦克风的提示。 向用户索要麦克风使用权限 创建录音实例将上一步获取到的 MediaStream 传入 Media?Recorder 的构造器创建一个录音器的实例。 var mediaRecorder =newMediaRecorder(stream); 启动录音通过监听页面中录音按钮的点击来启动录音。 const recordBtn = document.querySelector(".record-btn"); constmediaRecorder=newMediaRecorder(stream); recordBtn.onclick= () => { mediaRecorder.start(); console.log("录音中..."); };
所以通过这个状态,我们可以实现再次点击按钮时,结束录音。 recordBtn.onclick= () => { if (mediaRecorder.state==="recording") { mediaRecorder.stop(); recordBtn.textContent="record"; console.log("录音结束"); } else { mediaRecorder.start(); console.log("录音中..."); recordBtn.textContent="stop"; } console.log("录音器状态:", mediaRecorder.state); }; 音频数据的获取上面按钮处理来自用户的交互,只负责启动或停止录音。音频的数据还是从 Media?Recorder 实例上通过监听其相应的事件来完成的。 当录音开始时,会触发其 MediaRecorder.ondataavailable 事件,从该事件回调的入参为 BlobEvent,从它身上取到 event.data 便是我们需要的音频数据。因为数据是一段一段产生的,所以需要暂存到一个数组中。 const chunks = []; mediaRecorder.ondataavailable=function(e) { chunks.push(e.data); }; 目前为止完成的代码应该是这样的: recorder.jsconst recordBtn = document.querySelector(".record-btn"); constplayBtn=document.querySelector(".play-btn"); if (navigator.mediaDevices.getUserMedia) { var chunks = []; constconstraints= { audio:true }; navigator.mediaDevices.getUserMedia(constraints).then( stream=> { console.log("授权成功!"); constmediaRecorder=newMediaRecorder(stream); recordBtn.onclick= () => { if (mediaRecorder.state==="recording") { mediaRecorder.stop(); recordBtn.textContent="record"; console.log("录音结束"); } else { mediaRecorder.start(); console.log("录音中..."); recordBtn.textContent="stop"; } console.log("录音器状态:", mediaRecorder.state); }; mediaRecorder.ondataavailable=function(e) { chunks.push(e.data); }; }, () => { console.error("授权失败!"); } ); } else { console.error("浏览器不支持 getUserMedia"); } 录音状态的查看 录音结束及音频的播放通过监听 MediaRecorder.onstop 事件,将收集好的音频数据创建成 Blob 对象,然后 通过 URL.createObjectURL 创建成 HTML 中 mediaRecorder.onstop=e=> { var blob =newBlob(chunks, { type:"audio/ogg; codecs=opus" }); chunks = []; var audioURL =window.URL.createObjectURL(blob); audio.src= audioURL; }; 其中,在使用完收到到的音频数据后,将 目前为止完成的代码应该是这样的: recorder.jsconst recordBtn = document.querySelector(".record-btn"); constplayer=document.querySelector(".audio-player"); if (navigator.mediaDevices.getUserMedia) { var chunks = []; constconstraints= { audio:true }; navigator.mediaDevices.getUserMedia(constraints).then( stream=> { console.log("授权成功!"); constmediaRecorder=newMediaRecorder(stream); recordBtn.onclick= () => { if (mediaRecorder.state==="recording") { mediaRecorder.stop(); recordBtn.textContent="record"; console.log("录音结束"); } else { mediaRecorder.start(); console.log("录音中..."); recordBtn.textContent="stop"; } console.log("录音器状态:", mediaRecorder.state); }; mediaRecorder.ondataavailable=e=> { chunks.push(e.data); }; mediaRecorder.onstop=e=> { var blob =newBlob(chunks, { type:"audio/ogg; codecs=opus" }); chunks = []; var audioURL =window.URL.createObjectURL(blob); player.src= audioURL; }; }, () => { console.error("授权失败!"); } ); } else { console.error("浏览器不支持 getUserMedia"); } 运行完成上面步骤后,实现了一个简单的录音功能,可通过此地址在线体验。完整的代码可在仓库 wayou/audio-recorder 中获取到。 相关资源 |
原文:https://www.cnblogs.com/Wayou/p/js_audio_recorder.html
内容总结
以上是互联网集市为您收集整理的JavaScript 实现页面中录音功能全部内容,希望文章能够帮你解决JavaScript 实现页面中录音功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。