3.2 KiB
3.2 KiB
VadText
用于实现语音识别(ASR)功能的复合控件,结合了麦克风音频采集、端点检测(VAD)、音频播放和文本显示功能。用户点击按钮开始录音,当检测到语音结束时自动发送音频至后端进行识别,并将识别结果实时追加显示在文本区域中。
类型: 普通控件(继承自 bricks.VBox)
主要方法
-
start()
启动语音识别流程,初始化 MicVAD 实例并开始监听麦克风输入。 -
_start()(async)
异步内部方法,创建MicVAD实例并设置onSpeechEnd回调,在检测到语音结束后触发audio_ready事件。 -
stop()
停止当前的语音识别过程,暂停 VAD 并清理状态。 -
_stop()(async)
异步停止逻辑,调用 VAD 的pause()方法,清除引用,并在有文本内容时派发changed事件。 -
toggle_status()
切换录音状态:若正在录音则停止,否则启动录音。 -
handle_audio(audio)(async)
处理 VAD 捕获的音频数据:- 将
Float32Array格式的音频转换为 WAV ArrayBuffer - 编码为 Base64 数据 URL 并在内嵌播放器中播放
- 发送 Base64 音频到指定 URL 进行 ASR 识别
- 更新识别文本并触发界面刷新
- 将
-
arrayBufferToBase64(buffer)
将 ArrayBuffer 转换为 Base64 字符串,用于构建data:URL。 -
getValue()
获取当前控件的输出值,返回一个对象,键为this.name,值为累计识别文本。
主要事件
-
audio_ready
当 VAD 检测到一段语音结束并捕获音频数据后触发,携带原始音频数据(Float32Array),用于后续处理。 -
changed
当一次录音完成且识别出文本内容不为空时触发,携带当前完整识别结果(通过getValue()获取)。通常用于表单提交或数据同步。
源码例子
{
"id": "vad_text_widget",
"widgettype": "VadText",
"options": {
"url": "/api/asr/recognize", // ASR服务接口地址
"model": "whisper-small", // 可选模型参数
"name": "user_speech" // 表单字段名,getValue时使用
},
"binds": [
{
"actiontype": "event",
"wid": "vad_text_widget",
"event": "changed",
"target": "form_container",
"dispatch_event": "field_changed",
"params": {
"source": "vad_text_widget"
},
"rtdata": {
"component": "asr_input"
}
},
{
"actiontype": "bricks",
"wid": "vad_text_widget",
"event": "audio_ready",
"target": "status_label",
"mode": "replace",
"options": {
"widgettype": "Label",
"options": {
"text": "正在识别..."
}
}
}
]
}
注释说明:
widgettype: "VadText"是注册过的自定义控件。options.url是必须项,指向后端提供 ASR 功能的 API 接口。binds中第一个绑定监听changed事件,向父容器派发field_changed自定义事件,可用于通知表单更新。- 第二个绑定在
audio_ready触发时替换某个标签控件的内容,提示“正在识别”,增强用户体验。- 此控件适合嵌入表单、语音助手、语音输入等场景。