Spaces:
Paused
Paused
Download src/lib/utils/audio.ts from arcticaurora/ai: direct link, hf CLI and curl.
- Browser
- Download file 1.57 kB
-
https://huggingface.co/spaces/arcticaurora/ai/resolve/main/src/lib/utils/audio.ts
- Command line
-
hf download hf://spaces/arcticaurora/ai/src/lib/utils/audio.ts
-
curl -L -o audio.ts https://huggingface.co/spaces/arcticaurora/ai/resolve/main/src/lib/utils/audio.ts
1.57 kB
| export class AudioQueue { | |
| constructor(audioElement) { | |
| this.audio = audioElement; | |
| this.queue = []; | |
| this.current = null; | |
| this.id = null; | |
| this._onEnded = () => this.next(); | |
| this.audio.addEventListener('ended', this._onEnded); | |
| this.onStopped = null; // optional callback | |
| } | |
| setId(newId) { | |
| console.log('Setting audio queue ID to:', newId); | |
| if (this.id !== newId) { | |
| this.stop(); | |
| this.id = newId; | |
| if (this.onStopped) this.onStopped({ event: 'id-change', id: newId }); | |
| } | |
| } | |
| setPlaybackRate(rate) { | |
| console.log('Setting audio playback rate to:', rate); | |
| this.audio.playbackRate = rate; | |
| } | |
| enqueue(url) { | |
| console.log('Enqueuing audio URL:', url); | |
| this.queue.push(url); | |
| // Auto-play if nothing is currently playing or loaded | |
| if (this.audio.paused && !this.current) { | |
| this.next(); | |
| } | |
| } | |
| play() { | |
| if (!this.current && this.queue.length > 0) { | |
| this.next(); | |
| } else { | |
| this.audio.play(); | |
| } | |
| } | |
| next() { | |
| this.current = this.queue.shift(); | |
| if (this.current) { | |
| this.audio.src = this.current; | |
| this.audio.play(); | |
| console.log('Playing audio URL:', this.current); | |
| } else { | |
| this.stop(); | |
| if (this.onStopped) this.onStopped({ event: 'empty-queue', id: this.id }); | |
| } | |
| } | |
| stop() { | |
| this.audio.pause(); | |
| this.audio.currentTime = 0; | |
| this.audio.src = ''; | |
| this.queue = []; | |
| this.current = null; | |
| if (this.onStopped) this.onStopped({ event: 'stop', id: this.id }); | |
| } | |
| destroy() { | |
| this.audio.removeEventListener('ended', this._onEnded); | |
| this.stop(); | |
| this.onStopped = null; | |
| this.audio = null; | |
| } | |
| } | |