UNPKG

one

Version:

One is a React framework for web, iOS, and Android apps.

1 lines • 10.4 kB
{"version":3,"file":"player.js","names":[],"sources":["esm/platform/audio/player.js"],"sourcesContent":["import { createPlayerEvents } from \"./events\";\nimport {\n assertCrossOrigin,\n assertFlag,\n assertPitchQuality,\n assertRate,\n assertSeconds,\n assertTolerance,\n assertVolume,\n normalizeSource,\n rateError,\n resolveUpdateInterval\n} from \"./validate\";\nclass AudioPlayer {\n element;\n playerId;\n removed = false;\n events;\n buffering = false;\n finished = false;\n failure = null;\n // obtain through Audio.createPlayer().\n constructor(element, id, updateIntervalMs) {\n this.element = element;\n this.playerId = id;\n this.events = createPlayerEvents(() => this.getStatus(), updateIntervalMs);\n element.addEventListener(\"waiting\", () => {\n this.buffering = true;\n });\n element.addEventListener(\"playing\", () => {\n this.buffering = false;\n this.failure = null;\n });\n element.addEventListener(\"canplay\", () => {\n this.buffering = false;\n });\n element.addEventListener(\"ended\", () => {\n this.finished = true;\n });\n element.addEventListener(\"error\", () => {\n this.failure = element.error?.message || \"audio playback failed\";\n });\n }\n get id() {\n return this.playerId;\n }\n get currentTime() {\n this.assertUsable(\"currentTime\");\n return this.element.currentTime;\n }\n get duration() {\n this.assertUsable(\"duration\");\n const duration = this.element.duration;\n return Number.isFinite(duration) ? duration : 0;\n }\n get playing() {\n this.assertUsable(\"playing\");\n return !this.element.paused && !this.element.ended;\n }\n get paused() {\n this.assertUsable(\"paused\");\n return this.isLoaded && !this.playing;\n }\n get isLoaded() {\n this.assertUsable(\"isLoaded\");\n return this.element.readyState >= 2;\n }\n get isBuffering() {\n this.assertUsable(\"isBuffering\");\n return this.buffering;\n }\n get isAudioSamplingSupported() {\n return false;\n }\n get loop() {\n this.assertUsable(\"loop\");\n return this.element.loop;\n }\n set loop(value) {\n this.assertUsable(\"loop\");\n assertFlag(value, \"AudioPlayer.loop\");\n this.element.loop = value;\n }\n get muted() {\n this.assertUsable(\"muted\");\n return this.element.muted;\n }\n set muted(value) {\n this.assertUsable(\"muted\");\n assertFlag(value, \"AudioPlayer.muted\");\n this.element.muted = value;\n }\n get volume() {\n this.assertUsable(\"volume\");\n return this.element.volume;\n }\n set volume(value) {\n this.assertUsable(\"volume\");\n assertVolume(value, \"AudioPlayer.volume\");\n this.element.volume = value;\n }\n get playbackRate() {\n this.assertUsable(\"playbackRate\");\n return this.element.playbackRate;\n }\n get shouldCorrectPitch() {\n this.assertUsable(\"shouldCorrectPitch\");\n return this.element.preservesPitch;\n }\n set shouldCorrectPitch(value) {\n this.assertUsable(\"shouldCorrectPitch\");\n assertFlag(value, \"AudioPlayer.shouldCorrectPitch\");\n this.element.preservesPitch = value;\n }\n play() {\n this.assertUsable(\"play\");\n this.finished = false;\n const started = this.element.play();\n if (started && typeof started.catch === \"function\") {\n started.catch((error) => {\n this.failure = error instanceof Error ? error.message : \"audio playback failed\";\n });\n }\n }\n pause() {\n this.assertUsable(\"pause\");\n this.element.pause();\n }\n seekTo(seconds, toleranceMillisBefore, toleranceMillisAfter) {\n this.assertUsable(\"seekTo\");\n assertSeconds(seconds, \"AudioPlayer.seekTo\");\n if (toleranceMillisBefore !== void 0) {\n assertTolerance(toleranceMillisBefore, \"AudioPlayer.seekTo\");\n }\n if (toleranceMillisAfter !== void 0) {\n assertTolerance(toleranceMillisAfter, \"AudioPlayer.seekTo\");\n }\n this.finished = false;\n this.element.currentTime = seconds;\n if (!this.element.seeking) return Promise.resolve();\n return new Promise((resolve) => {\n this.element.addEventListener(\"seeked\", () => resolve(), { once: true });\n });\n }\n replace(source) {\n this.assertUsable(\"replace\");\n const normalized = normalizeSource(source, \"AudioPlayer.replace\");\n this.finished = false;\n this.failure = null;\n if (normalized.uri === void 0) {\n this.element.removeAttribute(\"src\");\n } else {\n this.element.src = normalized.uri;\n }\n this.element.load();\n }\n remove() {\n if (this.removed) return;\n this.removed = true;\n this.events.removeAll();\n this.element.pause();\n this.element.removeAttribute(\"src\");\n this.element.load();\n }\n getStatus() {\n this.assertUsable(\"getStatus\");\n return {\n currentTime: this.currentTime,\n didJustFinish: this.finished,\n duration: this.duration,\n error: this.failure,\n id: this.playerId,\n isBuffering: this.isBuffering,\n isLoaded: this.isLoaded,\n loop: this.loop,\n mute: this.muted,\n playbackRate: this.playbackRate,\n playing: this.playing,\n shouldCorrectPitch: this.shouldCorrectPitch\n };\n }\n setPlaybackRate(rate, pitchCorrectionQuality) {\n this.assertUsable(\"setPlaybackRate\");\n assertRate(rate, \"AudioPlayer.setPlaybackRate\");\n if (pitchCorrectionQuality !== void 0) {\n assertPitchQuality(pitchCorrectionQuality, \"AudioPlayer.setPlaybackRate\");\n }\n if (rate < 0 || rate > 2) throw rateError(\"AudioPlayer.setPlaybackRate\");\n this.element.playbackRate = rate;\n }\n addListener(event, listener) {\n this.assertUsable(\"addListener\");\n return this.events.add(event, listener);\n }\n removeAllListeners() {\n this.events.removeAll();\n }\n assertUsable(verb) {\n if (this.removed) throw new Error(`AudioPlayer.${verb}: the player was removed`);\n }\n}\nfunction createPlayer(source = null, options = {}) {\n const normalized = normalizeSource(source, \"Audio.createPlayer\");\n const updateIntervalMs = resolveUpdateInterval(options, \"Audio.createPlayer\");\n assertCrossOrigin(options.crossOrigin, \"Audio.createPlayer\");\n const element = new Audio();\n element.preload = \"auto\";\n if (options.crossOrigin !== void 0) element.crossOrigin = options.crossOrigin;\n if (normalized.uri !== void 0) element.src = normalized.uri;\n const id = `player-${AudioPlayerId.next++}`;\n return new AudioPlayer(element, id, updateIntervalMs);\n}\nconst AudioPlayerId = { next: 1 };\nexport {\n AudioPlayer,\n createPlayer\n};\n//# sourceMappingURL=player.js.map\n"],"mappings":"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"}