@mingto/xunfei-lat 2.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,234 @@
1
+ # @minto-ai/xunfei-lat
2
+
3
+ 一个用于音频录制、处理、分割和通过网络请求发送音频数据的语音处理库。
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ pnpm install @minto-ai/xunfei-lat
9
+ ```
10
+
11
+ ## 使用
12
+
13
+ ### 配置系统参数
14
+
15
+ 配置必要的系统参数,这些参数通常在讯飞开放平台申请:
16
+
17
+ ```javascript
18
+ /**
19
+ * 平台系统配置
20
+ */
21
+ const systemConfig = {
22
+ /**
23
+ * 在平台申请的密钥信息
24
+ */
25
+ API_SECRET: 'your_api_secret',
26
+ /**
27
+ * 在平台申请的APPID信息
28
+ */
29
+ APPID: 'your_appid',
30
+ /**
31
+ * 在平台申请的API_KEY信息
32
+ */
33
+ API_KEY: 'your_api_key'
34
+ }
35
+
36
+ // 配置系统参数
37
+ LatController.config(systemConfig)
38
+ ```
39
+
40
+ ### 创建实例
41
+
42
+ 创建 `LatController` 实例,并配置业务参数:
43
+
44
+ ```javascript
45
+ /**
46
+ * 创建LatController实例
47
+ */
48
+ const BusinessParams = {
49
+ /**
50
+ * 语种
51
+ * - 'zh_cn': 中文(支持简单的英文识别)
52
+ * - 'en_us': 英文
53
+ * - 其他小语种参数值需在控制台添加试用或购买后显示
54
+ */
55
+ language: 'zh_cn',
56
+
57
+ /**
58
+ * 应用领域
59
+ * - 'iat': 日常用语
60
+ * - 'medical': 医疗
61
+ * - 'gov-seat-assistant': 政务坐席助手
62
+ * - 'seat-assistant': 金融坐席助手
63
+ * - 'gov-ansys': 政务语音分析
64
+ * - 'gov-nav': 政务语音导航
65
+ * - 'fin-nav': 金融语音导航
66
+ * - 'fin-ansys': 金融语音分析
67
+ */
68
+ domain: 'iat',
69
+
70
+ /**
71
+ * 方言,当前仅在language为中文时,支持方言选择。
72
+ * - 'mandarin': 中文普通话、其他语种
73
+ * - 其他方言参数值需在控制台添加试用或购买后显示
74
+ */
75
+ accent: 'mandarin',
76
+
77
+ /**
78
+ * 用于设置后端点检测的静默时间,单位是毫秒。
79
+ * 默认2000(小语种除外,小语种不设置该参数默认为未开启VAD)。
80
+ */
81
+ vad_eos: 3600000,
82
+
83
+ /**
84
+ * 动态修正(仅中文普通话支持)
85
+ * - 'wpgs': 开启流式结果返回功能
86
+ */
87
+ dwa: 'wpgs',
88
+
89
+ /**
90
+ * 领域个性化参数(仅中文支持)
91
+ * - 'game': 游戏
92
+ * - 'health': 健康
93
+ * - 'shopping': 购物
94
+ * - 'trip': 旅行
95
+ */
96
+ pd: 'game',
97
+
98
+ /**
99
+ * 是否开启标点符号添加(仅中文支持)
100
+ * - 1: 开启(默认值)
101
+ * - 0: 关闭
102
+ */
103
+ ptt: 1,
104
+
105
+ /**
106
+ * 字体(仅中文支持)
107
+ * - 'zh-cn': 简体中文(默认值)
108
+ * - 'zh-hk': 繁体香港
109
+ */
110
+ rlang: 'zh-cn',
111
+
112
+ /**
113
+ * 返回子句结果对应的起始和结束的端点帧偏移值。
114
+ * - 0: 关闭(默认值)
115
+ * - 1: 开启
116
+ */
117
+ vinfo: 0,
118
+
119
+ /**
120
+ * 数字格式规则为阿拉伯数字格式(中文普通话和日语支持)
121
+ * - 0: 关闭
122
+ * - 1: 开启(默认值)
123
+ */
124
+ nunum: 1,
125
+
126
+ /**
127
+ * speex音频帧长,仅在speex音频时使用
128
+ * - 1: 当speex编码为标准开源speex编码时必须指定
129
+ * - 2: 当speex编码为讯飞定制speex编码时不要设置
130
+ */
131
+ speex_size: 1,
132
+
133
+ /**
134
+ * 获取在发音相似时的句子多侯选结果。
135
+ * 取值范围[1,5],设置多候选会影响性能,响应时间延迟200ms左右。
136
+ */
137
+ nbest: 1,
138
+
139
+ /**
140
+ * 获取在发音相似时的词语多侯选结果。
141
+ * 取值范围[1,5],设置多候选会影响性能,响应时间延迟200ms左右。
142
+ */
143
+ wbest: 1
144
+ }
145
+
146
+ /**
147
+ *
148
+ */
149
+ const sectionDelayParams = {
150
+
151
+ /**
152
+ * 是否自动控制延迟
153
+ */
154
+ autoControl: true,
155
+
156
+ /**
157
+ * 第一次延迟时间
158
+ */
159
+ initialDelay: 3000,
160
+
161
+ /**
162
+ * 后续延迟时间
163
+ */
164
+ subsequentDelay: 1000,
165
+ }
166
+
167
+ const latInstance = LatController.create(BusinessParams, sectionDelayParams)
168
+ ```
169
+
170
+ ### 可用方法
171
+
172
+ #### 开始录音
173
+
174
+ ```js
175
+ latInstance.start()
176
+ ```
177
+
178
+ #### 智能语音监听
179
+
180
+ ```js
181
+ latInstance.watch()
182
+ ```
183
+
184
+ 监听浏览器音频输入,当检测到音量大于20%且系统处于离线状态时自动启动录音和识别。
185
+
186
+ #### 结束录音
187
+
188
+ ```js
189
+ latController.finish()
190
+ ```
191
+
192
+ ### 应用钩子
193
+
194
+ 应用钩子事件允许您在特定时刻执行自定义逻辑。
195
+
196
+ | 钩子名称 | 触发时机 | 描述 |
197
+ | :---------------- | :--------------------------------- | :----------------------------- |
198
+ | `appFinish` | 应用被停止时触发。 | 应用的所有处理器都已停止运行。 |
199
+ | `appResultText` | 识别结果事件触发。 | 处理识别到的文本结果。 |
200
+ | `appResponseText` | 单词识别触发,也就是应用过程中触发 |
201
+
202
+ #### `appFinish`
203
+
204
+ 当应用的所有处理器完成工作,应用被停止时,此事件被触发:
205
+
206
+ ```javascript
207
+ latInstance.on('appFinish', () => {
208
+ console.log('应用已停止运行,所有处理器均已完成工作。')
209
+ })
210
+ ```
211
+
212
+ #### `appResultText`
213
+
214
+ 当应用处理并识别出文本结果时,此事件被触发:
215
+
216
+ ```javascript
217
+ latInstance.on('appResultText', () => {
218
+ console.log('应用已输出识别到的文本结果。')
219
+ })
220
+ ```
221
+
222
+ #### `appResponseText`
223
+
224
+ 当应用过程中触发,也就是应用过程中触发
225
+
226
+ ```javascript
227
+ latInstance.on('appResponseText', () => {
228
+ console.log('应用已输出识别到的文本结果。')
229
+ })
230
+ ```
231
+
232
+ ## 注意
233
+
234
+ 本工具库为内部工具库,不负责改BUG,请勿随便下载。
@@ -0,0 +1,3 @@
1
+ import { default as ParallelHandler } from './parallel-handler';
2
+ import { default as SerialHandler } from './serial-handler';
3
+ export { ParallelHandler, SerialHandler, };
@@ -0,0 +1,76 @@
1
+ import { ParallelTaskItem, ParallelHandlerStatus } from '../types';
2
+ import { BaseHandler } from '../core';
3
+ /**
4
+ * 并行任务处理器 - 并行处理队列中的任务
5
+ *
6
+ * 特点:
7
+ * - 支持并行执行任务
8
+ * - 支持任务执行前的自定义条件检查
9
+ * - 实现完整的生命周期管理(激活、待机、执行、成功、销毁)
10
+ * - 可与其他处理器组成处理链
11
+ *
12
+ * 使用场景:
13
+ * - 需要并行执行的任务处理
14
+ * - 资源充足且任务独立的场景
15
+ */
16
+ declare abstract class ParallelFactory<O, R> extends BaseHandler<O, R> {
17
+ /**
18
+ * 获取待处理任务数量
19
+ */
20
+ protected taskQueue: Array<ParallelTaskItem<O>>;
21
+ /**
22
+ * 当前处理器状态
23
+ */
24
+ handlerStatus: ParallelHandlerStatus;
25
+ /**
26
+ * 当前正在执行的任务ID数组
27
+ */
28
+ protected executingTaskIds: string[];
29
+ /**
30
+ * 待处理任务队列
31
+ */
32
+ get taskQueueLength(): number;
33
+ constructor();
34
+ /**
35
+ * 检查任务执行条件
36
+ * 子类可重写此方法,实现自定义的任务执行前置条件检查
37
+ *
38
+ * @returns {boolean} - 当满足执行条件时返回 true,否则返回 false
39
+ */
40
+ executePreCheck(): boolean;
41
+ /**
42
+ * 触发处理器激活行为(空闲状态 => 激活状态)
43
+ */
44
+ triggerHandlerActive(): void;
45
+ /**
46
+ * 触发处理器待机行为(激活状态 => 待执行状态)
47
+ */
48
+ triggerHandlerPending(): void;
49
+ /**
50
+ * 触发处理器执行行为(激活状态 => 执行状态)
51
+ */
52
+ triggerHandlerExecute(): Promise<void>;
53
+ handle(original: O): void;
54
+ /**
55
+ * 处理队列
56
+ */
57
+ taskCompletedCallback(uuid: string): void;
58
+ /**
59
+ * 批量处理任务完成回调
60
+ * 清空当前记录的执行任务ID数组,并标记所有相关任务为已完成
61
+ */
62
+ batchTaskCompletedCallback(isLastExecute?: boolean): void;
63
+ /**
64
+ * 触发处理器成功行为(执行状态 => 成功状态)
65
+ */
66
+ triggerHandlerCompleted(): void;
67
+ /**
68
+ * 触发处理器销毁行为(待机状态 => 销毁状态)
69
+ */
70
+ triggerHandlerFinish(): void;
71
+ /**
72
+ * 触发应用被销毁行为
73
+ */
74
+ triggerAppFinish(): void;
75
+ }
76
+ export default ParallelFactory;
@@ -0,0 +1,68 @@
1
+ import { SerialTaskItem, SerialHandlerStatus } from '../types';
2
+ import { BaseHandler } from '../core';
3
+ /**
4
+ * 串行任务处理器 - 按顺序处理队列中的任务
5
+ *
6
+ * 特点:
7
+ * - 使用先进先出(FIFO)队列管理待处理任务
8
+ * - 支持任务执行前的自定义条件检查
9
+ * - 实现完整的生命周期管理(激活、待机、执行、成功、销毁)
10
+ * - 可与其他处理器组成处理链
11
+ *
12
+ * 使用场景:
13
+ * - 需要顺序执行的任务处理
14
+ * - 资源有限需要排队执行的场景
15
+ * - 需要严格控制执行顺序的业务流程
16
+ */
17
+ declare abstract class SerialHandler<O, R> extends BaseHandler<O, R> {
18
+ /**
19
+ * 待处理任务队列
20
+ */
21
+ protected taskQueue: Array<SerialTaskItem<O>>;
22
+ /**
23
+ * 当前处理器状态
24
+ */
25
+ handlerStatus: SerialHandlerStatus;
26
+ /**
27
+ * 获取待处理任务数量
28
+ */
29
+ get taskQueueLength(): number;
30
+ constructor();
31
+ /**
32
+ * 检查任务执行条件
33
+ * 子类可重写此方法,实现自定义的任务执行前置条件检查
34
+ *
35
+ * @returns {boolean} - 当满足执行条件时返回 true,否则返回 false
36
+ */
37
+ executePreCheck(): boolean;
38
+ /**
39
+ * 触发处理器激活行为(空闲状态 => 激活状态)
40
+ */
41
+ triggerHandlerActive(): void;
42
+ /**
43
+ * 触发处理器待机行为(激活状态 => 待执行状态 执行状态 => 待执行状态)
44
+ */
45
+ triggerHandlerPending(): void;
46
+ /**
47
+ * 触发处理器执行行为(激活状态 => 执行状态)
48
+ */
49
+ triggerHandlerExecute(): void;
50
+ /**
51
+ * 触发处理器成功行为(执行状态 => 成功状态)
52
+ */
53
+ triggerHandlerCompleted(): void;
54
+ /**
55
+ * 触发处理器销毁行为(待机状态 => 销毁状态)
56
+ */
57
+ triggerHandlerFinish(): void;
58
+ /**
59
+ * 触发应用被销毁行为
60
+ */
61
+ triggerAppFinish(): void;
62
+ /**
63
+ * 任务完成后的回调函数。
64
+ */
65
+ taskCompletedCallback(): void;
66
+ handle(original: O | null): void;
67
+ }
68
+ export default SerialHandler;
@@ -0,0 +1,22 @@
1
+ import { default as ExecuteController } from '../../lat-controller';
2
+ import { TaskExecuteContext } from '../types';
3
+ import { InterfaceHandler } from './index';
4
+ import { default as HandlerLife } from './life-handler';
5
+ declare abstract class BaseHandler<O, R> extends HandlerLife implements InterfaceHandler<O, R> {
6
+ nextHandler: InterfaceHandler<R, unknown> | null;
7
+ prevHandler: InterfaceHandler<unknown, O> | null;
8
+ executeController: ExecuteController | null;
9
+ abstract handlerStatus: any;
10
+ isFirstExecute: boolean;
11
+ setExecuteController(executeController: ExecuteController): void;
12
+ linkHandler(nextHandler: InterfaceHandler<R, unknown>): void;
13
+ get isLastHandler(): boolean;
14
+ get isFirstHandler(): boolean;
15
+ abstract handle(original: O | null): void;
16
+ forwardToHandler(result: R): void;
17
+ setHandlerStatus(status: any): void;
18
+ equalHandlerStatus(status: any): boolean;
19
+ abstract execute(context: TaskExecuteContext): void;
20
+ isHandleDataAcceptedComplete: boolean;
21
+ }
22
+ export default BaseHandler;
@@ -0,0 +1,4 @@
1
+ import { default as InterfaceHandler } from './interface-handler';
2
+ import { default as BaseHandler } from './base-handler';
3
+ export { BaseHandler, };
4
+ export type { InterfaceHandler, };
@@ -0,0 +1,75 @@
1
+ import { default as ExecuteController } from '../../lat-controller';
2
+ import { TaskExecuteContext } from '../types';
3
+ interface InterfaceHandler<O = unknown, R = unknown> {
4
+ /**
5
+ * 下一个处理器
6
+ * 链表中的下一个处理器,如果是链表中的最后一个处理器,则为null。
7
+ */
8
+ nextHandler: InterfaceHandler<R, unknown> | null;
9
+ /**
10
+ * 上一个处理器
11
+ * 链表中的上一个处理器,如果是链表中的第一个处理器,则为null。
12
+ */
13
+ prevHandler: InterfaceHandler<unknown, O> | null;
14
+ /**
15
+ * 当前处理器状态
16
+ */
17
+ handlerStatus: any;
18
+ /**
19
+ * 设置处理器链表,用于设置上一个或者下一个处理器
20
+ *
21
+ * @param handler 处理器
22
+ */
23
+ linkHandler: (handler: InterfaceHandler<R, unknown>) => void;
24
+ /**
25
+ * 处理器是否首次执行任务
26
+ */
27
+ isFirstExecute: boolean;
28
+ /**
29
+ * 处理器执行上下文
30
+ */
31
+ executeController: ExecuteController | null;
32
+ /**
33
+ * 设置处理器执行上下文
34
+ *
35
+ * @param executeController 执行上下文
36
+ */
37
+ setExecuteController: (executeController: ExecuteController) => void;
38
+ /**
39
+ * 是否为第一个处理器
40
+ */
41
+ isFirstHandler: boolean;
42
+ /**
43
+ * 是否为最后一个处理器
44
+ */
45
+ isLastHandler: boolean;
46
+ /**
47
+ * 向处理器输入任务数据
48
+ *
49
+ * @param original 任务数据
50
+ */
51
+ handle: (original: O | null) => void;
52
+ /**
53
+ * 将处理结果传递给下一个处理器,当做下一个处理器的任务数据
54
+ */
55
+ forwardToHandler: (result: R) => void;
56
+ /**
57
+ * 设置处理器的执行状态
58
+ */
59
+ setHandlerStatus: (status: any) => void;
60
+ /**
61
+ * 判断当前处理器是否处于指定执行状态
62
+ */
63
+ equalHandlerStatus: (status: any) => boolean;
64
+ /**
65
+ * 需要执行任务的具体逻辑
66
+ *
67
+ * @param context 当前执行者数据上下文(任务数据、是否首次执行、是否最后一次执行)
68
+ */
69
+ execute: (context: TaskExecuteContext) => void;
70
+ /**
71
+ * 处理器是否接受上一个处理传递的数据完毕
72
+ */
73
+ isHandleDataAcceptedComplete: boolean;
74
+ }
75
+ export default InterfaceHandler;
@@ -0,0 +1,19 @@
1
+ declare class LifeHandler {
2
+ /**
3
+ * 处理器被激活(首次激活触发)
4
+ */
5
+ protected onActive(): void;
6
+ /**
7
+ * 处理器首次执行任务之前
8
+ */
9
+ protected onBeforeFirstExecute(): void;
10
+ /**
11
+ * 处理器执行任务完成
12
+ */
13
+ protected onCompleted(): void;
14
+ /**
15
+ * 处理器执被销毁
16
+ */
17
+ protected onFinish(): void;
18
+ }
19
+ export default LifeHandler;
@@ -0,0 +1,2 @@
1
+ export * from './components';
2
+ export * from './types';
@@ -0,0 +1,136 @@
1
+ /**
2
+ * 串行任务处理器状态枚举
3
+ */
4
+ declare enum SerialHandlerStatus {
5
+ /**
6
+ * 离线状态
7
+ */
8
+ OFFLINE = "offline",
9
+ /**
10
+ * 激活状态
11
+ */
12
+ ACTIVE = "active",
13
+ /**
14
+ * 待执行状态
15
+ */
16
+ PENDING = "pending",
17
+ /**
18
+ * 执行中状态
19
+ */
20
+ EXECUTING = "executing",
21
+ /**
22
+ * 完成状态
23
+ */
24
+ COMPLETED = "completed",
25
+ /**
26
+ * 销毁状态
27
+ */
28
+ FINISH = "finish"
29
+ }
30
+ /**
31
+ * 并行任务处理器状态枚举
32
+ */
33
+ declare enum ParallelHandlerStatus {
34
+ /**
35
+ * 离线状态
36
+ */
37
+ OFFLINE = "offline",
38
+ /**
39
+ * 激活状态
40
+ */
41
+ ACTIVE = "active",
42
+ /**
43
+ * 待执行状态
44
+ */
45
+ PENDING = "pending",
46
+ /**
47
+ /**
48
+ * 执行中状态
49
+ */
50
+ EXECUTING = "executing",
51
+ /**
52
+ * 完成状态
53
+ */
54
+ COMPLETED = "completed",
55
+ /**
56
+ * 销毁状态
57
+ */
58
+ FINISH = "finish"
59
+ }
60
+ /**
61
+ * 工厂的处理上下文
62
+ */
63
+ interface TaskExecuteContext {
64
+ /**
65
+ * 是否为第一次执行
66
+ */
67
+ isFirstExecute?: boolean;
68
+ /**
69
+ * 是否为最后一次执行
70
+ */
71
+ isLastExecute?: boolean;
72
+ }
73
+ /**
74
+ * 串行任务的处理上下文
75
+ */
76
+ interface SerialTaskExecuteContext<O, _> extends TaskExecuteContext {
77
+ taskItem: SerialTaskItem<O>;
78
+ }
79
+ /**
80
+ * 并行任务的处理上下文
81
+ */
82
+ interface ParallelTaskExecuteContext<O, _> extends TaskExecuteContext {
83
+ taskItem: ParallelTaskItem<O>;
84
+ }
85
+ /**
86
+ * 并行任务状态
87
+ */
88
+ declare enum ParallelTaskItemStatus {
89
+ /**
90
+ * 待执行
91
+ */
92
+ PENDING = "pending",
93
+ /**
94
+ * 执行中
95
+ */
96
+ EXECUTING = "executing",
97
+ /**
98
+ * 执行完成
99
+ */
100
+ COMPLETED = "completed"
101
+ }
102
+ /**
103
+ * 串行任务状态
104
+ */
105
+ declare enum SerialTaskItemStatus {
106
+ /**
107
+ * 待执行
108
+ */
109
+ PENDING = "pending",
110
+ /**
111
+ * 执行中
112
+ */
113
+ EXECUTING = "executing",
114
+ /**
115
+ * 执行完成
116
+ */
117
+ COMPLETED = "completed"
118
+ }
119
+ /**
120
+ * 并行每一项任务数据
121
+ */
122
+ interface ParallelTaskItem<O> {
123
+ uuid: string;
124
+ status: ParallelTaskItemStatus;
125
+ original: O | null;
126
+ }
127
+ /**
128
+ * 串行每一项任务数据
129
+ */
130
+ interface SerialTaskItem<O> {
131
+ uuid: string;
132
+ status: SerialTaskItemStatus;
133
+ original: O | null;
134
+ }
135
+ export type { ParallelTaskExecuteContext, ParallelTaskItem, SerialTaskExecuteContext, SerialTaskItem, TaskExecuteContext, };
136
+ export { ParallelHandlerStatus, ParallelTaskItemStatus, SerialHandlerStatus, SerialTaskItemStatus };
@@ -0,0 +1,18 @@
1
+ import { BusinessParams, SectionDelayParams, SystemConfig } from './types';
2
+ import { default as LatController } from './lat-controller';
3
+ /**
4
+ * 用于管理语音转文字配置
5
+ */
6
+ declare const _default: {
7
+ /**
8
+ * 配置系统参数。
9
+ * @param _systemConfig - 系统配置参数。
10
+ * @returns 返回当前对象,支持链式调用。
11
+ */
12
+ config(_systemConfig: Required<SystemConfig>): {
13
+ config(_systemConfig: Required<SystemConfig>): /*elided*/ any;
14
+ create(_businessParams?: Partial<BusinessParams>, _sectionDelayParams?: Partial<SectionDelayParams>): LatController;
15
+ };
16
+ create(_businessParams?: Partial<BusinessParams>, _sectionDelayParams?: Partial<SectionDelayParams>): LatController;
17
+ };
18
+ export default _default;