UNPKG

@pixi/sound

Version:

WebAudio API playback library with filters

1 lines 8.21 kB
{"version":3,"file":"HTMLAudioMedia.mjs","sources":["../../src/htmlaudio/HTMLAudioMedia.ts"],"sourcesContent":["import { EventEmitter } from 'pixi.js';\nimport { Filter } from '../filters/Filter';\nimport { IMedia } from '../interfaces/IMedia';\nimport { LoadedCallback, Sound } from '../Sound';\nimport { HTMLAudioContext } from './HTMLAudioContext';\nimport { HTMLAudioInstance } from './HTMLAudioInstance';\n\n/**\n * The fallback version of Sound which uses `<audio>` instead of WebAudio API.\n * @memberof htmlaudio\n * @extends PIXI.EventEmitter\n */\nclass HTMLAudioMedia extends EventEmitter implements IMedia\n{\n public parent: Sound;\n private _source: HTMLAudioElement;\n\n public init(parent: Sound): void\n {\n this.parent = parent;\n this._source = parent.options.source as HTMLAudioElement || new Audio();\n if (parent.url)\n {\n this._source.src = parent.url;\n }\n }\n\n // Implement create\n public create(): HTMLAudioInstance\n {\n return new HTMLAudioInstance(this);\n }\n\n /**\n * If the audio media is playable (ready).\n * @readonly\n */\n public get isPlayable(): boolean\n {\n return !!this._source && this._source.readyState === 4;\n }\n\n /**\n * THe duration of the media in seconds.\n * @readonly\n */\n public get duration(): number\n {\n return this._source.duration;\n }\n\n /**\n * Reference to the context.\n * @readonly\n */\n public get context(): HTMLAudioContext\n {\n return this.parent.context as HTMLAudioContext;\n }\n\n /** The collection of filters, does not apply to HTML Audio. */\n public get filters(): Filter[]\n {\n return null;\n }\n public set filters(_filters: Filter[])\n {\n console.warn('HTML Audio does not support filters');\n }\n\n // Override the destroy\n public destroy(): void\n {\n this.removeAllListeners();\n\n this.parent = null;\n\n if (this._source)\n {\n this._source.src = '';\n this._source.load();\n this._source = null;\n }\n }\n\n /**\n * Get the audio source element.\n * @type {HTMLAudioElement}\n * @readonly\n */\n public get source(): HTMLAudioElement\n {\n return this._source;\n }\n\n // Implement the method to being preloading\n public load(callback?: LoadedCallback): void\n {\n const source = this._source;\n const sound = this.parent;\n\n // See if the source is already loaded\n if (source.readyState === 4)\n {\n sound.isLoaded = true;\n const instance = sound.autoPlayStart();\n\n if (callback)\n {\n setTimeout(() =>\n {\n callback(null, sound, instance);\n }, 0);\n }\n\n return;\n }\n\n // If there's no source, we cannot load\n if (!sound.url)\n {\n callback(new Error('sound.url or sound.source must be set'));\n\n return;\n }\n\n // Set the source\n source.src = sound.url;\n\n const onLoad = () =>\n {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n removeListeners();\n sound.isLoaded = true;\n const instance = sound.autoPlayStart();\n\n if (callback)\n {\n callback(null, sound, instance);\n }\n };\n\n const onAbort = () =>\n {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n removeListeners();\n if (callback)\n {\n callback(new Error('Sound loading has been aborted'));\n }\n };\n\n const onError = () =>\n {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n removeListeners();\n const message = `Failed to load audio element (code: ${source.error.code})`;\n\n if (callback)\n {\n callback(new Error(message));\n }\n else\n {\n console.error(message);\n }\n };\n\n // Remove all event listeners\n const removeListeners = () =>\n {\n // Listen for callback\n source.removeEventListener('canplaythrough', onLoad);\n source.removeEventListener('load', onLoad);\n source.removeEventListener('abort', onAbort);\n source.removeEventListener('error', onError);\n };\n\n // Listen for callback\n source.addEventListener('canplaythrough', onLoad, false);\n source.addEventListener('load', onLoad, false);\n source.addEventListener('abort', onAbort, false);\n source.addEventListener('error', onError, false);\n\n // Begin the loading\n source.load();\n }\n}\n\nexport { HTMLAudioMedia };\n"],"names":[],"mappings":"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"}