Skip to content

事件 ​

所有事件都是 WaveformRecorderView 的属性。事件数据的类型见 API 参考。

事件数据触发时机
onStateChange{ state, durationMs }每次状态变化。
onMeter{ amplitude, peak, db }录音时每秒 meterUpdatesPerSecond 次。
onComplete见下文stop() 或自动停止后,最终文件写好时触发一次。
onMaxDurationReached无达到 maxDurationMs 时,在自动停止之前。
onPermissionDenied无start() 无法获得麦克风权限时。
onError{ message, code? }警告和失败,见错误 code。
onSeek{ positionMs }预览中拖动定位结束时,以及调用 seekPreview() 之后。
onPlaybackTimeUpdate{ positionMs, durationMs }预览音频播放时,每秒约 30 次。
onSlideProgress{ cancelProgress, lockProgress }录音时用户在视图上拖动期间。
onSlideCancel无每次拖动中越过取消阈值时触发一次。
onSlideLock无每次拖动中越过锁定阈值时触发一次。
onSilenceDetected{ durationMs }每段静音触发一次,参阅静音检测。
onPcmChunk{ chunk, sampleRate, channels, bytesPerSample, timestampMs }开启 PCM 流时约每 pcmChunkMs 一次,参阅 PCM 流。

onStateChange ​

state 取值为 'idle'、'recording'、'paused'、'preview'、'stopped' 或 'error'。durationMs 是目前为止已录制的时长,不包括暂停的时间。状态流转参阅分段、暂停与预览。

onMeter ​

字段含义
amplitude当前电平,范围 [0, 1],也就是最新一根波形条使用的值。
peak本次会话迄今为止最大的 amplitude。
db当前电平,单位 dBFS。0 为满刻度,越安静越负。

两个平台测量电平的方式不同,所以同一个声音会得到不同的数值。iOS 报告上一个采样周期的平均功率,并按 10^(db / 20) 映射,-60 dB 及以下一律显示为 0。Android 报告自上次采样以来的峰值,并取线性峰值的平方根。不要跨平台比较原始数值。

onComplete ​

字段类型含义
uristring录音文件的 file:// URI。
durationMsnumber录音时长,所有分段之和。
formatstring你设置的 output.format。
mimeTypestringMIME 类型,参阅格式。
sizeBytesnumber文件大小。
sampleRatenumber采样率,单位 Hz。
channelsnumber声道数。
samplesnumber[]64 个 [0, 1] 范围内的值,用于聊天气泡,参阅导出。
peakAmplitudenumber本次会话最大的电平 amplitude。

在什么都没录到、调用了 cancel(),或者录音被 minDurationMs 丢弃时,onComplete 不会触发。

错误 code ​

onError 既用于真正的失败,也用于提醒某个调用被忽略。请检查 code:

Code含义
start录音器无法启动,状态变为 'error'。
sessioniOS 无法配置音频会话,状态变为 'error'。
resumepause() 之后继续录音失败,状态变为 'error'。
media-recorderAndroid:录音过程中 MediaRecorder 报告了错误。
min-duration调用 stop() 时未达到 minDurationMs,录音已被丢弃。
preview-disabled在 enablePreview={false} 时调用了 enterPreview()。
continue-disabled在 enableContinueRecording={false} 时于预览中调用了 resume()。
preview-snapshot无法准备预览,例如还没有录到任何内容。
preview-load预览播放器无法加载音频。
concat合并分段失败。onComplete 仍会带着第一个分段触发,避免音频全部丢失。
format-unsupported在 API 29 以下的 Android 上请求了 opus,引擎改为录制 AAC。
pcm-streamiOS:PCM 流无法打开 WAV 文件。
background-capabilityiOS:开启了 backgroundRecording,但 UIBackgroundModes 中缺少 audio。只触发一次。

处于 'error' 状态时,调用 start() 会开始一个新会话。

基于 MIT 许可证发布。