@vunk/plus 1.10.2 → 1.10.3

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.
Files changed (66) hide show
  1. package/components/WebGLRenderer.mjs +1 -1
  2. package/components/WebGPURenderer.mjs +1 -1
  3. package/components/agent-chat-provider/index.mjs +1 -1
  4. package/components/avatar/index.mjs +1 -1
  5. package/components/broadcasting-markdown/index.mjs +16 -13
  6. package/components/broadcasting-markdown/src/index.vue.d.ts +1 -75
  7. package/components/browserAll.mjs +1 -1
  8. package/components/bubble-list/index.mjs +3 -3
  9. package/components/bubble-templates/index.mjs +1 -1
  10. package/components/chat-independent/index.mjs +1 -1
  11. package/components/drawer/index.css +92 -92
  12. package/components/drawer/index.mjs +1 -1
  13. package/components/index2.mjs +90 -11
  14. package/components/lottie-animation/index.mjs +1 -1
  15. package/components/metahuman-broadcasting/index.d.ts +0 -1
  16. package/components/metahuman-broadcasting/index.mjs +3092 -68
  17. package/components/metahuman-broadcasting/src/index.vue.d.ts +75 -191
  18. package/components/monaco-editor/index.mjs +1 -1
  19. package/components/monaco-environment/index.mjs +1 -1
  20. package/components/pixi-frame/index.d.ts +4 -1
  21. package/components/pixi-frame/index.mjs +2 -2
  22. package/components/pixi-frame/src/bitmap-generator.vue.d.ts +146 -0
  23. package/components/recorder-button/index.mjs +1 -1
  24. package/components/routes-menu-content/index.mjs +3 -3
  25. package/components/scrollbar/index.mjs +3 -3
  26. package/components/sender/index.mjs +2 -2
  27. package/components/speech-button/index.mjs +3 -3
  28. package/components/table-columns/index.mjs +1 -1
  29. package/components/tables-v1/index.mjs +1 -1
  30. package/components/tables-v1-checkbox/index.mjs +1 -1
  31. package/components/text/index.mjs +1 -1
  32. package/components/typing-markdown/index.mjs +1 -1
  33. package/components/vditor/index.mjs +3 -3
  34. package/components/webworkerAll.mjs +1 -1
  35. package/components/xgplayer/index.mjs +2 -2
  36. package/icons/end/index.mjs +1 -1
  37. package/icons/keyboard/index.mjs +1 -1
  38. package/icons/start/index.mjs +1 -1
  39. package/icons/voice/index.mjs +1 -1
  40. package/index.css +92 -92
  41. package/package.json +4 -20
  42. package/shared/data/blobToAudioBuffer.d.ts +1 -0
  43. package/shared/data/imgUrlToBitmap.d.ts +1 -0
  44. package/shared/data/index.d.ts +2 -0
  45. package/shared/data/index.mjs +25 -0
  46. package/shared/StreamingInferenceService.mjs +0 -204
  47. package/shared/audioToFrames/index.d.ts +0 -19
  48. package/shared/audioToFrames/index.mjs +0 -44
  49. package/shared/audioToFrames/src/assets/mask.d.ts +0 -2
  50. package/shared/audioToFrames/src/audio/StreamingFeatureExtractorService.d.ts +0 -125
  51. package/shared/audioToFrames/src/audio/index.d.ts +0 -5
  52. package/shared/audioToFrames/src/audio/index.mjs +0 -375
  53. package/shared/audioToFrames/src/config.d.ts +0 -4
  54. package/shared/audioToFrames/src/core/constants.d.ts +0 -17
  55. package/shared/audioToFrames/src/core/index.d.ts +0 -6
  56. package/shared/audioToFrames/src/core/index.mjs +0 -24
  57. package/shared/audioToFrames/src/core/utils.d.ts +0 -26
  58. package/shared/audioToFrames/src/inference/StreamingInferenceService.d.ts +0 -189
  59. package/shared/audioToFrames/src/inference/index.d.ts +0 -5
  60. package/shared/audioToFrames/src/inference/index.mjs +0 -3
  61. package/shared/audioToFrames/src/media/DataLoaderService.d.ts +0 -59
  62. package/shared/audioToFrames/src/media/PredictiveFrameLoader.d.ts +0 -81
  63. package/shared/audioToFrames/src/media/index.d.ts +0 -6
  64. package/shared/audioToFrames/src/media/index.mjs +0 -236
  65. package/shared/config.mjs +0 -5
  66. package/shared/constants.mjs +0 -7
@@ -1,204 +0,0 @@
1
- import { Deferred } from '@vunk/shared/promise';
2
- import { w as workerConfig } from './config.mjs';
3
-
4
- class StreamingInferenceService {
5
- /**
6
- * 构造函数,初始化Worker并注册消息回调。
7
- * @param modelPath 模型路径
8
- * @param onReady Worker初始化完成回调
9
- */
10
- constructor(modelPath, onReady) {
11
- /** 后台推理Worker实例 */
12
- this.worker = null;
13
- /** 推理回调函数集合 */
14
- this.callbacks = {};
15
- /** Worker是否已初始化 */
16
- this.isInitialized = false;
17
- /** 待推理的chunk数据映射 */
18
- this.pendingChunks = /* @__PURE__ */ new Map();
19
- /** 已完成推理的chunk索引集合 */
20
- this.completedChunks = /* @__PURE__ */ new Set();
21
- /** 当前累计的总帧数 */
22
- this.totalFrames = 0;
23
- /** 是否处于推理处理中 */
24
- this.isProcessing = false;
25
- /** 全局chunk索引计数器,确保每个chunk有唯一索引 */
26
- this.globalChunkIndex = 0;
27
- this._def = new Deferred();
28
- this.worker = new Worker(
29
- /* @vite-ignore */
30
- `${workerConfig.path}/streaming.inference.worker.js`,
31
- { type: "module" }
32
- );
33
- this.worker.onmessage = (event) => {
34
- const { type } = event.data;
35
- switch (type) {
36
- case "ready":
37
- this.isInitialized = true;
38
- onReady?.();
39
- this._def.resolve();
40
- break;
41
- case "progress":
42
- this.callbacks.onProgress?.(
43
- event.data.payload.processed,
44
- event.data.payload.total
45
- );
46
- break;
47
- case "frame": {
48
- const frameData = event.data.payload;
49
- this.callbacks.onFrame?.(frameData.frame, frameData.frameIndex);
50
- break;
51
- }
52
- case "chunk_complete": {
53
- const chunkData = event.data.payload;
54
- this.completedChunks.add(chunkData.chunkIndex);
55
- this.callbacks.onChunkComplete?.(
56
- chunkData.chunkIndex,
57
- chunkData.timings
58
- );
59
- if (this.completedChunks.size === this.pendingChunks.size && this.pendingChunks.size > 0) {
60
- this.callbacks.onAllComplete?.({});
61
- this.lightCleanup();
62
- }
63
- break;
64
- }
65
- case "error":
66
- this.callbacks.onError?.(event.data.payload);
67
- this.cleanup();
68
- break;
69
- }
70
- };
71
- this.worker.onerror = (error) => {
72
- this.callbacks.onError?.(`Worker error: ${error.message}`);
73
- this.cleanup();
74
- };
75
- this.worker.postMessage({ type: "init", modelPath });
76
- }
77
- /**
78
- * 判断推理服务是否已准备就绪。
79
- * @returns 是否已初始化
80
- */
81
- isReady() {
82
- return this.isInitialized;
83
- }
84
- when() {
85
- return this._def.promise;
86
- }
87
- /**
88
- * 启动流式推理流程,发送共享数据到worker。
89
- * @param sharedData 所有chunk共享的数据(图像、配置等)
90
- * @param callbacks 推理过程中的回调函数
91
- * @param startImageIndex 起始图像帧索引,默认为0
92
- */
93
- async startStreaming(sharedData, callbacks, startImageIndex = 0) {
94
- if (!this.worker || !this.isInitialized) {
95
- throw new Error("\u63A8\u7406\u670D\u52A1\u5C1A\u672A\u521D\u59CB\u5316\u5B8C\u6210\u3002");
96
- }
97
- this.callbacks = callbacks;
98
- this.pendingChunks.clear();
99
- this.completedChunks.clear();
100
- this.totalFrames = 0;
101
- this.isProcessing = true;
102
- const zipBuffer = await sharedData.zipBlob.arrayBuffer();
103
- const message = {
104
- type: "init_streaming",
105
- dataset: sharedData.dataset,
106
- zipBuffer,
107
- blendingMaskBitmap: sharedData.blendingMaskBitmap,
108
- startImageIndex
109
- };
110
- this.worker.postMessage(message, [
111
- sharedData.blendingMaskBitmap,
112
- zipBuffer
113
- ]);
114
- }
115
- /**
116
- * 添加一个chunk进行推理。
117
- * @param chunkResult 特征提取完成的chunk
118
- */
119
- addChunk(chunkResult) {
120
- if (!this.worker || !this.isProcessing) {
121
- console.warn("\u65E0\u6CD5\u6DFB\u52A0chunk\uFF1A\u63A8\u7406\u670D\u52A1\u672A\u51C6\u5907\u5C31\u7EEA\u6216\u672A\u5728\u5904\u7406\u4E2D");
122
- return;
123
- }
124
- const chunkFrames = chunkResult.dimensions[0];
125
- const startFrame = this.totalFrames;
126
- const endFrame = startFrame + chunkFrames;
127
- this.totalFrames = endFrame;
128
- const uniqueChunkIndex = this.globalChunkIndex++;
129
- const chunkData = {
130
- chunkIndex: uniqueChunkIndex,
131
- // 使用全局唯一索引
132
- audioFeatures: chunkResult.features,
133
- // 直接使用,不复制
134
- audioDimensions: chunkResult.dimensions,
135
- startFrame,
136
- endFrame
137
- };
138
- this.pendingChunks.set(uniqueChunkIndex, chunkData);
139
- const message = {
140
- type: "streaming_run",
141
- chunkData,
142
- dataset: {},
143
- // 已在init_streaming中发送
144
- zipBlob: new Blob(),
145
- // 已在init_streaming中发送
146
- blendingMaskBitmap: {},
147
- // 已在init_streaming中发送
148
- startImageIndex: 0
149
- // 已在init_streaming中发送
150
- };
151
- this.worker.postMessage(message, [chunkData.audioFeatures.buffer]);
152
- }
153
- /**
154
- * 通知所有chunk都已添加完成,发送总帧数到worker。
155
- */
156
- finishAddingChunks() {
157
- if (!this.worker)
158
- return;
159
- this.worker.postMessage({
160
- type: "finish_chunks",
161
- totalFrames: this.totalFrames
162
- });
163
- }
164
- /**
165
- * 清理内部状态和资源。
166
- */
167
- cleanup() {
168
- this.isProcessing = false;
169
- this.callbacks = {};
170
- this.pendingChunks.clear();
171
- this.completedChunks.clear();
172
- this.totalFrames = 0;
173
- this.globalChunkIndex = 0;
174
- }
175
- /**
176
- * 轻度清理,保持连续性,用于音频文件间的清理。
177
- */
178
- lightCleanup() {
179
- this.completedChunks.clear();
180
- this.pendingChunks.clear();
181
- }
182
- /**
183
- * 停止推理并清理资源,通知worker停止。
184
- */
185
- stop() {
186
- this.cleanup();
187
- if (this.worker) {
188
- this.worker.postMessage({ type: "stop" });
189
- }
190
- }
191
- /**
192
- * 彻底终止worker并清理所有资源。
193
- */
194
- terminate() {
195
- if (this.worker) {
196
- this.worker.terminate();
197
- this.worker = null;
198
- this.isInitialized = false;
199
- }
200
- this.cleanup();
201
- }
202
- }
203
-
204
- export { StreamingInferenceService as S };
@@ -1,19 +0,0 @@
1
- import type { ChunkFeatureResult } from './src/audio';
2
- import { workerConfig } from './src/config';
3
- import { StreamingInferenceService } from './src/inference';
4
- import { PredictiveFrameLoader } from './src/media';
5
- export type { ImageDataResponse } from './src/media';
6
- export { PredictiveFrameLoader, StreamingInferenceService, workerConfig, };
7
- export declare function blobToAudioBuffer(blob: Blob): Promise<AudioBuffer>;
8
- export declare function processStreaming(buffer: AudioBuffer, callbacks?: {
9
- onChunkComplete?: (result: ChunkFeatureResult) => void;
10
- }): Promise<number[]>;
11
- export declare function getStremingStartData(options: {
12
- sourceUrl: string;
13
- datasetUrl: string;
14
- }): Promise<{
15
- dataset: import("./src/media").ImageDataResponse;
16
- zip: import("jszip");
17
- zipBlob: Blob;
18
- blendingMaskBitmap: ImageBitmap;
19
- }>;
@@ -1,44 +0,0 @@
1
- import { createAudioContext, StreamingFeatureExtractorService } from './src/audio/index.mjs';
2
- export { w as workerConfig } from '../config.mjs';
3
- export { S as StreamingInferenceService } from '../StreamingInferenceService.mjs';
4
- import { loadImageData } from './src/media/index.mjs';
5
- export { PredictiveFrameLoader } from './src/media/index.mjs';
6
- import '../constants.mjs';
7
- import '@vunk/shared/promise';
8
-
9
- var maskUrl = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAAAAADH8yjkAAADsElEQVRoBbXBsaoYBAwF0KTP0vBQgppBNGNn6VTu5Cj55ODoFDoV545RHKIuUlLqq/5EPIfp2cPzh2f0f/j09PHpEz97ePEonzHd+/efff/hiZ+/sG/t8YHuPb2f3+YDP37+8vuXXz2nex//fPfLu7/5iy9f/fDqmxd078Pvb39++xfr169/fP2d0L399c1Pb/5gNQRc6N52ZQ2rIeBC97Yra1gNARe6t11Zw2oIuNC97coaVkPAhe5tV9awGgIudG+7sobVEHChe9uVNayGgAvd266sYTUEXOjedmUNqyHgQve2K2tYDQEXurddWcNqCLjQve3KGlZDwIXubVfWsBoCLnRvu7KG1RBwoXvblTWshoAL3duurGE1BFzo3nZlDash4EL3titrWA0BF7q3XVnDagi40L3tyhpWQ8CF7m1X1rAaAi50b7uyhtUQcKF725U1rIaAC93brqxhNQRc6N52ZQ2rIeBC97Yra1gNARe6t11Zw2oIuNC97coaVkPAhe5tV9awGgIudG+7sobVEHChe9uVNayGgAvd266sYTUEXOjedmUNqyHgQve2K2tYDQEXurddWcNqCLjQve3KGlZDwIXubVfWsBoCLnRvu7KG1RBwoXvblTWshoAL3duurGE1BFzo3nZlDash4EL3titrWA0BF7q3XVnDagi40L3tyhpWQ8CF7m1X1rAaAi50b7uyhtUQcKF725U1rIaAC93brqxhNQRc6N52ZQ2rIeBC97Yra1gNARe6t11Zw2oIuNC97coaVkPAhe5tV9awGgIudG+7sobVEHChe9uVNayGgAvd266sYTUEXOjedmUNqyHgQve2K2tYDQEXurddWcNqCLjQve3KGlZDwIXubVfWsBoCLnRvu7KG1RBwoXvblTWshoAL3duurGE1BFzo3nZlDash4EL3titrWA0BF7q3XVnDagi40L3tyhpWQ8CF7m1X1rAaAi50b7uyhtUQcKF725U1rIaAC93brqxhNQRc6N52ZQ2rIeBC97Yra1gNARe6t11Zw2oIuNC97coaVkPAhe5tV9awGgIudG+7sobVEHChe9uVNayGgAvd266sYTUEXOjedmUNqyHgQve2K2tYDQEXurddWcNqCLjQve3KGtavX//4+juhe/vrm5/e/MFffPnqh1ffvKB7H35/+/Pbv/jx85ffv/zqOd37+Oe7X979zc9f2Lf2+ED3nt7Pb/OBnz28eJTPmO79+8++//DE9Ozh+cMz+j98evr49Ok/l/tDxY3JIlEAAAAASUVORK5CYII=";
10
-
11
- async function blobToAudioBuffer(blob) {
12
- const audioContext = await createAudioContext();
13
- const buffer = await blob.arrayBuffer();
14
- return audioContext.decodeAudioData(buffer);
15
- }
16
- async function processStreaming(buffer, callbacks) {
17
- return new Promise((resolve, reject) => {
18
- const service = new StreamingFeatureExtractorService();
19
- service.processStreaming(buffer, {
20
- onChunkComplete: callbacks?.onChunkComplete,
21
- onComplete: (dimensions) => {
22
- resolve(dimensions);
23
- },
24
- onError: (error) => {
25
- reject(new Error(error));
26
- }
27
- });
28
- });
29
- }
30
- async function getStremingStartData(options) {
31
- const { imageData, zip, zipBlob } = await loadImageData(options.datasetUrl, options.sourceUrl);
32
- const img = new Image();
33
- img.src = maskUrl;
34
- await img.decode();
35
- const blendingMaskBitmap = await createImageBitmap(img);
36
- return {
37
- dataset: imageData,
38
- zip,
39
- zipBlob,
40
- blendingMaskBitmap
41
- };
42
- }
43
-
44
- export { blobToAudioBuffer, getStremingStartData, processStreaming };
@@ -1,2 +0,0 @@
1
- declare const _default: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAAAAADH8yjkAAADsElEQVRoBbXBsaoYBAwF0KTP0vBQgppBNGNn6VTu5Cj55ODoFDoV545RHKIuUlLqq/5EPIfp2cPzh2f0f/j09PHpEz97ePEonzHd+/efff/hiZ+/sG/t8YHuPb2f3+YDP37+8vuXXz2nex//fPfLu7/5iy9f/fDqmxd078Pvb39++xfr169/fP2d0L399c1Pb/5gNQRc6N52ZQ2rIeBC97Yra1gNARe6t11Zw2oIuNC97coaVkPAhe5tV9awGgIudG+7sobVEHChe9uVNayGgAvd266sYTUEXOjedmUNqyHgQve2K2tYDQEXurddWcNqCLjQve3KGlZDwIXubVfWsBoCLnRvu7KG1RBwoXvblTWshoAL3duurGE1BFzo3nZlDash4EL3titrWA0BF7q3XVnDagi40L3tyhpWQ8CF7m1X1rAaAi50b7uyhtUQcKF725U1rIaAC93brqxhNQRc6N52ZQ2rIeBC97Yra1gNARe6t11Zw2oIuNC97coaVkPAhe5tV9awGgIudG+7sobVEHChe9uVNayGgAvd266sYTUEXOjedmUNqyHgQve2K2tYDQEXurddWcNqCLjQve3KGlZDwIXubVfWsBoCLnRvu7KG1RBwoXvblTWshoAL3duurGE1BFzo3nZlDash4EL3titrWA0BF7q3XVnDagi40L3tyhpWQ8CF7m1X1rAaAi50b7uyhtUQcKF725U1rIaAC93brqxhNQRc6N52ZQ2rIeBC97Yra1gNARe6t11Zw2oIuNC97coaVkPAhe5tV9awGgIudG+7sobVEHChe9uVNayGgAvd266sYTUEXOjedmUNqyHgQve2K2tYDQEXurddWcNqCLjQve3KGlZDwIXubVfWsBoCLnRvu7KG1RBwoXvblTWshoAL3duurGE1BFzo3nZlDash4EL3titrWA0BF7q3XVnDagi40L3tyhpWQ8CF7m1X1rAaAi50b7uyhtUQcKF725U1rIaAC93brqxhNQRc6N52ZQ2rIeBC97Yra1gNARe6t11Zw2oIuNC97coaVkPAhe5tV9awGgIudG+7sobVEHChe9uVNayGgAvd266sYTUEXOjedmUNqyHgQve2K2tYDQEXurddWcNqCLjQve3KGtavX//4+juhe/vrm5/e/MFffPnqh1ffvKB7H35/+/Pbv/jx85ffv/zqOd37+Oe7X979zc9f2Lf2+ED3nt7Pb/OBnz28eJTPmO79+8++//DE9Ozh+cMz+j98evr49Ok/l/tDxY3JIlEAAAAASUVORK5CYII=";
2
- export default _default;
@@ -1,125 +0,0 @@
1
- /**
2
- * @file StreamingFeatureExtractorService.ts
3
- *
4
- * 流式音频特征提取服务模块。
5
- * 1. 支持将长音频分割为5秒的chunk进行增量特征提取,显著降低首帧视频延迟。
6
- * 2. 每个chunk独立提取特征,处理完成后立即通过回调通知上层。
7
- * 3. 所有chunk处理完成后自动合并特征,输出完整特征序列。
8
- *
9
- * @author Zhonghan Li
10
- */
11
- /**
12
- * 创建AudioContext的兼容函数,处理Safari的限制。
13
- * 在Safari中,AudioContext需要在用户交互后才能创建。
14
- */
15
- export declare function createAudioContext(): Promise<AudioContext>;
16
- /**
17
- * 特征提取结果接口
18
- */
19
- export interface FeatureExtractionResult {
20
- features: Float32Array;
21
- dimensions: number[];
22
- }
23
- /**
24
- * 单个chunk的特征提取结果结构体。
25
- */
26
- export interface ChunkFeatureResult {
27
- /** chunk索引(从0开始) */
28
- chunkIndex: number;
29
- /** 特征数据(Float32Array) */
30
- features: Float32Array;
31
- /** 特征维度信息 [帧数, 序列长度, mel频带数] */
32
- dimensions: number[];
33
- /** chunk起始时间(秒) */
34
- startTimeSeconds: number;
35
- /** chunk结束时间(秒) */
36
- endTimeSeconds: number;
37
- }
38
- /**
39
- * 流式特征提取回调接口定义。
40
- */
41
- export interface StreamingCallbacks {
42
- /**
43
- * 单个chunk处理完成时回调。
44
- * @param result 当前chunk的特征结果。
45
- */
46
- onChunkComplete?: (result: ChunkFeatureResult) => void;
47
- /**
48
- * 进度更新回调。
49
- * @param completed 已完成的chunk数。
50
- * @param total 总chunk数。
51
- */
52
- onProgress?: (completed: number, total: number) => void;
53
- /**
54
- * 全部chunk处理完成时回调。
55
- * @param totalDimensions 合并后特征的维度信息。
56
- */
57
- onComplete?: (totalDimensions: number[]) => void;
58
- /**
59
- * 处理出错时回调。
60
- * @param error 错误信息。
61
- */
62
- onError?: (error: string) => void;
63
- }
64
- /**
65
- * 流式音频特征提取服务类。
66
- * 支持将长音频分块并行处理,实时回调chunk结果,最终合并输出全部特征。
67
- */
68
- export declare class StreamingFeatureExtractorService {
69
- private queue;
70
- /** 回调函数集合 */
71
- private callbacks;
72
- /** 存储每个chunk的处理结果,用于最终合并 */
73
- private chunkResults;
74
- /** 音频总chunk数 */
75
- private totalChunks;
76
- /** 已完成的chunk数 */
77
- private completedChunks;
78
- /** 已处理的总帧数累加器 */
79
- private totalFramesProcessed;
80
- /** 当前是否有任务在运行 */
81
- private isRunning;
82
- /** 当前处理的音频缓冲区 */
83
- private audioBuffer;
84
- /** 音频上下文实例,用于创建AudioBuffer */
85
- private audioContext;
86
- /** 复用的Worker实例,以提高性能 */
87
- private worker;
88
- /**
89
- * 创建AudioBuffer的兼容方法,处理Safari的限制。
90
- * @param numberOfChannels 声道数
91
- * @param length 缓冲区长度
92
- * @param sampleRate 采样率
93
- * @returns AudioBuffer实例
94
- */
95
- private createAudioBuffer;
96
- /**
97
- * 使用Worker处理AudioBuffer,提取特征
98
- * @param audioBuffer 输入的AudioBuffer
99
- * @returns Promise<FeatureExtractionResult>
100
- */
101
- private processWithWorker;
102
- /**
103
- * 启动流式音频特征提取。
104
- * @param audioBuffer 输入的音频缓冲区。
105
- * @param callbacks 处理过程中的回调函数集合。
106
- */
107
- processStreaming(audioBuffer: AudioBuffer, callbacks: StreamingCallbacks): Promise<void>;
108
- /**
109
- * 处理单个音频chunk,提取特征并回调。
110
- * @param chunkIndex chunk的索引(从0开始)。
111
- */
112
- private processChunk;
113
- /**
114
- * 所有chunk处理完成后,合并特征并调用onComplete。
115
- */
116
- private finalize;
117
- /**
118
- * 清理内部状态和资源。
119
- */
120
- private cleanup;
121
- /**
122
- * 停止当前的流式处理。
123
- */
124
- stop(): void;
125
- }
@@ -1,5 +0,0 @@
1
- /**
2
- * @file 音频处理服务模块导出
3
- * @author Zhonghan Li
4
- */
5
- export * from './StreamingFeatureExtractorService';