) {
+ set_player_state(opts);
+ _src.set(src);
+}
+
+function play() {
+ // Incase of a missmatch between the html and js, we first pause and then play
+ _paused.set(true);
+ _paused.set(false);
+}
+function pause() {
+ // Incase of a missmatch between the html and js, we first play and then pause
+ _paused.set(false);
+ _paused.set(true);
+}
+
+export const audio = {
+ subscribe: state.subscribe,
+ currentTime: { subscribe: _currentTime.subscribe },
+ duration: { subscribe: _duration.subscribe },
+ muted: { subscribe: _muted.subscribe },
+ paused: { subscribe: _paused.subscribe },
+ playbackRate: { subscribe: _playbackRate.subscribe },
+ volume: { subscribe: _volume.subscribe },
+
+ load,
+ unload,
+
+ seek: (value: number) => {
+ console.log('seek', value);
+ // let duration = 0
+ // _duration.subscribe(d => duration = d)
+ return _duration.subscribe((dur) => {
+ _seek.set(clamp(0, dur, value));
+ });
+ },
+
+ toggle_mute: () => _muted.update((previous) => !previous),
+ unmute: () => _muted.set(false),
+ mute: () => _muted.set(true),
+
+ toggle_pause: () => _paused.update((previous) => !previous),
+ play,
+ pause: () => _paused.set(true),
+
+ setVolume: (value: number) => _volume.set(clamp(0, 1, value)),
+ setPlaybackRate: (value: number) => _playbackRate.set(clamp(0, 10, value)),
+};
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 9b946d7..e9483dd 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -1,67 +1,59 @@
+
+ {JSON.stringify($audio, null, 3)}
+
+
Demo
-Native audio controls
-