提示词语音输入 PromptSpeech
Prompt 的语音输入由内置语音模块驱动,speechConfig 负责配置,PromptSpeechTrigger 负责开关,PromptSpeechPanel 负责录制面板。
基础使用
给 Prompt 传入 speechConfig 后,在工具栏中放置 PromptSpeechTrigger 即可开始录音。mode 为 'click' 时点击开始,面板的确认入口提交、取消入口放弃;为 'hold' 时按住面板说话,松开后自动提交。识别结果会写入 Prompt 的输入内容。
浏览器内置语音识别可能存在兼容性问题和对网络环境有要求。
Speech Mode
Ask anything
隐藏源代码
自定义识别
customRecognize 用于接管内置的语音识别,你可以接入自己的语音识别模型,或者直接把音频交给服务器处理。
下面的例子通过 Transformers.js 在浏览器本地运行 Whisper tiny 模型,对录音做本地转写;模型和运行时在页面加载时从 CDN 下载(首次合计约 45MB 流量,之后使用浏览器缓存),音频不会离开浏览器。
示例把 acceptTimeout 设为 -1,由自定义识别在转写完成后调用 end()。
Ask anything
隐藏源代码
API
PromptSpeechTriggerSlots
| 插槽 | 参数 | 描述 | 版本 |
|---|---|---|---|
| trigger | toggle: () => void, recording: boolean, disabled: boolean | 语音开关区域,替换内置的按钮。 | 0.2.1 |
| icon | recording: boolean | 语音开关的图标。 | 0.2.1 |
PromptSpeechPanelSlots
| 插槽 | 参数 | 描述 | 版本 |
|---|---|---|---|
| cancel | speech: PromptSpeechScope | 语音录制面板的取消入口。 | 0.2.1 |
| visualizer | speech: PromptSpeechScope | 语音录制面板的波形区域。 | 0.2.1 |
| text | speech: PromptSpeechScope | 语音识别的实时文本区域。 | 0.2.1 |
| accept | speech: PromptSpeechScope | 语音录制面板的确认入口。 | 0.2.1 |
PromptSpeechConfig 是 speechConfig 的类型,包含以下属性与嵌套配置类型。
PromptSpeechSpectrum
| 属性 | 类型 | 可选 | 默认值 | 描述 | 版本 |
|---|---|---|---|---|---|
| minHz | number | 是 | 400 | 频谱分析的最低频率。 | 0.2.1 |
| maxHz | number | 是 | 8000 | 频谱分析的最高频率。 | 0.2.1 |
| minDb | number | 是 | -80 | 映射为最小高度的分贝值。 | 0.2.1 |
| maxDb | number | 是 | -25 | 映射为最大高度的分贝值。 | 0.2.1 |
| smoothing | number | 是 | 0.5 | 频谱变化的平滑系数。 | 0.2.1 |
| fftSize | number | 是 | 2048 | 频谱分析使用的采样窗口大小。 | 0.2.1 |
PromptSpeechBarConfig
| 属性 | 类型 | 可选 | 默认值 | 描述 | 版本 |
|---|---|---|---|---|---|
| count | number | 是 | 36 | 波形柱的数量。 | 0.2.1 |
| minHeight | number | 是 | 4 | 波形柱的最小高度。 | 0.2.1 |
| maxHeight | number | 是 | 48 | 波形柱的最大高度。 | 0.2.1 |
PromptSpeechConfig
| 属性 | 类型 | 可选 | 默认值 | 描述 | 版本 |
|---|---|---|---|---|---|
| mode | PromptSpeechMode | 是 | 'click' | 语音识别的交互方式。 | 0.2.1 |
| lang | string | 是 | | 浏览器内置语音识别的语言设置,取值为 BCP 47 语言标签,合法值见 BCP 47 语言标签。 | 0.2.1 |
| barConfig | PromptSpeechBarConfig | 是 | | 波形柱的配置。 | 0.2.1 |
| spectrumConfig | PromptSpeechSpectrum | 是 | | 音频频谱的配置。 | 0.2.1 |
| customRecognize | CustomRecognize | 是 | | 自定义的识别过程,接管内置的语音识别。 | 0.2.1 |
| acceptTimeout | number | 是 | 3000 | 确认录制后等待识别结果的最长时间。 | 0.2.1 |
PromptSpeechScope
| 属性 | 类型 | 可选 | 默认值 | 描述 | 版本 |
|---|---|---|---|---|---|
| mode | PromptSpeechMode | 否 | | 当前的语音交互方式。 | 0.2.1 |
| recording | boolean | 否 | | 是否处于录音会话中。 | 0.2.1 |
| live | boolean | 否 | | 是否正在实时录音;按住模式下未按下时为 false。 | 0.2.1 |
| committing | boolean | 否 | | 是否已确认录音并等待识别结果。 | 0.2.1 |
| disabled | boolean | 否 | | 语音输入是否不可用。 | 0.2.1 |
| supported | boolean | 否 | | 浏览器是否支持内置语音识别。 | 0.2.1 |
| text | string | 否 | | 当前的识别文本。 | 0.2.1 |
| pending | boolean | 否 | | 识别文本是否为未定稿的临时结果。 | 0.2.1 |
| levels | number[] | 否 | | 波形柱的实时电平,取值 0 到 1。 | 0.2.1 |
| source | 'microphone' | 'simulated' | null | 否 | | 波形电平的来源。microphone 表示来自麦克风的实时频谱,simulated 表示由动画模拟生成的电平,null 表示没有电平来源。 | 0.2.1 |
| barConfig | Required<PromptSpeechBarConfig> | 否 | | 实际生效的波形柱配置,已应用默认值。 | 0.2.1 |
| enter | () => void | 否 | | 开始录音。 | 0.2.1 |
| cancel | () => void | 否 | | 放弃本次录音。 | 0.2.1 |
| accept | () => void | 否 | | 确认录音并提交识别结果。 | 0.2.1 |
| press | () => void | 否 | | 按住模式下按下。 | 0.2.1 |
| release | () => void | 否 | | 按住模式下松开。 | 0.2.1 |
ts
export type PromptSpeechScope = {
mode: PromptSpeechMode
recording: boolean
live: boolean
committing: boolean
disabled: boolean
supported: boolean
text: string
pending: boolean
levels: number[]
source: 'microphone' | 'simulated' | null
barConfig: Required<PromptSpeechBarConfig>
enter: () => void
cancel: () => void
accept: () => void
press: () => void
release: () => void
}PromptSpeechMode
ts
export type PromptSpeechMode = 'click' | 'hold'CustomRecognizeOptions
ts
export interface CustomRecognizeOptions {
stream: MediaStream | null
audio: () => Promise<Blob | null>
setText: (text: string, final?: boolean) => void
end: () => void
onAccept: (handler: () => void) => void
onClose: (handler: (committed: boolean) => void) => void
}
export type CustomRecognize = (options: CustomRecognizeOptions) => void