更新记录
0.1.3(2026-07-17)
1、新增微信小程序支持,并补齐鸿蒙原生 AudioCapturer 录音实现
2、鸿蒙新增 onFrameRecorded、pcm/wav 预览输出与 rawTempFilePath
3、新增火山语音转文字完整示例demo,传入豆包流式语音识别大模型,key APP ID和 AccessToken直接无缝接入
0.1.2(2026-07-16)
1、增加 火山语音转文字 组件demo
0.1.1(2026-05-20)
1.增加demo页面
查看更多
平台兼容性
uni-app(4.34)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| √ |
√ |
× |
× |
√ |
√ |
5.0 |
√ |
√ |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| √ |
× |
× |
× |
× |
× |
- |
× |
× |
- |
- |
- |
uni-app x(4.61)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| × |
× |
5.0 |
√ |
√ |
√ |
其他
| 多语言 |
暗黑模式 |
宽屏模式 |
蒸汽模式 |
| × |
× |
× |
√ |
my-recorder
当前能力
- 已完成
uni.getRecorderManager 风格 API、Android AudioRecord 实现、iOS AVAudioEngine 实现,并拉齐微信小程序与鸿蒙系统录音管理器。
- 已支持权限申请、设置页跳转、录音状态查询、临时文件清理;其中 Android/iOS 额外提供实时分贝回调、
pcm/wav 文件落盘与增强帧回调。
- 示例调用页:
uni_modules/my-recorder/demo/record-demo.vue、uni_modules/my-recorder/demo/record-demo.uvue
降级策略
onFrameRecorded:Android/iOS 在 pcm/wav 模式下已支持真实 PCM 分片回调,base64 字段为每个分片的 16bit PCM 数据;微信小程序走系统原生分片能力。
- 当请求
pcm 时,Android/iOS 的 onStop 会返回自动生成的 .wav 预览文件,rawTempFilePath 返回真实的 .pcm 原始文件。
format:Android/iOS 当前真正实现的是 pcm/wav;当请求 aac/mp3 时会触发 1107613 兼容提示,并自动降级为 wav 文件输出。微信小程序与鸿蒙继续走系统原生格式能力。
disableFileOutput:当前不支持,仍会直接报错。
平台兼容说明
- Android 5.0+:使用
AudioRecord,支持 pause/resume、pcm/wav、onFrameRecorded。
- iOS 12.0+:使用
AVAudioEngine,支持 pause/resume、pcm/wav、onFrameRecorded。
- 微信小程序:代理系统
uni.getRecorderManager(),支持系统原生 aac/mp3/pcm/wav,并保留插件统一的 requestPermission、状态查询与错误透传接口。
- 鸿蒙:改为插件内原生
AudioCapturer 实现,支持 pause/resume、pcm/wav、onFrameRecorded,行为与 Android/iOS 增强实现对齐。
aac/mp3 目前仍是兼容降级策略,不是原生真实编码输出。
新增平台说明
- 微信小程序平台保留
onFrameRecorded 原生能力。
- 鸿蒙平台已补齐
onFrameRecorded、rawTempFilePath、previewFormat/rawFormat,并按当前 App 端策略在请求 aac/mp3 时降级为 wav 输出。
onDecibelChange 目前在 Android/iOS/鸿蒙原生增强实现中有效,微信小程序暂不提供系统分贝回调。
调用建议
- 推荐优先使用
wav 或 pcm 验证实时帧回调与流式处理。
- 如果后续业务必须得到真正的
aac/mp3 文件,需要再补原生编码器链路。
onFrameRecorded 示例
import { getRecorderManager } from '@/uni_modules/my-recorder'
const recorderManager = getRecorderManager()
recorderManager.onFrameRecorded((res) => {
const frameBuffer = res.frameBuffer || (res.base64 ? uni.base64ToArrayBuffer(res.base64) : null)
if (!frameBuffer) return
const byteLength = frameBuffer.byteLength
console.log('frame bytes =>', byteLength, 'isLastFrame =>', res.isLastFrame)
// 这里可以把 PCM 分片送给语音识别、波形分析或流式上传
})
recorderManager.start({
format: 'pcm',
frameSize: 16,
sampleRate: 16000,
numberOfChannels: 1,
detectDecibel: true
})
format: 'pcm' 时,实时帧回调最直观;tempFilePath 会返回可播放的 .wav 预览文件。
rawTempFilePath 会保留真实 .pcm 文件,便于你做二次处理或上传。