什么是 react-native-waveform-recorder?
react-native-waveform-recorder 是一个 React Native 视图,它从麦克风录音,并在录音的同时绘制实时波形。它负责语音消息功能中“录”的那一半:用户录音,可以先回放再接着录,你最终拿到一个完整的音频文件,以及一份由 64 条波形组成的音量摘要,用来显示在聊天气泡里。
所有逐帧运行的工作都在原生端完成。麦克风电平由 Swift(AVAudioRecorder)和 Kotlin(MediaRecorder 或 AudioRecord)读取,波形条由原生视图绘制。JavaScript 只通过 ref 发送命令并接收事件。
功能
| 功能 | 参阅 |
|---|---|
| 实时波形,可配置波形条、颜色、计时和占位标记 | 属性 |
| 暂停与继续、带拖动定位的预览、预览后继续录音 | 分段、暂停与预览 |
| 左滑取消和上滑锁定 | 滑动手势 |
| 安静一段时间后触发事件,可选自动停止 | 静音检测 |
输出 m4a、aac、wav 和 opus,并提供 64 条波形用于聊天气泡 | 导出数据与播放器 |
| 录音时输出 16 位 PCM 数据块 | PCM 流 |
| 后台录音 | 平台说明 |
平台
| 支持情况 | |
|---|---|
| iOS | 支持(Swift、AVFoundation)。最低版本跟随你使用的 React Native 版本。 |
| Android | 支持(Kotlin),API 24 及以上。opus 格式需要 API 29。 |
| 新架构(Fabric) | 必需。没有旧架构实现。 |
| Expo | 开发构建和 expo prebuild,提供配置插件。不支持 Expo Go。 |
| Web | 不支持。在 Web 上渲染该视图会抛出错误。 |
除 React Native 本身外,本库没有任何 JavaScript 依赖。
整体流程
- 渲染
<WaveformRecorderView>,并在style中设置高度,例如height: 56。 - 在录音按钮里调用
ref.current?.start()。本库会先申请麦克风权限。 - 录音过程中,视图绘制波形条并触发
onMeter。你可以调用pause()、resume(),调用enterPreview()回放,或调用cancel()。 - 调用
stop()。视图完成文件写入,并触发onComplete,带上file://URI、时长、大小、格式和 64 个samples。 - 用 react-native-waveform-player 展示结果,传入 URI 和
samples。
取消或卸载前先保存文件
cancel() 以及把视图从屏幕上移除,都会删除本次录音会话的文件。如果录音没有经过“预览后继续录音”这一步,被删除的文件就包括 onComplete 交给你的那个文件。如果之后还要用,请在 onComplete 中复制或移动文件。参阅导出数据与播放器。