@spatialwalk/avatarkit 1.0.0-beta.2 → 1.0.0-beta.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.
package/README.md CHANGED
@@ -1,25 +1,25 @@
1
1
  # SPAvatarKit SDK
2
2
 
3
- 基于 3D Gaussian Splatting 的实时虚拟人物头像渲染 SDK,支持音频驱动的动画渲染和高质量 3D 渲染。
3
+ Real-time virtual avatar rendering SDK based on 3D Gaussian Splatting, supporting audio-driven animation rendering and high-quality 3D rendering.
4
4
 
5
- ## 🚀 特性
5
+ ## 🚀 Features
6
6
 
7
- - **3D Gaussian Splatting 渲染** - 基于最新的点云渲染技术,提供高质量的 3D 虚拟人物
8
- - **音频驱动的实时动画渲染** - 用户提供音频数据,SDK 负责接收动画数据并渲染
9
- - **WebGPU/WebGL 双渲染后端** - 自动选择最佳渲染后端,确保兼容性
10
- - **WASM 高性能计算** - 使用 C++ 编译的 WebAssembly 模块进行几何计算
11
- - **TypeScript 支持** - 完整的类型定义和智能提示
12
- - **模块化架构** - 清晰的组件分离,易于集成和扩展
7
+ - **3D Gaussian Splatting Rendering** - Based on the latest point cloud rendering technology, providing high-quality 3D virtual avatars
8
+ - **Audio-Driven Real-Time Animation Rendering** - Users provide audio data, SDK handles receiving animation data and rendering
9
+ - **WebGPU/WebGL Dual Rendering Backend** - Automatically selects the best rendering backend for compatibility
10
+ - **WASM High-Performance Computing** - Uses C++ compiled WebAssembly modules for geometric calculations
11
+ - **TypeScript Support** - Complete type definitions and IntelliSense
12
+ - **Modular Architecture** - Clear component separation, easy to integrate and extend
13
13
 
14
- ## 📦 安装
14
+ ## 📦 Installation
15
15
 
16
16
  ```bash
17
17
  npm install @spatialwalk/avatarkit
18
18
  ```
19
19
 
20
- ## 🎯 快速开始
20
+ ## 🎯 Quick Start
21
21
 
22
- ### 基础使用
22
+ ### Basic Usage
23
23
 
24
24
  ```typescript
25
25
  import {
@@ -30,173 +30,173 @@ import {
30
30
  Environment
31
31
  } from '@spatialwalk/avatarkit'
32
32
 
33
- // 1. 初始化 SDK
33
+ // 1. Initialize SDK
34
34
  const configuration: Configuration = {
35
35
  environment: Environment.test,
36
36
  }
37
37
 
38
38
  await AvatarKit.initialize('your-app-id', configuration)
39
39
 
40
- // 设置 sessionToken(如果需要,单独调用)
40
+ // Set sessionToken (if needed, call separately)
41
41
  // AvatarKit.setSessionToken('your-session-token')
42
42
 
43
- // 2. 加载角色
43
+ // 2. Load character
44
44
  const avatarManager = new AvatarManager()
45
45
  const avatar = await avatarManager.load('character-id', (progress) => {
46
46
  console.log(`Loading progress: ${progress.progress}%`)
47
47
  })
48
48
 
49
- // 3. 创建视图(自动创建 Canvas AvatarController
49
+ // 3. Create view (automatically creates Canvas and AvatarController)
50
50
  const container = document.getElementById('avatar-container')
51
51
  const avatarView = new AvatarView(avatar, container)
52
52
 
53
- // 4. 启动实时通信
53
+ // 4. Start real-time communication
54
54
  await avatarView.avatarController.start()
55
55
 
56
- // 5. 发送音频数据
57
- // 如果音频是 Uint8Array,可以使用 slice().buffer 转换为 ArrayBuffer
58
- const audioUint8 = new Uint8Array(1024) // 示例:音频数据
59
- const audioData = audioUint8.slice().buffer // 简化的转换方式,适用于 ArrayBuffer SharedArrayBuffer
60
- avatarView.avatarController.send(audioData, false) // 发送音频数据,积累到一定量后会自动开始播放
61
- avatarView.avatarController.send(audioData, true) // end=true 表示立即返回动画数据,不再积累
56
+ // 5. Send audio data
57
+ // If audio is Uint8Array, you can use slice().buffer to convert to ArrayBuffer
58
+ const audioUint8 = new Uint8Array(1024) // Example: audio data
59
+ const audioData = audioUint8.slice().buffer // Simplified conversion, works for ArrayBuffer and SharedArrayBuffer
60
+ avatarView.avatarController.send(audioData, false) // Send audio data, will automatically start playing after accumulating enough data
61
+ avatarView.avatarController.send(audioData, true) // end=true means immediately return animation data, no longer accumulating
62
62
  ```
63
63
 
64
- ### 完整示例
64
+ ### Complete Example
65
65
 
66
- 查看 GitHub 仓库中的示例代码了解完整的使用流程。
66
+ Check the example code in the GitHub repository for the complete usage flow.
67
67
 
68
- **示例项目:** [Avatarkit-web-demo](https://github.com/spatialwalk/Avatarkit-web-demo)
68
+ **Example Project:** [Avatarkit-web-demo](https://github.com/spatialwalk/Avatarkit-web-demo)
69
69
 
70
- 该仓库包含 Vanilla JSVue 3 React 的完整示例,展示了如何在不同框架中集成和使用 SPAvatarKit SDK
70
+ This repository contains complete examples for Vanilla JS, Vue 3, and React, demonstrating how to integrate and use SPAvatarKit SDK in different frameworks.
71
71
 
72
- ## 🏗️ 架构概览
72
+ ## 🏗️ Architecture Overview
73
73
 
74
- ### 核心组件
74
+ ### Core Components
75
75
 
76
- - **AvatarKit** - SDK 初始化和管理
77
- - **AvatarManager** - 角色资源加载和管理
78
- - **AvatarView** - 3D 渲染视图(内部包含 AvatarController
79
- - **AvatarController** - 实时通信和数据处理
80
- - **AvatarCoreAdapter** - WASM 模块适配器
76
+ - **AvatarKit** - SDK initialization and management
77
+ - **AvatarManager** - Character resource loading and management
78
+ - **AvatarView** - 3D rendering view (internally contains AvatarController)
79
+ - **AvatarController** - Real-time communication and data processing
80
+ - **AvatarCoreAdapter** - WASM module adapter
81
81
 
82
- ### 数据流
82
+ ### Data Flow
83
83
 
84
84
  ```
85
- 用户音频输入(16kHz mono PCM → AvatarController → WebSocket → 后台处理
85
+ User audio input (16kHz mono PCM) → AvatarController → WebSocket → Backend processing
86
86
 
87
- 后台返回动画数据(FLAME 关键帧) → AvatarController → AnimationPlayer
87
+ Backend returns animation data (FLAME keyframes) → AvatarController → AnimationPlayer
88
88
 
89
- FLAME 参数 → AvatarCore.computeFrameFlatFromParams() → Splat 数据
89
+ FLAME parameters → AvatarCore.computeFrameFlatFromParams() → Splat data
90
90
 
91
- Splat 数据 → RenderSystem → WebGPU/WebGL → Canvas 渲染
91
+ Splat data → RenderSystem → WebGPU/WebGL → Canvas rendering
92
92
  ```
93
93
 
94
- **注意:** 用户需要自己提供音频数据(16kHz mono PCM),SDK 负责接收动画数据并渲染。
94
+ **Note:** Users need to provide audio data themselves (16kHz mono PCM), SDK handles receiving animation data and rendering.
95
95
 
96
- ## 📚 API 参考
96
+ ## 📚 API Reference
97
97
 
98
98
  ### AvatarKit
99
99
 
100
- SDK 的核心管理类,负责初始化和全局配置。
100
+ The core management class of the SDK, responsible for initialization and global configuration.
101
101
 
102
102
  ```typescript
103
- // 初始化 SDK
103
+ // Initialize SDK
104
104
  await AvatarKit.initialize(appId: string, configuration: Configuration)
105
105
 
106
- // 检查初始化状态
106
+ // Check initialization status
107
107
  const isInitialized = AvatarKit.isInitialized
108
108
 
109
- // 清理资源(不再使用时必须调用)
109
+ // Cleanup resources (must be called when no longer in use)
110
110
  AvatarKit.cleanup()
111
111
  ```
112
112
 
113
113
  ### AvatarManager
114
114
 
115
- 角色资源管理器,负责下载、缓存和加载角色数据。
115
+ Character resource manager, responsible for downloading, caching, and loading character data.
116
116
 
117
117
  ```typescript
118
118
  const manager = new AvatarManager()
119
119
 
120
- // 加载角色
120
+ // Load character
121
121
  const avatar = await manager.load(
122
122
  characterId: string,
123
123
  onProgress?: (progress: LoadProgressInfo) => void
124
124
  )
125
125
 
126
- // 清理缓存
126
+ // Clear cache
127
127
  manager.clearCache()
128
128
  ```
129
129
 
130
130
  ### AvatarView
131
131
 
132
- 3D 渲染视图,内部自动创建和管理 AvatarController
132
+ 3D rendering view, internally automatically creates and manages AvatarController.
133
133
 
134
- **⚠️ 重要限制:** 目前 SDK 只支持同时存在一个 AvatarView 实例。如果需要切换角色,必须先调用 `dispose()` 方法清理当前的 AvatarView,然后再创建新的实例。
134
+ **⚠️ Important Limitation:** Currently, the SDK only supports one AvatarView instance at a time. If you need to switch characters, you must first call the `dispose()` method to clean up the current AvatarView, then create a new instance.
135
135
 
136
136
  ```typescript
137
- // 创建视图(Canvas 会自动添加到容器中)
137
+ // Create view (Canvas is automatically added to container)
138
138
  const avatarView = new AvatarView(avatar: Avatar, container?: HTMLElement)
139
139
 
140
- // 获取 Canvas 元素
140
+ // Get Canvas element
141
141
  const canvas = avatarView.getCanvas()
142
142
 
143
- // 设置背景
143
+ // Set background
144
144
  avatarView.setBackgroundImage('path/to/image.jpg')
145
145
  avatarView.setBackgroundOpaque(true)
146
146
 
147
- // 更新相机配置
147
+ // Update camera configuration
148
148
  avatarView.updateCameraConfig(cameraConfig: CameraConfig)
149
149
 
150
- // 清理资源(切换角色前必须调用)
150
+ // Cleanup resources (must be called before switching characters)
151
151
  avatarView.dispose()
152
152
  ```
153
153
 
154
- **切换角色示例:**
154
+ **Character Switching Example:**
155
155
 
156
156
  ```typescript
157
- // 切换角色前,必须先清理旧的 AvatarView
157
+ // Before switching characters, must clean up old AvatarView first
158
158
  if (currentAvatarView) {
159
159
  currentAvatarView.dispose()
160
160
  currentAvatarView = null
161
161
  }
162
162
 
163
- // 加载新角色
163
+ // Load new character
164
164
  const newAvatar = await avatarManager.load('new-character-id')
165
165
 
166
- // 创建新的 AvatarView
166
+ // Create new AvatarView
167
167
  currentAvatarView = new AvatarView(newAvatar, container)
168
168
  await currentAvatarView.avatarController.start()
169
169
  ```
170
170
 
171
171
  ### AvatarController
172
172
 
173
- 实时通信控制器,处理 WebSocket 连接和动画数据。
173
+ Real-time communication controller, handles WebSocket connections and animation data.
174
174
 
175
175
  ```typescript
176
- // 启动连接
176
+ // Start connection
177
177
  await avatarView.avatarController.start()
178
178
 
179
- // 发送音频数据
179
+ // Send audio data
180
180
  avatarView.avatarController.send(audioData: ArrayBuffer, end: boolean)
181
- // audioData: 音频数据(ArrayBuffer 格式)
182
- // end: false(默认)- 正常发送音频数据,服务端会积累音频数据,积累到一定量后会自动返回动画数据并开始同步播放动画和音频
183
- // end: true - 立即返回动画数据,不再积累,用于结束当前对话或需要立即响应的场景
181
+ // audioData: Audio data (ArrayBuffer format)
182
+ // end: false (default) - Normal audio data sending, server will accumulate audio data, automatically returns animation data and starts synchronized playback of animation and audio after accumulating enough data
183
+ // end: true - Immediately return animation data, no longer accumulating, used for ending current conversation or scenarios requiring immediate response
184
184
 
185
- // 打断对话
185
+ // Interrupt conversation
186
186
  avatarView.avatarController.interrupt()
187
187
 
188
- // 关闭连接
188
+ // Close connection
189
189
  avatarView.avatarController.close()
190
190
 
191
- // 设置事件回调
191
+ // Set event callbacks
192
192
  avatarView.avatarController.onConnectionState = (state: ConnectionState) => {}
193
193
  avatarView.avatarController.onAvatarState = (state: AvatarState) => {}
194
194
  avatarView.avatarController.onError = (error: Error) => {}
195
195
 
196
- // 注意:不支持 sendText() 方法,调用会抛出错误
196
+ // Note: sendText() method is not supported, calling it will throw an error
197
197
  ```
198
198
 
199
- ## 🔧 配置
199
+ ## 🔧 Configuration
200
200
 
201
201
  ### Configuration
202
202
 
@@ -206,14 +206,15 @@ interface Configuration {
206
206
  }
207
207
  ```
208
208
 
209
- **说明:**
210
- - `environment`: 指定环境(cn/us/test),SDK 会根据环境自动使用对应的 API 地址和 WebSocket 地址
211
- - `sessionToken`: 通过 `AvatarKit.setSessionToken()` 单独设置,而不是在 Configuration
209
+ **Description:**
210
+ - `environment`: Specifies the environment (cn/us/test), SDK will automatically use the corresponding API address and WebSocket address based on the environment
211
+ - `sessionToken`: Set separately via `AvatarKit.setSessionToken()`, not in Configuration
212
212
 
213
+ ```typescript
213
214
  enum Environment {
214
- cn = 'cn', // 中国区
215
- us = 'us', // 美国区
216
- test = 'test' // 测试环境
215
+ cn = 'cn', // China region
216
+ us = 'us', // US region
217
+ test = 'test' // Test environment
217
218
  }
218
219
  ```
219
220
 
@@ -221,17 +222,17 @@ enum Environment {
221
222
 
222
223
  ```typescript
223
224
  interface CameraConfig {
224
- position: [number, number, number] // 相机位置
225
- target: [number, number, number] // 相机目标
226
- fov: number // 视野角度
227
- near: number // 近裁剪面
228
- far: number // 远裁剪面
229
- up?: [number, number, number] // 上方向
230
- aspect?: number // 宽高比
225
+ position: [number, number, number] // Camera position
226
+ target: [number, number, number] // Camera target
227
+ fov: number // Field of view angle
228
+ near: number // Near clipping plane
229
+ far: number // Far clipping plane
230
+ up?: [number, number, number] // Up direction
231
+ aspect?: number // Aspect ratio
231
232
  }
232
233
  ```
233
234
 
234
- ## 📊 状态管理
235
+ ## 📊 State Management
235
236
 
236
237
  ### ConnectionState
237
238
 
@@ -248,77 +249,77 @@ enum ConnectionState {
248
249
 
249
250
  ```typescript
250
251
  enum AvatarState {
251
- idle = 'idle', // 空闲状态,呈现呼吸态
252
- active = 'active', // 活跃中,等待可播放内容
253
- playing = 'playing' // 播放中
252
+ idle = 'idle', // Idle state, showing breathing animation
253
+ active = 'active', // Active, waiting for playable content
254
+ playing = 'playing' // Playing
254
255
  }
255
256
  ```
256
257
 
257
- ## 🎨 渲染系统
258
+ ## 🎨 Rendering System
258
259
 
259
- SDK 支持两种渲染后端:
260
+ The SDK supports two rendering backends:
260
261
 
261
- - **WebGPU** - 现代浏览器的高性能渲染
262
- - **WebGL** - 兼容性更好的传统渲染
262
+ - **WebGPU** - High-performance rendering for modern browsers
263
+ - **WebGL** - Better compatibility traditional rendering
263
264
 
264
- 渲染系统会自动选择最佳的后端,无需手动配置。
265
+ The rendering system automatically selects the best backend, no manual configuration needed.
265
266
 
266
- ## 🔍 调试和监控
267
+ ## 🔍 Debugging and Monitoring
267
268
 
268
- ### 日志系统
269
+ ### Logging System
269
270
 
270
- SDK 内置了完整的日志系统,支持不同级别的日志输出:
271
+ The SDK has a built-in complete logging system, supporting different levels of log output:
271
272
 
272
273
  ```typescript
273
274
  import { logger } from '@spatialwalk/avatarkit'
274
275
 
275
- // 设置日志级别
276
+ // Set log level
276
277
  logger.setLevel('verbose') // 'basic' | 'verbose'
277
278
 
278
- // 手动日志输出
279
+ // Manual log output
279
280
  logger.log('Info message')
280
281
  logger.warn('Warning message')
281
282
  logger.error('Error message')
282
283
  ```
283
284
 
284
- ### 性能监控
285
+ ### Performance Monitoring
285
286
 
286
- SDK 提供了性能监控接口,可以监控渲染性能:
287
+ The SDK provides performance monitoring interfaces to monitor rendering performance:
287
288
 
288
289
  ```typescript
289
- // 获取渲染性能统计
290
+ // Get rendering performance statistics
290
291
  const stats = avatarView.getPerformanceStats()
291
292
 
292
293
  if (stats) {
293
- console.log(`渲染耗时: ${stats.renderTime.toFixed(2)}ms`)
294
- console.log(`排序耗时: ${stats.sortTime.toFixed(2)}ms`)
295
- console.log(`渲染后端: ${stats.backend}`)
294
+ console.log(`Render time: ${stats.renderTime.toFixed(2)}ms`)
295
+ console.log(`Sort time: ${stats.sortTime.toFixed(2)}ms`)
296
+ console.log(`Rendering backend: ${stats.backend}`)
296
297
 
297
- // 计算帧率
298
+ // Calculate frame rate
298
299
  const fps = 1000 / stats.renderTime
299
- console.log(`帧率: ${fps.toFixed(2)} FPS`)
300
+ console.log(`Frame rate: ${fps.toFixed(2)} FPS`)
300
301
  }
301
302
 
302
- // 定期监控性能
303
+ // Regular performance monitoring
303
304
  setInterval(() => {
304
305
  const stats = avatarView.getPerformanceStats()
305
306
  if (stats) {
306
- // 发送到监控服务或显示在 UI
307
+ // Send to monitoring service or display on UI
307
308
  console.log('Performance:', stats)
308
309
  }
309
310
  }, 1000)
310
311
  ```
311
312
 
312
- **性能统计说明**:
313
- - `renderTime`: 总渲染耗时(毫秒),包含排序和 GPU 渲染
314
- - `sortTime`: 排序耗时(毫秒),使用 Radix Sort 算法对点云进行深度排序
315
- - `backend`: 当前使用的渲染后端(`'webgpu'` | `'webgl'` | `null`)
313
+ **Performance Statistics Description:**
314
+ - `renderTime`: Total rendering time (milliseconds), includes sorting and GPU rendering
315
+ - `sortTime`: Sorting time (milliseconds), uses Radix Sort algorithm to depth-sort point cloud
316
+ - `backend`: Currently used rendering backend (`'webgpu'` | `'webgl'` | `null`)
316
317
 
317
- ## 🚨 错误处理
318
+ ## 🚨 Error Handling
318
319
 
319
320
  ### SPAvatarError
320
321
 
321
- SDK 使用自定义错误类型,提供更详细的错误信息:
322
+ The SDK uses custom error types, providing more detailed error information:
322
323
 
323
324
  ```typescript
324
325
  import { SPAvatarError } from '@spatialwalk/avatarkit'
@@ -334,70 +335,70 @@ try {
334
335
  }
335
336
  ```
336
337
 
337
- ### 错误回调
338
+ ### Error Callbacks
338
339
 
339
340
  ```typescript
340
341
  avatarView.avatarController.onError = (error: Error) => {
341
342
  console.error('AvatarController error:', error)
342
- // 处理错误,比如重连、用户提示等
343
+ // Handle error, such as reconnection, user notification, etc.
343
344
  }
344
345
  ```
345
346
 
346
- ## 🔄 资源管理
347
+ ## 🔄 Resource Management
347
348
 
348
- ### 生命周期管理
349
+ ### Lifecycle Management
349
350
 
350
351
  ```typescript
351
- // 初始化
352
+ // Initialize
352
353
  const avatarView = new AvatarView(avatar, container)
353
354
  await avatarView.avatarController.start()
354
355
 
355
- // 使用
356
+ // Use
356
357
  avatarView.avatarController.send(audioData, false)
357
358
 
358
- // 清理(切换角色前必须调用)
359
- avatarView.dispose() // 自动清理所有资源
359
+ // Cleanup (must be called before switching characters)
360
+ avatarView.dispose() // Automatically cleans up all resources
360
361
  ```
361
362
 
362
- **⚠️ 重要提示:**
363
- - SDK 目前只支持同时存在一个 AvatarView 实例
364
- - 切换角色时,必须先调用 `dispose()` 清理旧的 AvatarView,然后再创建新的实例
365
- - 未正确清理可能导致资源泄漏和渲染错误
363
+ **⚠️ Important Notes:**
364
+ - SDK currently only supports one AvatarView instance at a time
365
+ - When switching characters, must first call `dispose()` to clean up old AvatarView, then create new instance
366
+ - Not properly cleaning up may cause resource leaks and rendering errors
366
367
 
367
- ### 内存优化
368
+ ### Memory Optimization
368
369
 
369
- - SDK 自动管理 WASM 内存分配
370
- - 支持角色和动画资源的动态加载/卸载
371
- - 提供内存使用监控接口
370
+ - SDK automatically manages WASM memory allocation
371
+ - Supports dynamic loading/unloading of character and animation resources
372
+ - Provides memory usage monitoring interface
372
373
 
373
- ### 音频数据发送
374
+ ### Audio Data Sending
374
375
 
375
- `send()` 方法接收 `ArrayBuffer` 格式的音频数据:
376
+ The `send()` method receives audio data in `ArrayBuffer` format:
376
377
 
377
- **使用说明:**
378
- - `audioData`: 音频数据(ArrayBuffer 格式)
379
- - `end=false`(默认)- 正常发送音频数据,服务端会积累音频数据,积累到一定量后会自动返回动画数据并开始同步播放动画和音频
380
- - `end=true` - 立即返回动画数据,不再积累,用于结束当前对话或需要立即响应的场景
381
- - **重要**:不需要等待 `end=true` 才开始播放,积累到一定音频数据后就会自动开始播放
378
+ **Usage:**
379
+ - `audioData`: Audio data (ArrayBuffer format)
380
+ - `end=false` (default) - Normal audio data sending, server will accumulate audio data, automatically returns animation data and starts synchronized playback of animation and audio after accumulating enough data
381
+ - `end=true` - Immediately return animation data, no longer accumulating, used for ending current conversation or scenarios requiring immediate response
382
+ - **Important**: No need to wait for `end=true` to start playing, it will automatically start playing after accumulating enough audio data
382
383
 
383
- ## 🌐 浏览器兼容性
384
+ ## 🌐 Browser Compatibility
384
385
 
385
- - **Chrome/Edge** 90+ (推荐 WebGPU)
386
+ - **Chrome/Edge** 90+ (WebGPU recommended)
386
387
  - **Firefox** 90+ (WebGL)
387
388
  - **Safari** 14+ (WebGL)
388
- - **移动端** iOS 14+, Android 8+
389
+ - **Mobile** iOS 14+, Android 8+
389
390
 
390
- ## 📝 许可证
391
+ ## 📝 License
391
392
 
392
393
  MIT License
393
394
 
394
- ## 🤝 贡献
395
+ ## 🤝 Contributing
395
396
 
396
- 欢迎提交 Issue Pull Request!
397
+ Issues and Pull Requests are welcome!
397
398
 
398
- ## 📞 支持
399
+ ## 📞 Support
399
400
 
400
- 如有问题,请联系:
401
- - 邮箱:support@spavatar.com
402
- - 文档:https://docs.spavatar.com
403
- - GitHubhttps://github.com/spavatar/sdk
401
+ For questions, please contact:
402
+ - Email: support@spavatar.com
403
+ - Documentation: https://docs.spavatar.com
404
+ - GitHub: https://github.com/spavatar/sdk
@@ -1,7 +1,7 @@
1
1
  var c = Object.defineProperty;
2
2
  var g = (h, t, e) => t in h ? c(h, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : h[t] = e;
3
3
  var s = (h, t, e) => g(h, typeof t != "symbol" ? t + "" : t, e);
4
- import { l } from "./index-CNhquYUE.js";
4
+ import { l } from "./index-NmYXWJnL.js";
5
5
  class k {
6
6
  constructor(t) {
7
7
  // AudioContext is managed internally
@@ -285,4 +285,4 @@ class k {
285
285
  export {
286
286
  k as StreamingAudioPlayer
287
287
  };
288
- //# sourceMappingURL=StreamingAudioPlayer-CMEiGwxE.js.map
288
+ //# sourceMappingURL=StreamingAudioPlayer-BeLlDiwE.js.map