bricks/docs/cn/webspeech.md
2025-10-12 17:59:59 +08:00

240 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# WebTTS 与 WebASR 模块技术文档
---
## 简介
`bricks.WebTTS``bricks.WebASR` 是基于浏览器原生 API 实现的语音合成Text-to-Speech, TTS和语音识别Automatic Speech Recognition, ASR组件。它们扩展自 `bricks.VBox`,可用于在 Web 应用中集成语音输入与输出功能。
这些模块依赖于现代浏览器提供的 `SpeechSynthesis``SpeechRecognition` API适用于支持这些特性的主流浏览器。
---
## 1. `bricks.WebTTS` - 文本转语音组件
### 类定义
```js
class bricks.WebTTS extends bricks.VBox
```
### 构造函数
```js
constructor(opts)
```
- **参数**
- `opts` (Object): 传递给父类 `VBox` 的配置选项。
- **说明**:调用父类构造函数初始化组件。
### 方法:`speak(text)`
触发文本到语音的合成功能。
#### 参数
| 参数名 | 类型 | 描述 |
|--------|--------|--------------------|
| text | String | 要朗读的文本内容 |
#### 功能描述
- 检查当前浏览器是否支持 `speechSynthesis` API。
- 创建一个 `SpeechSynthesisUtterance` 对象,并设置以下属性:
- `lang`: 使用 `bricks.app.lang` 设置语言。
- `pitch`: 音调设为 1正常
- `rate`: 语速设为 1正常
- 注册事件回调:
- `onstart`: 语音开始播放时输出日志。
- `onend`: 语音结束时输出日志。
- `onerror`: 出错时输出错误信息。
- 将语音任务加入系统队列并播放。
#### 示例代码
```js
const tts = new bricks.WebTTS();
tts.speak("你好,欢迎使用语音合成功能!");
```
#### 浏览器兼容性提示
若浏览器不支持 `speechSynthesis`,将在控制台打印错误:
```text
浏览器不支持SpeechSynthesis
```
> ⚠️ 注意:该功能在部分旧版或移动浏览器上可能受限,需确保运行环境支持。
---
## 2. `bricks.WebASR` - 语音识别组件
### 类定义
```js
class bricks.WebASR extends bricks.VBox
```
### 构造函数
```js
constructor(opts)
```
- **参数**
- `opts` (Object): 传递给父类 `VBox` 的配置选项。
- **内部初始化**
- `this.recognition` 初始化为 `None`(注意:应为 `null``undefined`,此处可能存在拼写/语法错误)
> ❌ Bug 提示:`None` 在 JavaScript 中未定义,正确写法应为 `null`。
建议修正为:
```js
this.recognition = null;
```
### 方法:`start_recording()`
启动麦克风录音并进行实时语音识别。
#### 功能描述
- 检测浏览器是否支持 `SpeechRecognition` 接口。
- 若支持,则创建 `SpeechRecognition` 实例,并配置如下:
- `lang`: 使用 `bricks.app.lang` 设置识别语言。
- `onresult`: 当识别结果返回时,提取首个备选文本(`event.results[0][0].transcript`),并通过 `dispatch` 触发 `asr_result` 自定义事件。
- `onend`: 识别结束时输出日志。
- `onerror`: 发生错误时输出错误类型。
- 启动识别服务。
#### 示例代码
```js
const asr = new bricks.WebASR();
asr.start_recording();
// 监听识别结果
asr.on('asr_result', function(data) {
console.log('用户说:', data.content);
});
```
#### 控制台输出示例
```text
识别结果: 今天天气真好
```
#### 兼容性处理
如果浏览器不支持 `SpeechRecognition`,将输出:
```text
browser has not SpeechRecognition
```
> ⚠️ 注意Chrome 及基于 Chromium 的浏览器支持较好Safari 和 Firefox 支持有限或需要前缀。
---
### 方法:`stop_recording()`
停止正在进行的语音识别。
#### 功能描述
调用底层 `SpeechRecognition.stop()` 方法终止录音和识别过程。
#### 示例
```js
asr.stop_recording();
```
> ✅ 建议配合 UI 控件(如“按住说话”按钮)使用,在释放时调用此方法。
---
## 3. 工厂注册
这两个组件通过 `bricks.Factory` 进行注册,便于动态创建实例。
```js
bricks.Factory.register('WebTTS', bricks.WebTTS);
bricks.Factory.register('WebASR', bricks.WebASR);
```
### 用途
允许通过字符串名称来创建组件实例,例如(假设有工厂创建方法):
```js
let tts = bricks.Factory.create('WebTTS');
let asr = bricks.Factory.create('WebASR');
```
这提高了系统的可扩展性和解耦程度。
---
## 使用前提条件
### 1. 浏览器支持要求
| 特性 | 推荐浏览器 |
|------|------------|
| `SpeechSynthesis` | Chrome、Edge、Firefox、Safari部分支持 |
| `SpeechRecognition` | 主要支持 Chrome需 HTTPS 或 localhost |
> 🔒 安全限制:大多数浏览器要求页面运行在 **HTTPS** 或本地开发环境(`localhost`)下才能启用麦克风权限。
### 2. 语言设置依赖
组件使用全局变量:
```js
bricks.app.lang
```
请确保在应用启动时正确设置该值,例如:
```js
bricks.app.lang = 'zh-CN'; // 中文普通话
// 或
bricks.app.lang = 'en-US'; // 英语(美国)
```
常见语言代码参考:
- `zh-CN`: 中文(普通话)
- `en-US`: 英语(美式)
- `ja-JP`: 日语
- `ko-KR`: 韩语
---
## 已知问题与改进建议
| 问题 | 说明 | 建议修复 |
|------|------|---------|
| `None` 错误 | `this.reognition = None;` 是无效语法 | 改为 `this.recognition = null;` |
| 拼写错误 | `reognition``recognition` | 修正所有相关拼写 |
| 缺少权限请求处理 | 未显式请求麦克风权限 | 可增加 `navigator.mediaDevices.getUserMedia` 预检 |
| 事件作用域问题 | `onresult``this` 指向可能丢失 | 使用箭头函数或 `.bind(this)` |
### 推荐修复后的 `start_recording` 片段
```js
this.recognition.onresult = (event) => {
const transcript = event.results[0][0].transcript;
this.dispatch('asr_result', { content: transcript });
console.log('识别结果:', transcript);
};
```
---
## 总结
| 组件 | 功能 | 核心 API | 是否需要网络 | 是否需要麦克风 |
|------------|------------------|----------------------------|--------------|----------------|
| `WebTTS` | 文本转语音 | `SpeechSynthesis` | 否 | 否 |
| `WebASR` | 语音转文本 | `SpeechRecognition` | 是(云端) | 是 |
✅ 适用场景:
- 教育类应用中的发音朗读
- 智能助手对话界面
- 无障碍访问工具
- 语音指令控制系统
🚫 不适用场景:
- 无网络环境下离线高精度 ASR
- 低延迟工业级语音处理
---
## 参考链接
- [MDN: SpeechSynthesis](https://developer.mozilla.org/zh-CN/docs/Web/API/SpeechSynthesis)
- [MDN: SpeechRecognition](https://developer.mozilla.org/zh-CN/docs/Web/API/SpeechRecognition)
- [Google Chrome 语音识别限制说明](https://www.chromium.org/developers/design-documents/media/capture)
---
📝 **维护建议**:定期检查浏览器对 Web Speech API 的支持情况,并考虑降级方案(如接入第三方 SDK