百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
R

Recorder

> 前端框架
开源

html5 js 支持录制 mp3 wav ogg webm amr g711a g711u 格式,支持 PC 和 Android、iOS 部分 Web 浏览器、Hybrid App(提供 Android iOS App 源码)、微信,提供 ASR 语音识别转文字 H5 版语音通话聊天示例 DTMF 编码解码

5.6K stars0 点赞1 次浏览
访问官网GitHub

工具介绍

html5 js 支持录制 mp3 wav ogg webm amr g711a g711u 格式,支持 PC 和 Android、iOS 部分 Web 浏览器、Hybrid App(提供 Android iOS App 源码)、微信,提供 ASR 语音识别转文字 H5 版语音通话聊天示例 DTMF 编码解码

**【[源GitHub仓库](https://github.com/xiangyuecn/Recorder)】 | 【[Gitee镜像库](https://gitee.com/xiangyuecn/Recorder)】本文档中默认使用[github.io部署的链接](https://xiangyuecn.github.io/Recorder/),如果无法访问,请直接下载仓库源码到本地然后双击打开html文件访问。** # :open_book:Recorder用于html5录音 支持在大部分已实现`getUserMedia`的移动端、PC端浏览器麦克风录音、实时处理,主要包括:Chrome、Firefox、Safari、iOS 14.3+、Android WebView、腾讯Android X5内核(QQ、微信、小程序WebView)、Electron、大部分2021年后更新的Android手机自带浏览器、2024年后更新的Android版UC内核(UC、支付宝、钉钉);不支持:~~老旧国产手机自带浏览器、老旧iOS(11.0-14.2)上除Safari外的其他任何形式的浏览器~~。 支持在非浏览器环境中使用部分功能(如nodejs、各种使用js来构建的程序),使用[RecordApp](./app-support-sample)可在微信小程序、uni-app中直接录音。 支持对任意`MediaStream`进行音频录制、实时处理,包括:`getUserMedia返回的流`、`WebRTC中的remote流`、`audio、video标签的captureStream方法返回的流`、`自己创建的流` 等等。 提供多个插件功能支持,拥有丰富的音频可视化、变速变调处理、语音识别、音频流播放等;搭配上强大的实时处理支持,可用于各种网页应用:从简单的录音,到复杂的实时语音识别(ASR),甚至音频相关的游戏,都能从容应对;提供转码支持,允许将录制的buffers数据或任意pcm数据转码成你需要的格式(参考`rec.mock`方法)。 主要用于语音录制,因此仅对**单声道**进行支持(未适配双声道),支持超长时间录音(参考onProcess实时清理释放内存);默认输出mp3格式,另外可选wav、pcm、g711a、g711u、ogg、amr、webm(beta)格式,支持任意格式扩展(前提有相应编码器);使用recorder.mp3.min.js(150kb)即可录制mp3,使用recorder.wav.min.js(25kb)即可录制wav;均支持实时转码和实时传输。 音频文件的上传和播放:可直接使用常规的`Audio HTML标签`来播放完整的音频文件,参考文档下面的【快速使用】部分,有上传和播放例子;上传了的录音直接将音频链接赋值给`audio.src`即可播放;本地的`blob音频文件`可通过`URL.createObjectURL`来生成本地链接赋值给`audio.src`即可播放,或者将blob对象直接赋值给`audio.srcObject`(兼容性没有src高)。实时的音频片段文件播放,可以使用本库自带的`BufferStreamPlayer`插件来播放,简单高效,或者采用别的途径播放。 **如需录音功能定制开发,网站、App、小程序、前端后端开发等需求,请加本文档下面的QQ群,联系群主(即作者),谢谢~** [​](?) **Recorder H5** : [ [H5在线测试](https://xiangyuecn.github.io/Recorder/) ] [ [H5 QuickStart](https://xiangyuecn.github.io/Recorder/QuickStart.html) ] [ [H5 vue](https://xiangyuecn.github.io/Recorder/assets/demo-vue/) ] [ [H5 ts](https://xiangyuecn.github.io/Recorder/assets/demo-ts/) ] [ [H5 es module](https://xiangyuecn.github.io/Recorder/assets/ztest_es_module.html) ] [ [旧版本测试](https://xiangyuecn.github.io/Recorder/assets/工具-GitHub页面历史版本访问.html#url=xiangyuecn:[email protected],/) ] **Recorder App** : [ [RecordApp测试](https://xiangyuecn.github.io/Recorder/app-support-sample/) ] [ [App QuickStart](https://xiangyuecn.github.io/Recorder/app-support-sample/QuickStart.html) ] [ [App vue](https://xiangyuecn.github.io/Recorder/assets/demo-vue/recordapp.html) ] [ [Android、iOS App源码](./app-support-sample) ] [ [微信小程序源码](./app-support-sample/miniProgram-wx) ] [ [uni-app源码](./app-support-sample/demo_UniApp) ] **工具集** : [ [Recorder代码运行和静态分发](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html) ] [ [PCM转WAV播放测试和转码](https://xiangyuecn.github.io/Recorder/assets/工具-裸PCM转WAV播放测试.html) ] [ [无用户操作测试](https://xiangyuecn.github.io/Recorder/assets/ztest_no_user_operation.html) ] [ [Can I Use查看浏览器支持情况](https://caniuse.com/#search=getUserMedia) ] > [](https://xiangyuecn.github.io/Recorder/) 手机浏览器扫一扫在线测试 [​](?) ### Demo片段列表 1. [【教程】【PCM基础】buffers转pcm、转采样率、改音量、pcm合并转mp3等格式](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=teach.pcm.basic) 1. [【教程】【音频流】【上传】实时转码上传-实时帧回调版](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=teach.realtime.encode_transfer_mp3) 1. [【教程】【音频流】【上传】实时转码上传-pcm固定帧大小](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=teach.realtime.encode_transfer_frame_pcm) 1. [【教程】【音频流】【上传】实时转码上传-通用转码旧版](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=teach.realtime.encode_transfer) 1. [【教程】【音频流】【播放】实时解码播放音频片段](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=teach.realtime.decode_buffer_stream_player) 1. [【教程】【播放】【可视化】实时录制处理audio、video播放流](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=teach.source_stream.capture_stream) 1. [【教程】【ASR】实时语音识别、音频文件转文字-阿里云版](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=teach.realtime.asr.aliyun.short) 1. [【Demo库】【格式转换】-mp3等格式解码转成其他格式](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=lib.transform.mp32other) 1. [【Demo库】【格式转换】-wav格式转成其他格式](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=lib.transform.wav2other) 1. [【Demo库】【格式转换】-amr格式转成其他格式](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=lib.transform.amr2other) 1. [【Demo库】【文件合并】-mp3多个片段文件合并](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=lib.merge.mp3_merge) 1. [【Demo库】【文件合并】-wav多个片段文件合并](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=lib.merge.wav_merge) 1. [【教程】实时多路音频混音](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=teach.realtime.mix_multiple) 1. [【教程】变速变调音频转换](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=teach.sonic.transform) 1. [【教程】新录音从老录音接续、或录制中途插入音频](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=teach.env_in.follow) 1. [【教程】DTMF(电话拨号按键信号)解码、编码](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=teach.dtmf.decode_and_encode) 1. [【测试】PCM采样率转换测试](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=lib.samplerate.raise) 1. [【Demo库】【信号处理】IIR低通、高通滤波](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=dsp.lib.filter.iir) 1. [【测试】【信号处理】FFT频域分析ECharts频谱曲线图](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=dsp.test.fft.analysis) 1. [【测试】WebM格式解析并提取音频](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=test.webm.extract_audio) 1. [【测试】G711、G72X编码和解码播放](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=test.g7xx.engine) 1. [【Demo库】js二进制转换、基础知识-Base64/Hex/Int16Array/ArrayBuffer/Blob](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=lib.js-binary-bytes) 1. [【测试】音乐合成-用波形函数将歌曲简谱文本转成PCM](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=test.create-audio.nmn2pcm) 1. [【测试】音频可视化相关插件测试](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=test.extensions.visualization) ### App Demo Android Demo App : [下载APK](app-support-sample/demo_android/app-debug.apk.zip)(40kb,删除.zip后缀, [源码](app-support-sample/demo_android)) iOS Demo App :[下载源码](app-support-sample/demo_ios) 自行编译 [​](?) ## 【QQ群】交流与支持 欢迎加QQ群:①群 781036591、②群 748359095、③群 450721519、④群 1027243616,纯小写口令:`recorder` [​](?) [​](?) [​](?)

[​](?) # :open_book:快速使用 你可以通过阅读和运行[QuickStart.html](https://xiangyuecn.github.io/Recorder/QuickStart.html)文件来快速入门学习,直接将`QuickStart.html`copy到你的(https、localhost)网站中,无需其他文件,就能正常开始测试了;**注意:需要在https、localhost等[安全环境](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia#Privacy_and_security)下才能进行录音。** > https环境搭建最佳实践:建议给自己的域名申请一个泛域名通配符证书(*.xxx.com),然后线上、本地开发均可使用此证书;本地开发环境直接分配一个三级域名(dev.xxx.com、local.xxx.com、192-168-1-123.xxx.com)解析A记录到电脑局域网的IP地址(192.168.1.123、127.0.0.1),方便本地开发跨端调试(本地如何配置https请针对自己的开发环境自行搜索,很容易)。 > > 获取泛域名通配符证书推荐:[在线免费申请(ZeroSSL、Let’s Encrypt)](https://xiangyuecn.github.io/ACME-HTML-Web-Browser-Client/ACME-HTML-Web-Browser-Client.html);不建议自己生成根证书来签发域名证书,一个是流程复杂,每个设备均要导入根证书,致命的是很多现代浏览器不再信任用户目录下导入的根证书(Android)。 > > 如果必须http访问,Chrome中可尝试打开`chrome://flags/#unsafely-treat-insecure-origin-as-secure`,启用`Insecure origins treated as secure`,把你的地址含端口配置进去,然后重启浏览器。 ## 【1】加载框架 Recorder的所有js文件均为手动引入(内部不会自动引用),因此未被你引入的文件均可删除来精简源码大小。 **方式一**:使用script标签引入 在需要录音功能的页面引入压缩好的recorder.xxx.min.js文件即可(CDN:[JsDelivr](https://www.jsdelivr.com/package/gh/xiangyuecn/Recorder)、[unpkg](https://unpkg.com/recorder-core/)) ``` html ``` 或者直接使用源码(src内的为源码、dist内的为压缩后的),可以引用src目录中的recorder-core.js+相应类型的实现文件,比如要mp3录音: ``` html ``` **方式二**:通过import/require引入 通过 npm 进行安装 `npm install recorder-core --registry=https://registry.npmmirror.com/` ,如果直接clone的源码下面文件路径调整一下即可 ``` … ``` ## 【2】调用录音,播放结果 [​](?Ref=Codes&Start)这里假设只录3秒,录完后立即播放,[在线编辑运行此代码>>](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?idf=self_base_demo)。录音结束后得到的是Blob二进制文件对象,可以下载保存成文件、用`FileReader`读取成`ArrayBuffer`或者`Base64`给js处理,或者参考下一节上传示例直接上传。 ``` … ``` [​](?RefEnd) [​](?) ## 【附】录音上传示例 ``` … ``` [​](?) ## 【附】js中的二进制基础知识:Uint8Array Int16Array ArrayBuffer Blob/File 更多js二进制数据基础知识请阅读:[js二进制转换-Base64/Hex/Int16Array/ArrayBuffer/Blob](https://xiangyuecn.github.io/Recorder/assets/工具-代码运行和静态分发Runtime.html?jsname=lib.js-binary-bytes) ``` … ``` [​](?) [​](?) ## 【附】Android App - WebView中录音示例 [app-support-sample/demo_android](app-support-sample/demo_android)目录中提供了Android测试项目源码(如果不想自己打包可以用打包好的apk来测试,demo_android目录下的`app-debug.apk.zip`,自行去掉.zip后缀)。 在Android App WebView中使用本库来H5录音,需要在App源码中实现以下几部分: 1. 在`AndroidManifest.xml`声明需要用到的两个权限,**第二个也必须的** ``` xml ``` 2. WebView的WebChromeClient中实现`onPermissionRequest`网页授权请求 如果未实现此方法,**WebView默认会拒绝H5录音权限**;onPermissionRequest中需要先获取App的系统录音权限(Activity里面必须先用this.checkSelfPermission检测权限,否则直接this.requestPermissions会造成WebView触发touchcancel打断长按),然后再grant网页权限,可参考Android Demo中的[MainActivity.java](app-support-sample/demo_android/app/src/main/java/com/github/xianyuecn/recorder/MainActivity.java)中的实现代码。 注:如果应用的`腾讯X5内核`,可能还须提供`android.permission.CAMERA`权限,和调用`webView.setWebChromeClientExtension`来重写X5的`IX5WebChromeClientExtension.onPermissionRequest`方法来进行权限处理 3. 如需后台录音,还需要实现Android后台录音保活服务 自`Android 9`开始,为了保护用户隐私,锁屏或进入后台一段时间后App可能会被禁止访问麦克风、摄像头等功能,导致无法录音、或录音数据全部是静音,因此需要使用保活机制才能在后台录音,详细请参考[app-support-sample/demo_android](app-support-sample/demo_android),里面专门有一个章节讲解保活。 [​](?) ## 【附】iOS App - WebView中录音示例 [app-support-sample/demo_ios](app-support-sample/demo_ios)目录中提供了iOS测试项目源码(需自行用xcode编译运行)。 在iOS App WebView中使用本库来录音,需要在App源码 `Info.plist` 中声明使用麦克风 `NSMicrophoneUsageDescription`,无需其他处理,WebView会自己处理好录音权限;注意:iOS App需要在项目Background Modes中勾选Audio才能在后台保持录音,不然App切到后台后立马会停止录音。 iOS 14.3+以上版本才支持WebView中进行H5录音。 iOS 15+以上版本提供了静默授权支持,需要WKWebView的uiDelegate实现[WKUIDelegate requestMediaCapturePermissionFor接口](https://developer.apple.com/documentation/webkit/wkuidelegate),可参考iOS Demo中的[MainView.swift](app-support-sample/demo_ios/recorder/MainView.swift)中的代码;如果未实现,会导致H5录音每次打开页面后第一次录音时、或长时间无操作再打开录音时均会弹出录音权限对话框。 iOS 11.0-14.2:纯粹的H5录音在iOS WebView中是不支持的,需要有Native层的支持,具体参考RecordApp中的[app-support-sample/demo_ios](app-support-sample/demo_ios)测试项目源码。 [​](?) ## 【附】微信小程序中录音集成参考 `RecordApp`支持在微信小程序中直接进行录音,请参考小程序Demo项目:[miniProgram-wx](./app-support-sample/miniProgram-wx)。 [不推荐] 如果仅使用`Recorder`的话,将只能在H5页面中使用,然后在小程序的`web-view`中显示这个H5,和普通浏览器没有区别。 [​](?) ## 【附】Electron程序中录音集成参考 在Electron BrowserWindow中使用本库来录音,需要程序本身先获得录音权限;在调用`open`打开录音前,需要先到主进程使用 `systemPreferences.getMediaAccessStatus('microphone')` 判断程序是否有录音权限,如果是未申请权限,需要调用 `systemPreferences.askForMediaAccess('microphone')` 来请求权限;程序有权限后,即可和普通网页一样正常的录音。 [​](?) ## 【附】uni-app集成参考 `RecordApp`支持在uni-app中直接进行录音,支持编译成:H5、Android App、iOS App、微信小程序,请参考Demo项目和文档:[demo_UniApp](./app-support-sample/demo_UniApp),对应的组件可到[DCloud 插件市场下载](https://ext.dcloud.net.cn/plugin?name=Recorder-UniCore)。 [不推荐] 如果仅使用`Re

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

JavaScriptamrasraudiobrowser

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类前端框架
定价开源

> 相关工具

R
React
用于构建用户界面的 JavaScript 库
V
Vue.js
渐进式 JavaScript 框架
N
Next.js
基于 React 的全栈 Web 框架