ug-js-sdk 3.0.51 → 3.0.57

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 (71) hide show
  1. package/README.md +3 -3
  2. package/dist/ug-core/__tests__/__mocks__/ErrorRetryHandler.d.ts +7 -0
  3. package/dist/ug-core/__tests__/__mocks__/ErrorRetryHandler.js +16 -0
  4. package/dist/ug-core/__tests__/__mocks__/ErrorRetryHandler.js.map +1 -0
  5. package/dist/ug-core/__tests__/__mocks__/mpg123-decoder.d.ts +10 -0
  6. package/dist/ug-core/__tests__/__mocks__/mpg123-decoder.js +16 -0
  7. package/dist/ug-core/__tests__/__mocks__/mpg123-decoder.js.map +1 -0
  8. package/dist/ug-core/__tests__/__mocks__/uuid.d.ts +2 -0
  9. package/dist/ug-core/__tests__/__mocks__/uuid.js +11 -0
  10. package/dist/ug-core/__tests__/__mocks__/uuid.js.map +1 -0
  11. package/dist/ug-core/__tests__/__mocks__/vad-web.d.ts +11 -0
  12. package/dist/ug-core/__tests__/__mocks__/vad-web.js +19 -0
  13. package/dist/ug-core/__tests__/__mocks__/vad-web.js.map +1 -0
  14. package/dist/ug-core/__tests__/conversation-manager/ConversationCommands.test.d.ts +1 -0
  15. package/dist/ug-core/__tests__/conversation-manager/ConversationCommands.test.js +67 -0
  16. package/dist/ug-core/__tests__/conversation-manager/ConversationCommands.test.js.map +1 -0
  17. package/dist/ug-core/__tests__/conversation-manager/ConversationManager.test.d.ts +1 -0
  18. package/dist/ug-core/__tests__/conversation-manager/ConversationManager.test.js +185 -0
  19. package/dist/ug-core/__tests__/conversation-manager/ConversationManager.test.js.map +1 -0
  20. package/dist/ug-core/__tests__/conversation-manager/ErrorRetryHandler.test.d.ts +1 -0
  21. package/dist/ug-core/__tests__/conversation-manager/ErrorRetryHandler.test.js +168 -0
  22. package/dist/ug-core/__tests__/conversation-manager/ErrorRetryHandler.test.js.map +1 -0
  23. package/dist/ug-core/__tests__/core/EventEmitter.test.d.ts +1 -0
  24. package/dist/ug-core/__tests__/core/EventEmitter.test.js +211 -0
  25. package/dist/ug-core/__tests__/core/EventEmitter.test.js.map +1 -0
  26. package/dist/ug-core/__tests__/core/Logger.test.d.ts +1 -0
  27. package/dist/ug-core/__tests__/core/Logger.test.js +162 -0
  28. package/dist/ug-core/__tests__/core/Logger.test.js.map +1 -0
  29. package/dist/ug-core/__tests__/core/localStorage.test.d.ts +1 -0
  30. package/dist/ug-core/__tests__/core/localStorage.test.js +172 -0
  31. package/dist/ug-core/__tests__/core/localStorage.test.js.map +1 -0
  32. package/dist/ug-core/__tests__/e2e/replicate-test.e2e.d.ts +15 -0
  33. package/dist/ug-core/__tests__/e2e/replicate-test.e2e.js +224 -0
  34. package/dist/ug-core/__tests__/e2e/replicate-test.e2e.js.map +1 -0
  35. package/dist/ug-core/__tests__/network/WebSocketConnection.test.d.ts +1 -0
  36. package/dist/ug-core/__tests__/network/WebSocketConnection.test.js +193 -0
  37. package/dist/ug-core/__tests__/network/WebSocketConnection.test.js.map +1 -0
  38. package/dist/ug-core/__tests__/playback-manager/SubtitleManager.test.d.ts +1 -0
  39. package/dist/ug-core/__tests__/playback-manager/SubtitleManager.test.js +228 -0
  40. package/dist/ug-core/__tests__/playback-manager/SubtitleManager.test.js.map +1 -0
  41. package/dist/ug-core/__tests__/setup.d.ts +4 -0
  42. package/dist/ug-core/__tests__/setup.js +8 -0
  43. package/dist/ug-core/__tests__/setup.js.map +1 -0
  44. package/dist/ug-core/conversation-manager/ConversationManager.js +18 -0
  45. package/dist/ug-core/conversation-manager/ConversationManager.js.map +1 -1
  46. package/dist/ug-core/conversation-manager/ErrorRetryHandler.d.ts +1 -0
  47. package/dist/ug-core/conversation-manager/ErrorRetryHandler.js +3 -0
  48. package/dist/ug-core/conversation-manager/ErrorRetryHandler.js.map +1 -1
  49. package/dist/ug-core/conversation-manager/types.d.ts +51 -6
  50. package/dist/ug-core/network/ConversationNetwork.js +12 -6
  51. package/dist/ug-core/network/ConversationNetwork.js.map +1 -1
  52. package/dist/ug-core/playback-manager/PlaybackManager.d.ts +104 -0
  53. package/dist/ug-core/playback-manager/PlaybackManager.js +121 -4
  54. package/dist/ug-core/playback-manager/PlaybackManager.js.map +1 -1
  55. package/dist/ug-core/playback-manager/audio-player/AudioPlayer.d.ts +156 -0
  56. package/dist/ug-core/playback-manager/audio-player/AudioPlayer.js +156 -0
  57. package/dist/ug-core/playback-manager/audio-player/AudioPlayer.js.map +1 -1
  58. package/dist/ug-core/playback-manager/subtitle-manager/SubtitleManager.js +3 -1
  59. package/dist/ug-core/playback-manager/subtitle-manager/SubtitleManager.js.map +1 -1
  60. package/dist/ug-core/types/index.d.ts +34 -3
  61. package/dist/ug-core/user-input-manager/AudioRecorder.d.ts +49 -0
  62. package/dist/ug-core/user-input-manager/AudioRecorder.js +39 -1
  63. package/dist/ug-core/user-input-manager/AudioRecorder.js.map +1 -1
  64. package/dist/ug-core/user-input-manager/UserInputManager.d.ts +82 -6
  65. package/dist/ug-core/user-input-manager/UserInputManager.js +82 -6
  66. package/dist/ug-core/user-input-manager/UserInputManager.js.map +1 -1
  67. package/dist/ug-core/user-input-manager/VADManager.d.ts +62 -0
  68. package/dist/ug-core/user-input-manager/VADManager.js +99 -8
  69. package/dist/ug-core/user-input-manager/VADManager.js.map +1 -1
  70. package/dist/ug-js-sdk.mjs +1 -1
  71. package/package.json +1 -1
@@ -1,17 +1,71 @@
1
1
  import { EventEmitter } from '../core/EventEmitter';
2
2
  import { InteractResponse, PlaybackCapabilities } from '../types';
3
3
  import { IConversationManager } from '../conversation-manager/types';
4
+ /**
5
+ * Events emitted by the PlaybackManager.
6
+ */
4
7
  export declare const PlaybackManagerEvents: {
8
+ /** Emitted when audio playback starts */
5
9
  readonly Playing: "playing";
10
+ /** Emitted when audio playback is paused */
6
11
  readonly Paused: "paused";
12
+ /** Emitted when a playback error occurs */
7
13
  readonly PlaybackError: "playbackError";
14
+ /** Emitted when subtitle word highlighting changes (karaoke-style) */
8
15
  readonly SubtitleWordChange: "subtitleWordChange";
16
+ /** Emitted when subtitle text changes (new sentence/phrase) */
9
17
  readonly SubtitleChange: "subtitleChange";
18
+ /** Emitted when the displayed image changes */
10
19
  readonly ImageChange: "imageChange";
20
+ /** Emitted ~500ms before playback completes (for pre-loading next content) */
11
21
  readonly AboutToComplete: "aboutToComplete";
22
+ /** Emitted when all audio playback has finished */
12
23
  readonly Finished: "finished";
24
+ /** Emitted when avatar animation state changes */
13
25
  readonly AvatarAnimationChanged: "avatarAnimationChanged";
14
26
  };
27
+ /**
28
+ * Manages playback of assistant responses including audio, subtitles, and avatar animations.
29
+ *
30
+ * The PlaybackManager coordinates multiple sub-components:
31
+ * - **AudioPlayer**: Gap-free MP3 audio playback using Web Audio API
32
+ * - **SubtitleManager**: Real-time captions with word-level highlighting
33
+ * - **VisemeScheduler**: Lip-sync data scheduling (for 3D avatars)
34
+ * - **AvatarManager**: Animation state management (idle, talking, thinking, listening)
35
+ *
36
+ * The manager receives messages from the WebSocket connection and routes them to
37
+ * the appropriate sub-component for synchronized playback.
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const playback = new PlaybackManager({
42
+ * audio: true,
43
+ * subtitles: true,
44
+ * avatar: true,
45
+ * })
46
+ *
47
+ * playback.on(PlaybackManagerEvents.SubtitleChange, (event) => {
48
+ * displaySubtitle(event.subtitle)
49
+ * })
50
+ *
51
+ * playback.on(PlaybackManagerEvents.Finished, () => {
52
+ * console.log('Playback complete')
53
+ * })
54
+ *
55
+ * await playback.initialize()
56
+ *
57
+ * // Messages from server are passed to handleMessage()
58
+ * playback.handleMessage(audioMessage)
59
+ * playback.handleMessage(subtitleMessage)
60
+ * ```
61
+ *
62
+ * @fires PlaybackManagerEvents.Playing - When playback starts
63
+ * @fires PlaybackManagerEvents.Paused - When playback is paused
64
+ * @fires PlaybackManagerEvents.Finished - When all playback completes
65
+ * @fires PlaybackManagerEvents.SubtitleChange - When subtitle text updates
66
+ * @fires PlaybackManagerEvents.SubtitleWordChange - For word-by-word highlighting
67
+ * @fires PlaybackManagerEvents.AvatarAnimationChanged - When avatar state changes
68
+ */
15
69
  export declare class PlaybackManager extends EventEmitter {
16
70
  private capabilities;
17
71
  private audioPlayer;
@@ -20,15 +74,65 @@ export declare class PlaybackManager extends EventEmitter {
20
74
  private isPaused;
21
75
  private hasStarted;
22
76
  private avatarManager;
77
+ /**
78
+ * Creates a new PlaybackManager instance.
79
+ *
80
+ * @param capabilities - Configuration for which playback features are enabled
81
+ * @param capabilities.audio - Enable audio playback (default: true)
82
+ * @param capabilities.subtitles - Enable real-time captions (default: true)
83
+ * @param capabilities.viseme - Enable lip-sync data (default: false)
84
+ * @param capabilities.avatar - Enable avatar animations (default: true)
85
+ */
23
86
  constructor(capabilities: PlaybackCapabilities);
24
87
  private setupChildListeners;
25
88
  resetState(): void;
89
+ /**
90
+ * Initializes the playback manager and its sub-components.
91
+ *
92
+ * Must be called before handling any messages. Initializes the
93
+ * AudioPlayer and prepares the AudioContext.
94
+ */
26
95
  initialize(): Promise<void>;
96
+ /**
97
+ * Handles incoming messages from the server and routes them to appropriate handlers.
98
+ *
99
+ * @param message - The interaction response message from the WebSocket
100
+ *
101
+ * Message types handled:
102
+ * - `audio`: Base64 audio chunk → AudioPlayer
103
+ * - `subtitles`: Caption data → SubtitleManager
104
+ * - `viseme`: Lip-sync data → VisemeScheduler
105
+ * - `audio_complete`: Signals all audio has been sent
106
+ * - `image`: Generated image data
107
+ */
27
108
  handleMessage(message: InteractResponse): void;
28
109
  enqueue(message: InteractResponse): void;
110
+ /**
111
+ * Convert PUG SubtitleUnit[] format to SDK SubtitleMessage format.
112
+ * PUG sends per-character timing as objects; SDK expects parallel arrays.
113
+ */
114
+ private convertSubtitleUnitsToMessage;
29
115
  markAudioComplete(): void;
116
+ /**
117
+ * Starts playback of queued audio, subtitles, and animations.
118
+ *
119
+ * Typically called automatically when enough audio is buffered.
120
+ * Sets avatar to "talking" animation state.
121
+ */
30
122
  play(): Promise<void>;
123
+ /**
124
+ * Pauses all playback.
125
+ *
126
+ * Pauses audio, subtitles, and visemes. Sets avatar to "idle" state.
127
+ * Can be resumed with `resume()`.
128
+ */
31
129
  pause(): Promise<void>;
130
+ /**
131
+ * Resumes paused playback.
132
+ *
133
+ * Continues audio, subtitles, and visemes from where they were paused.
134
+ * Sets avatar back to "talking" state.
135
+ */
32
136
  resume(): Promise<void>;
33
137
  resumeAudioContext(): Promise<void>;
34
138
  /**
@@ -6,17 +6,71 @@ import { SubtitleManager, SubtitleManagerEvents } from './subtitle-manager/Subti
6
6
  import { AudioPlayerEvents } from './types';
7
7
  import { VisemeScheduler } from './viseme-scheduler/VisemeScheduler';
8
8
  import { AvatarManager } from './avatar-manager/AvatarManager';
9
+ /**
10
+ * Events emitted by the PlaybackManager.
11
+ */
9
12
  export const PlaybackManagerEvents = {
13
+ /** Emitted when audio playback starts */
10
14
  Playing: 'playing',
15
+ /** Emitted when audio playback is paused */
11
16
  Paused: 'paused',
17
+ /** Emitted when a playback error occurs */
12
18
  PlaybackError: 'playbackError',
19
+ /** Emitted when subtitle word highlighting changes (karaoke-style) */
13
20
  SubtitleWordChange: 'subtitleWordChange',
21
+ /** Emitted when subtitle text changes (new sentence/phrase) */
14
22
  SubtitleChange: 'subtitleChange',
23
+ /** Emitted when the displayed image changes */
15
24
  ImageChange: 'imageChange',
25
+ /** Emitted ~500ms before playback completes (for pre-loading next content) */
16
26
  AboutToComplete: 'aboutToComplete',
27
+ /** Emitted when all audio playback has finished */
17
28
  Finished: 'finished',
29
+ /** Emitted when avatar animation state changes */
18
30
  AvatarAnimationChanged: 'avatarAnimationChanged',
19
31
  };
32
+ /**
33
+ * Manages playback of assistant responses including audio, subtitles, and avatar animations.
34
+ *
35
+ * The PlaybackManager coordinates multiple sub-components:
36
+ * - **AudioPlayer**: Gap-free MP3 audio playback using Web Audio API
37
+ * - **SubtitleManager**: Real-time captions with word-level highlighting
38
+ * - **VisemeScheduler**: Lip-sync data scheduling (for 3D avatars)
39
+ * - **AvatarManager**: Animation state management (idle, talking, thinking, listening)
40
+ *
41
+ * The manager receives messages from the WebSocket connection and routes them to
42
+ * the appropriate sub-component for synchronized playback.
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const playback = new PlaybackManager({
47
+ * audio: true,
48
+ * subtitles: true,
49
+ * avatar: true,
50
+ * })
51
+ *
52
+ * playback.on(PlaybackManagerEvents.SubtitleChange, (event) => {
53
+ * displaySubtitle(event.subtitle)
54
+ * })
55
+ *
56
+ * playback.on(PlaybackManagerEvents.Finished, () => {
57
+ * console.log('Playback complete')
58
+ * })
59
+ *
60
+ * await playback.initialize()
61
+ *
62
+ * // Messages from server are passed to handleMessage()
63
+ * playback.handleMessage(audioMessage)
64
+ * playback.handleMessage(subtitleMessage)
65
+ * ```
66
+ *
67
+ * @fires PlaybackManagerEvents.Playing - When playback starts
68
+ * @fires PlaybackManagerEvents.Paused - When playback is paused
69
+ * @fires PlaybackManagerEvents.Finished - When all playback completes
70
+ * @fires PlaybackManagerEvents.SubtitleChange - When subtitle text updates
71
+ * @fires PlaybackManagerEvents.SubtitleWordChange - For word-by-word highlighting
72
+ * @fires PlaybackManagerEvents.AvatarAnimationChanged - When avatar state changes
73
+ */
20
74
  export class PlaybackManager extends EventEmitter {
21
75
  capabilities;
22
76
  audioPlayer;
@@ -25,6 +79,15 @@ export class PlaybackManager extends EventEmitter {
25
79
  isPaused = true;
26
80
  hasStarted = false;
27
81
  avatarManager;
82
+ /**
83
+ * Creates a new PlaybackManager instance.
84
+ *
85
+ * @param capabilities - Configuration for which playback features are enabled
86
+ * @param capabilities.audio - Enable audio playback (default: true)
87
+ * @param capabilities.subtitles - Enable real-time captions (default: true)
88
+ * @param capabilities.viseme - Enable lip-sync data (default: false)
89
+ * @param capabilities.avatar - Enable avatar animations (default: true)
90
+ */
28
91
  constructor(capabilities) {
29
92
  const logger = new DefaultLogger({ category: '🎪 PlaybackManager', style: StyleOrange });
30
93
  super(logger);
@@ -72,12 +135,30 @@ export class PlaybackManager extends EventEmitter {
72
135
  this.isPaused = true;
73
136
  this.hasStarted = false;
74
137
  }
138
+ /**
139
+ * Initializes the playback manager and its sub-components.
140
+ *
141
+ * Must be called before handling any messages. Initializes the
142
+ * AudioPlayer and prepares the AudioContext.
143
+ */
75
144
  async initialize() {
76
145
  this.logger.debug('Initialized', this.capabilities);
77
146
  this.isPaused = true;
78
147
  this.hasStarted = false;
79
148
  await this.audioPlayer.initialize();
80
149
  }
150
+ /**
151
+ * Handles incoming messages from the server and routes them to appropriate handlers.
152
+ *
153
+ * @param message - The interaction response message from the WebSocket
154
+ *
155
+ * Message types handled:
156
+ * - `audio`: Base64 audio chunk → AudioPlayer
157
+ * - `subtitles`: Caption data → SubtitleManager
158
+ * - `viseme`: Lip-sync data → VisemeScheduler
159
+ * - `audio_complete`: Signals all audio has been sent
160
+ * - `image`: Generated image data
161
+ */
81
162
  handleMessage(message) {
82
163
  if (message.event === 'audio' || message.event === 'subtitles' || message.event === 'viseme') {
83
164
  this.enqueue(message);
@@ -93,11 +174,29 @@ export class PlaybackManager extends EventEmitter {
93
174
  if (this.capabilities.audio && message.event === 'audio') {
94
175
  const audioMessage = message;
95
176
  this.audioPlayer.enqueue(audioMessage.audio);
177
+ // Handle embedded subtitles from PUG backend (character-level timing)
178
+ if (this.capabilities.subtitles && audioMessage.subtitles?.length) {
179
+ const subtitleMessage = this.convertSubtitleUnitsToMessage(audioMessage.subtitles);
180
+ this.subtitleManager.enqueue(subtitleMessage);
181
+ }
182
+ }
183
+ // Legacy: handle separate subtitle events (kept for backwards compatibility)
184
+ if (this.capabilities.subtitles && message.event === 'subtitles') {
185
+ const subtitleMessage = message;
186
+ this.subtitleManager.enqueue(subtitleMessage);
96
187
  }
97
- // if (this.capabilities.subtitles && message.event === 'subtitles') {
98
- // const subtitleMessage = message as SubtitleMessage
99
- // this.subtitleManager.enqueue(subtitleMessage)
100
- // }
188
+ }
189
+ /**
190
+ * Convert PUG SubtitleUnit[] format to SDK SubtitleMessage format.
191
+ * PUG sends per-character timing as objects; SDK expects parallel arrays.
192
+ */
193
+ convertSubtitleUnitsToMessage(units) {
194
+ return {
195
+ type: 'subtitles',
196
+ characters: units.map((u) => u.text),
197
+ start_times_ms: units.map((u) => Math.round(u.start_time_sec * 1000)),
198
+ durations_ms: units.map((u) => Math.round(u.duration_sec * 1000)),
199
+ };
101
200
  }
102
201
  markAudioComplete() {
103
202
  this.logger.debug('Marking audio as complete');
@@ -105,6 +204,12 @@ export class PlaybackManager extends EventEmitter {
105
204
  this.audioPlayer.markComplete();
106
205
  }
107
206
  }
207
+ /**
208
+ * Starts playback of queued audio, subtitles, and animations.
209
+ *
210
+ * Typically called automatically when enough audio is buffered.
211
+ * Sets avatar to "talking" animation state.
212
+ */
108
213
  async play() {
109
214
  this.isPaused = false;
110
215
  this.hasStarted = true;
@@ -116,6 +221,12 @@ export class PlaybackManager extends EventEmitter {
116
221
  ]);
117
222
  await this.emit(PlaybackManagerEvents.Playing);
118
223
  }
224
+ /**
225
+ * Pauses all playback.
226
+ *
227
+ * Pauses audio, subtitles, and visemes. Sets avatar to "idle" state.
228
+ * Can be resumed with `resume()`.
229
+ */
119
230
  async pause() {
120
231
  this.isPaused = true;
121
232
  this.audioPlayer.pause();
@@ -124,6 +235,12 @@ export class PlaybackManager extends EventEmitter {
124
235
  this.avatarManager.playIdle();
125
236
  await this.emit(PlaybackManagerEvents.Paused);
126
237
  }
238
+ /**
239
+ * Resumes paused playback.
240
+ *
241
+ * Continues audio, subtitles, and visemes from where they were paused.
242
+ * Sets avatar back to "talking" state.
243
+ */
127
244
  async resume() {
128
245
  if (!this.isPaused)
129
246
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"PlaybackManager.js","sourceRoot":"","sources":["../../../src/ug-core/playback-manager/PlaybackManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlaybackManager.js","sourceRoot":"","sources":["../../../src/ug-core/playback-manager/PlaybackManager.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,59 @@
1
1
  import { EventEmitter } from '../../core/EventEmitter';
2
2
  import { IAudioPlayer } from '../types';
3
+ /**
4
+ * Audio player for streaming MP3 playback in the browser.
5
+ *
6
+ * Handles real-time audio streaming by decoding MP3 frames and scheduling
7
+ * playback through the Web Audio API. Used internally by the SDK for
8
+ * text-to-speech audio playback.
9
+ *
10
+ * **Main Methods for Users:**
11
+ * - {@link initialize} - Initialize the audio context (call first, requires user gesture)
12
+ * - {@link play} - Start audio playback
13
+ * - {@link pause} - Pause playback
14
+ * - {@link resume} - Resume paused playback
15
+ * - {@link stop} - Stop playback and clear queue
16
+ * - {@link dispose} - Clean up resources when done
17
+ *
18
+ * **Events emitted:**
19
+ * - `AudioPlayerEvents.Ready` - Audio is ready to play
20
+ * - `AudioPlayerEvents.Playing` - Playback started
21
+ * - `AudioPlayerEvents.Paused` - Playback paused
22
+ * - `AudioPlayerEvents.Stopped` - Playback stopped
23
+ * - `AudioPlayerEvents.Finished` - All audio finished playing
24
+ * - `AudioPlayerEvents.AboutToComplete` - Audio is about to finish (for pre-loading)
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const player = new AudioPlayer();
29
+ *
30
+ * // Initialize (requires user gesture like button click)
31
+ * await player.initialize();
32
+ *
33
+ * // Listen for events
34
+ * player.on(AudioPlayerEvents.Ready, () => player.play());
35
+ * player.on(AudioPlayerEvents.Finished, () => console.log('Done'));
36
+ *
37
+ * // Enqueue audio data (base64 MP3 chunks)
38
+ * player.enqueue(base64AudioChunk);
39
+ * player.markComplete(); // Signal no more audio coming
40
+ *
41
+ * // Control playback
42
+ * await player.pause();
43
+ * await player.resume();
44
+ * await player.stop();
45
+ *
46
+ * // Clean up when done
47
+ * player.dispose();
48
+ * ```
49
+ *
50
+ * @fires AudioPlayerEvents.Ready - When audio is queued and ready to play
51
+ * @fires AudioPlayerEvents.Playing - When playback starts or resumes
52
+ * @fires AudioPlayerEvents.Paused - When playback is paused
53
+ * @fires AudioPlayerEvents.Stopped - When playback is stopped
54
+ * @fires AudioPlayerEvents.Finished - When all audio has finished playing
55
+ * @fires AudioPlayerEvents.AboutToComplete - When audio is about to finish
56
+ */
3
57
  export declare class AudioPlayer extends EventEmitter implements IAudioPlayer {
4
58
  private readonly MIN_CHUNKS_TO_PROCESS;
5
59
  private readonly FLUSH_DELAY_MS;
@@ -27,10 +81,54 @@ export declare class AudioPlayer extends EventEmitter implements IAudioPlayer {
27
81
  private allAudioPlayed;
28
82
  constructor();
29
83
  private setupTimingListeners;
84
+ /**
85
+ * Initialize the audio player and prepare for playback.
86
+ *
87
+ * **Must be called before any other methods.** Should be called in response
88
+ * to a user gesture (click, tap) to ensure the AudioContext can start.
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * // In a button click handler
93
+ * button.onclick = async () => {
94
+ * await player.initialize();
95
+ * // Now ready to receive and play audio
96
+ * };
97
+ * ```
98
+ */
30
99
  initialize(): Promise<void>;
31
100
  private resetState;
32
101
  reset(): void;
102
+ /**
103
+ * Enqueue audio data for playback.
104
+ *
105
+ * Add base64-encoded MP3 audio chunks to the playback queue.
106
+ * Call {@link markComplete} when all audio has been enqueued.
107
+ *
108
+ * @param audioData - Base64-encoded MP3 audio chunk
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * // Enqueue streaming audio chunks
113
+ * player.enqueue(chunk1);
114
+ * player.enqueue(chunk2);
115
+ * player.markComplete(); // Signal end of audio
116
+ * ```
117
+ */
33
118
  enqueue(audioData: string): void;
119
+ /**
120
+ * Signal that all audio has been enqueued.
121
+ *
122
+ * Call this after enqueuing all audio chunks to indicate that no more
123
+ * audio will be added. This triggers the `Finished` event when playback completes.
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * player.enqueue(chunk1);
128
+ * player.enqueue(chunk2);
129
+ * player.markComplete(); // No more audio coming
130
+ * ```
131
+ */
34
132
  markComplete(): void;
35
133
  private processChunkQueue;
36
134
  private decodeBase64ToUint8Array;
@@ -40,10 +138,68 @@ export declare class AudioPlayer extends EventEmitter implements IAudioPlayer {
40
138
  * Decodes frames individually to catch failures
41
139
  */
42
140
  private decodeAudioFrames;
141
+ /**
142
+ * Start audio playback.
143
+ *
144
+ * Begins playing audio from the queue. Emits `Playing` event on success.
145
+ * Does nothing if already playing or queue is empty.
146
+ *
147
+ * @fires AudioPlayerEvents.Playing - When playback starts
148
+ *
149
+ * @example
150
+ * ```typescript
151
+ * player.on(AudioPlayerEvents.Ready, async () => {
152
+ * await player.play();
153
+ * });
154
+ * ```
155
+ */
43
156
  play(): Promise<void>;
44
157
  private schedulePlayback;
158
+ /**
159
+ * Pause audio playback.
160
+ *
161
+ * Suspends the audio context, pausing playback at the current position.
162
+ * Use {@link resume} to continue playback.
163
+ *
164
+ * @fires AudioPlayerEvents.Paused - When playback is paused
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * await player.pause();
169
+ * // Later...
170
+ * await player.resume();
171
+ * ```
172
+ */
45
173
  pause(): Promise<void>;
174
+ /**
175
+ * Resume paused audio playback.
176
+ *
177
+ * Continues playback from where it was paused.
178
+ *
179
+ * @fires AudioPlayerEvents.Playing - When playback resumes
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * await player.pause();
184
+ * // Later...
185
+ * await player.resume();
186
+ * ```
187
+ */
46
188
  resume(): Promise<void>;
189
+ /**
190
+ * Stop audio playback and clear the queue.
191
+ *
192
+ * Immediately stops all playback and clears any queued audio.
193
+ * To play again, you'll need to enqueue new audio.
194
+ *
195
+ * @fires AudioPlayerEvents.Stopped - When playback is stopped
196
+ *
197
+ * @example
198
+ * ```typescript
199
+ * // Stop playback immediately
200
+ * await player.stop();
201
+ * ```
202
+ */
47
203
  stop(): Promise<void>;
48
204
  getCurrentTime(): number;
49
205
  getQueueLength(): number;