# @mt-utils/xunfei-lat

一个用于音频录制、处理、分割和通过网络请求发送音频数据的语音处理库。

## 特点

- 支持音频录制和播放。
- 提供音频数据处理和编码转换。
- 实现音频数据分割，支持分块发送。
- 通过网络请求发送音频数据，并处理响应。
- 使用事件驱动模型来解耦各个组件。

## 安装

```bash
pnpm install @mt-utils/xunfei-lat
```

### 配置系统参数

配置必要的系统参数，这些参数通常在讯飞开放平台申请：

```javascript
/**
 * 平台系统配置
 */
const systemConfig = {
  /**
   * 在平台申请的密钥信息
   */
  API_SECRET: 'your_api_secret',
  /**
   * 在平台申请的APPID信息
   */
  APPID: 'your_appid',
  /**
   * 在平台申请的API_KEY信息
   */
  API_KEY: 'your_api_key'
}

// 配置系统参数
LatController.config(systemConfig)
```

### 创建实例

创建 `LatController` 实例，并配置业务参数：

```javascript
/**
 * 创建LatController实例
 */
const latRequestParams = {
  /**
   * 语种
   * - 'zh_cn': 中文（支持简单的英文识别）
   * - 'en_us': 英文
   * - 其他小语种参数值需在控制台添加试用或购买后显示
   */
  language: 'zh_cn',

  /**
   * 应用领域
   * - 'iat': 日常用语
   * - 'medical': 医疗
   * - 'gov-seat-assistant': 政务坐席助手
   * - 'seat-assistant': 金融坐席助手
   * - 'gov-ansys': 政务语音分析
   * - 'gov-nav': 政务语音导航
   * - 'fin-nav': 金融语音导航
   * - 'fin-ansys': 金融语音分析
   */
  domain: 'iat',

  /**
   * 方言，当前仅在language为中文时，支持方言选择。
   * - 'mandarin': 中文普通话、其他语种
   * - 其他方言参数值需在控制台添加试用或购买后显示
   */
  accent: 'mandarin',

  /**
   * 用于设置后端点检测的静默时间，单位是毫秒。
   * 默认2000（小语种除外，小语种不设置该参数默认为未开启VAD）。
   */
  vad_eos: 3600000,

  /**
   * 动态修正（仅中文普通话支持）
   * - 'wpgs': 开启流式结果返回功能
   */
  dwa: 'wpgs',

  /**
   * 领域个性化参数（仅中文支持）
   * - 'game': 游戏
   * - 'health': 健康
   * - 'shopping': 购物
   * - 'trip': 旅行
   */
  pd: 'game',

  /**
   * 是否开启标点符号添加（仅中文支持）
   * - 1: 开启（默认值）
   * - 0: 关闭
   */
  ptt: 1,

  /**
   * 字体（仅中文支持）
   * - 'zh-cn': 简体中文（默认值）
   * - 'zh-hk': 繁体香港
   */
  rlang: 'zh-cn',

  /**
   * 返回子句结果对应的起始和结束的端点帧偏移值。
   * - 0: 关闭（默认值）
   * - 1: 开启
   */
  vinfo: 0,

  /**
   * 数字格式规则为阿拉伯数字格式（中文普通话和日语支持）
   * - 0: 关闭
   * - 1: 开启（默认值）
   */
  nunum: 1,

  /**
   * speex音频帧长，仅在speex音频时使用
   * - 1: 当speex编码为标准开源speex编码时必须指定
   * - 2: 当speex编码为讯飞定制speex编码时不要设置
   */
  speex_size: 1,

  /**
   * 获取在发音相似时的句子多侯选结果。
   * 取值范围[1,5]，设置多候选会影响性能，响应时间延迟200ms左右。
   */
  nbest: 1,

  /**
   * 获取在发音相似时的词语多侯选结果。
   * 取值范围[1,5]，设置多候选会影响性能，响应时间延迟200ms左右。
   */
  wbest: 1
}

/**
*
*/
const sectionDelayParams = {

  /**
   * 是否自动控制延迟
   */
  autoControl: true,


  /**
   * 第一次延迟时间
   */
  initialDelay: 3000,

  /**
   * 后续延迟时间
   */
  subsequentDelay: 1000,


  /**
   * 识别为内容空是否继续延迟识别
   */
  isKeepRecognizingOnEmpty: true
};



const latInstance = LatController.create(latRequestParams，sectionDelayParams)
```

### 可用方法

#### 开始录音

> `latInstance.start()`

开始录音和识别

##### 例子

```javascript
latInstance.start()
```

#### 结束录音

> `latController.finish()`

停止录音和识别

##### 例子

```javascript
latInstance.finish()
```

### 应用钩子

应用钩子事件允许您在特定时刻执行自定义逻辑。

| 钩子名称        | 触发时机                                                               | 描述                               |
| :-------------- | :--------------------------------------------------------------------- | :--------------------------------- |
| `appCreate`     | 应用和所有的处理器被创建初始化时触发。                                 | 应用和所有的处理器被创建并初始化。 |
| `appStart`      | 第一个处理器进入运行状态时触发，也就是有一条源数据进入了第一个处理器。 | 第一个处理器开始处理数据。         |
| `appFinish`     | 应用被停止时触发。                                                     | 应用的所有处理器都已停止运行。     |
| `appResultText` | 识别结果事件触发。                                                     | 处理识别到的文本结果。             |

#### `appCreate`

当应用及其所有处理器被创建并初始化时，此事件被触发：

```javascript
latInstance.on('appCreate', () => {
  console.log('应用及其处理器已成功创建并初始化。')
})
```

#### `appStart`

当第一个处理器接收到源数据并开始运行时，此事件被触发：

```javascript
latInstance.on('appStart', () => {
  console.log('第一个处理器已接收到数据并开始处理。')
})
```

#### `appFinish`

当应用的所有处理器完成工作，应用被停止时，此事件被触发：

```javascript
latInstance.on('appFinish', () => {
  console.log('应用已停止运行，所有处理器均已完成工作。')
})
```

#### `appResultText`

当应用处理并识别出文本结果时，此事件被触发：

```javascript
latInstance.on('appResultText', () => {
  console.log('应用已输出识别到的文本结果。')
})
```

### 参数与类型

#### SystemConfig

| 参数         | 描述                    |
| :----------- | :---------------------- |
| `API_SECRET` | 在平台申请的密钥信息    |
| `APPID`      | 在平台申请的APPID信息   |
| `API_KEY`    | 在平台申请的API_KEY信息 |

#### LatRequestParams

| 参数         | 描述                                                 | 可选值                                           | 默认值       |
| :----------- | :--------------------------------------------------- | :----------------------------------------------- | :----------- |
| `language`   | 语种                                                 | `'zh_cn'`, `'en_us'`, 其他小语种                 | `'zh_cn'`    |
| `domain`     | 应用领域                                             | `'iat'`, `'medical'`, `'gov-seat-assistant'`, 等 | `'iat'`      |
| `accent`     | 方言                                                 | `'mandarin'`, 其他方言                           | `'mandarin'` |
| `vad_eos`    | 后端点检测的静默时间，单位毫秒                       | 任意正整数                                       | `2000`       |
| `dwa`        | 动态修正（仅中文普通话支持）                         | `'wpgs'`                                         | `'wpgs'`     |
| `pd`         | 领域个性化参数（仅中文支持）                         | `'game'`, `'health'`, `'shopping'`, `'trip'`     | `'game'`     |
| `ptt`        | 是否开启标点符号添加（仅中文支持）                   | `1`, `0`                                         | `1`          |
| `rlang`      | 字体（仅中文支持）                                   | `'zh-cn'`, `'zh-hk'`                             | `'zh-cn'`    |
| `vinfo`      | 返回子句结果对应的起始和结束的端点帧偏移值           | `0`, `1`                                         | `0`          |
| `nunum`      | 数字格式规则为阿拉伯数字格式（中文普通话和日语支持） | `0`, `1`                                         | `1`          |
| `speex_size` | speex音频帧长，仅在speex音频时使用                   | `1`, `2`                                         | `1`          |
| `nbest`      | 获取在发音相似时的句子多侯选结果                     | `[1,5]`                                          | `1`          |
| `wbest`      | 获取在发音相似时的词语多侯选结果                     | `[1,5]`                                          | `1`          |

#### SectionDelayParams

| 参数                       | 描述                         | 类型      | 默认值  |
| :------------------------- | :--------------------------- | :-------- | :------ |
| `autoControl`              | 是否自动控制延迟             | `boolean` | `true`  |
| `initialDelay`             | 第一次延迟时间               | `number`  | `3000`  |
| `subsequentDelay`          | 后续延迟时间                 | `number`  | `1000`  |
| `isKeepRecognizingOnEmpty` | 识别为内容空是否继续延迟识别 | `boolean` | `false` |

## 注意

本工具库为内部工具库，不负责改BUG，请勿随便下载。