@eva/plugin-sound 1.1.1-fix.0 → 1.1.1-fix.3

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.
@@ -516,3 +516,4 @@
516
516
  Object.defineProperty(exports, '__esModule', { value: true });
517
517
 
518
518
  })));
519
+ //# sourceMappingURL=EVA.plugin.sound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EVA.plugin.sound.js","sources":["../../../node_modules/tslib/tslib.es6.js","../lib/SoundSystem.ts","../lib/Sound.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { System, decorators, ComponentChanged, OBSERVER_TYPE, resource } from '@eva/eva.js';\nimport SoundComponent from './Sound';\n\ninterface SoundSystemParams {\n autoPauseAndStart?: boolean;\n onError: (error: any) => void;\n}\n\n@decorators.componentObserver({\n Sound: [],\n})\nclass SoundSystem extends System {\n static systemName = 'SoundSystem';\n\n private ctx: AudioContext;\n\n private gainNode: GainNode;\n\n /** 是否和游戏同步暂停和启动 */\n private autoPauseAndStart = true;\n\n private onError: (error: any) => void;\n\n private components: SoundComponent[] = [];\n\n private pausedComponents: SoundComponent[] = [];\n\n private audioBufferCache = {};\n\n private decodeAudioPromiseMap = {};\n\n get muted(): boolean {\n return this.gainNode ? this.gainNode.gain.value === 0 : false;\n }\n\n set muted(v: boolean) {\n if (!this.gainNode) {\n return;\n }\n this.gainNode.gain.setValueAtTime(v ? 0 : 1, 0);\n }\n\n get volume(): number {\n return this.gainNode ? this.gainNode.gain.value : 1;\n }\n\n set volume(v: number) {\n if (!this.gainNode || typeof v !== 'number' || v < 0 || v > 1) {\n return;\n }\n this.gainNode.gain.setValueAtTime(v, 0);\n }\n\n get audioLocked(): boolean {\n if (!this.ctx) {\n return true;\n }\n return this.ctx.state !== 'running';\n }\n\n constructor(obj?: SoundSystemParams) {\n super();\n Object.assign(this, obj);\n }\n\n /**\n * 恢复播放所有被暂停的音频\n */\n resumeAll() {\n const handleResume = () => {\n this.pausedComponents.forEach(component => {\n component.play();\n });\n // 清理之前缓存的暂停列表\n this.pausedComponents = [];\n };\n this.ctx.resume().then(handleResume, handleResume);\n }\n\n /**\n * 暂停所有正在播放的音频\n */\n pauseAll() {\n this.components.forEach(component => {\n if (component.playing) {\n this.pausedComponents.push(component);\n component.pause();\n }\n });\n this.ctx.suspend().then();\n }\n\n /**\n * 停止所有正在播放的音频\n */\n stopAll() {\n this.components.forEach(component => {\n if (component.playing) {\n component.stop();\n }\n });\n // 清理之前缓存的暂停列表\n this.pausedComponents = [];\n this.ctx.suspend().then();\n }\n\n /**\n * System 初始化用,可以配置参数,游戏未开始\n *\n * System init, set params, game is not begain\n */\n init() {\n this.setupAudioContext();\n }\n\n update() {\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n this.componentChanged(changed);\n }\n }\n\n /**\n * 游戏开始和游戏暂停后开始播放的时候调用。\n *\n * Called while the game to play when game pause.\n */\n onPlay() {\n if (!this.autoPauseAndStart) {\n return;\n }\n this.resumeAll();\n }\n\n /**\n * 游戏暂停的时候调用。\n *\n * Called while the game paused.\n */\n onPause() {\n if (!this.autoPauseAndStart) {\n return;\n }\n this.pauseAll();\n }\n\n /**\n * System 被销毁的时候调用。\n * Called while the system be destroyed.\n */\n onDestroy() {\n this.components.forEach(component => {\n component.onDestroy();\n });\n this.components = [];\n if (this.ctx) {\n this.gainNode.disconnect();\n this.gainNode = null;\n this.ctx.close();\n this.ctx = null;\n }\n }\n\n async componentChanged(changed: ComponentChanged) {\n if (changed.componentName !== 'Sound') {\n return;\n }\n if (changed.type === OBSERVER_TYPE.ADD) {\n this.add(changed);\n }\n }\n\n private setupAudioContext() {\n try {\n const AudioContext = window.AudioContext || (window as any).webkitAudioContext;\n this.ctx = new AudioContext();\n } catch (error) {\n console.error(error);\n if (this.onError) {\n this.onError(error);\n }\n }\n\n if (!this.ctx) {\n return;\n }\n this.gainNode =\n typeof this.ctx.createGain === 'undefined' ? (this.ctx as any).createGainNode() : this.ctx.createGain();\n this.gainNode.gain.setValueAtTime(this.muted ? 0 : this.volume, this.ctx.currentTime);\n this.gainNode.connect(this.ctx.destination);\n this.unlockAudio();\n }\n\n private unlockAudio() {\n if (!this.ctx || !this.audioLocked) {\n return;\n }\n\n const unlock = () => {\n if (this.ctx) {\n const removeListenerFn = () => {\n document.body.removeEventListener('touchstart', unlock);\n document.body.removeEventListener('touchend', unlock);\n document.body.removeEventListener('click', unlock);\n };\n this.ctx.resume().then(removeListenerFn, removeListenerFn);\n }\n };\n document.body.addEventListener('touchstart', unlock);\n document.body.addEventListener('touchend', unlock);\n document.body.addEventListener('click', unlock);\n }\n\n private async add(changed: ComponentChanged) {\n const component = changed.component as SoundComponent;\n this.components.push(component);\n try {\n const { config } = component;\n component.state = 'loading';\n\n const audio = await resource.getResource(config.resource);\n if (!this.audioBufferCache[audio.name]) {\n this.audioBufferCache[audio.name] = await this.decodeAudioData(audio.data.audio, audio.name);\n }\n if (this.audioBufferCache[audio.name]) {\n component.systemContext = this.ctx;\n component.systemDestination = this.gainNode;\n component.onload(this.audioBufferCache[audio.name]);\n }\n } catch (error) {\n console.error(error);\n if (this.onError) {\n this.onError(error);\n }\n }\n }\n\n private decodeAudioData(arraybuffer: ArrayBuffer, name: string) {\n if (this.decodeAudioPromiseMap[name]) {\n return this.decodeAudioPromiseMap[name];\n }\n const promise = new Promise<AudioBuffer>((resolve, reject) => {\n if (!this.ctx) {\n reject(new Error('No audio support'));\n }\n const error = (err: DOMException) => {\n if (this.decodeAudioPromiseMap[name]) {\n delete this.decodeAudioPromiseMap[name];\n }\n reject(new Error(`${err}. arrayBuffer byteLength: ${arraybuffer ? arraybuffer.byteLength : 0}`));\n };\n const success = (decodedData: AudioBuffer) => {\n if (this.decodeAudioPromiseMap[name]) {\n delete this.decodeAudioPromiseMap[name];\n }\n if (decodedData) {\n resolve(decodedData);\n } else {\n reject(new Error(`Error decoding audio ${name}`));\n }\n };\n\n this.ctx.decodeAudioData(arraybuffer, success, error);\n });\n this.decodeAudioPromiseMap[name] = promise;\n return promise;\n }\n}\n\nexport default SoundSystem;\n","import { Component } from '@eva/eva.js';\n\nexport interface SoundParams {\n resource: string;\n autoplay?: boolean;\n muted?: boolean;\n volume?: number;\n loop?: boolean;\n seek?: number;\n duration?: number;\n onEnd?: () => void;\n}\n\nclass Sound extends Component<SoundParams> {\n static componentName = 'Sound';\n\n systemContext: AudioContext;\n\n systemDestination: GainNode;\n\n playing: boolean;\n\n state: 'unloaded' | 'loading' | 'loaded' = 'unloaded';\n\n config: SoundParams = {\n resource: '',\n autoplay: false,\n muted: false,\n volume: 1,\n loop: false,\n seek: 0,\n };\n\n private buffer: AudioBuffer;\n\n private sourceNode: AudioBufferSourceNode;\n\n private gainNode: GainNode;\n\n private paused: boolean;\n\n private playTime: number = 0;\n\n // @ts-ignore\n private startTime: number = 0;\n\n private duration: number = 0;\n\n private actionQueue: (() => void)[] = [];\n\n private endedListener: () => void;\n\n get muted(): boolean {\n return this.gainNode ? this.gainNode.gain.value === 0 : false;\n }\n\n set muted(v: boolean) {\n if (!this.gainNode) {\n return;\n }\n this.gainNode.gain.setValueAtTime(v ? 0 : this.config.volume, 0);\n }\n\n get volume(): number {\n return this.gainNode ? this.gainNode.gain.value : 1;\n }\n\n set volume(v: number) {\n if (typeof v !== 'number' || v < 0 || v > 1) {\n return;\n }\n this.config.volume = v;\n if (!this.gainNode) {\n return;\n }\n this.gainNode.gain.setValueAtTime(v, 0);\n }\n\n init(obj?: SoundParams) {\n if (!obj) {\n return;\n }\n\n Object.assign(this.config, obj);\n if (this.config.autoplay) {\n this.actionQueue.push(this.play.bind(this));\n }\n }\n\n play() {\n if (this.state !== 'loaded') {\n this.actionQueue.push(this.play.bind(this));\n }\n this.destroySource();\n this.createSource();\n\n if (!this.sourceNode) {\n return;\n }\n const when = this.systemContext.currentTime;\n const offset = this.config.seek;\n const duration = this.config.duration;\n\n this.sourceNode.start(0, offset, duration);\n\n this.startTime = when;\n this.playTime = when - offset;\n this.paused = false;\n this.playing = true;\n this.resetConfig();\n this.endedListener = () => {\n if (!this.sourceNode) {\n return;\n }\n if (this.config.onEnd) {\n this.config.onEnd();\n }\n // 非交互事件播放完成需要销毁资源\n if (this.playing) {\n this.destroySource();\n }\n };\n this.sourceNode.addEventListener('ended', this.endedListener);\n }\n\n pause() {\n if (this.state !== 'loaded') {\n this.actionQueue.push(this.pause.bind(this));\n }\n if (this.paused || !this.playing) {\n return;\n }\n this.paused = true;\n this.playing = false;\n this.config.seek = this.getCurrentTime();\n this.destroySource();\n }\n\n stop() {\n if (this.state !== 'loaded') {\n this.actionQueue.push(this.stop.bind(this));\n }\n if (!this.paused && !this.playing) {\n return;\n }\n this.playing = false;\n this.paused = false;\n this.destroySource();\n this.resetConfig();\n }\n\n onload(buffer: AudioBuffer) {\n this.state = 'loaded';\n this.buffer = buffer;\n this.duration = this.buffer.duration;\n this.actionQueue.forEach(action => action());\n this.actionQueue.length = 0;\n }\n\n onDestroy() {\n this.actionQueue.length = 0;\n this.destroySource();\n }\n\n private resetConfig() {\n this.config.seek = 0;\n }\n\n private getCurrentTime() {\n if (this.config.loop && this.duration > 0) {\n return (this.systemContext.currentTime - this.playTime) % this.duration;\n }\n\n return this.systemContext.currentTime - this.playTime;\n }\n\n private createSource() {\n if (!this.systemContext || this.state !== 'loaded') {\n return;\n }\n this.sourceNode = this.systemContext.createBufferSource();\n this.sourceNode.buffer = this.buffer;\n this.sourceNode.loop = this.config.loop;\n\n if (!this.gainNode) {\n this.gainNode = this.systemContext.createGain();\n this.gainNode.connect(this.systemDestination);\n Object.assign(this, this.config);\n }\n this.sourceNode.connect(this.gainNode);\n }\n\n private destroySource() {\n if (!this.sourceNode) return;\n this.sourceNode.removeEventListener('ended', this.endedListener);\n this.sourceNode.stop();\n this.sourceNode.disconnect();\n this.sourceNode = null;\n\n this.startTime = 0;\n this.playTime = 0;\n this.playing = false;\n }\n}\n\nexport default Sound;\n"],"names":["OBSERVER_TYPE","resource","decorators","System","Component"],"mappings":"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"}
@@ -510,3 +510,4 @@ var Sound$1 = Sound;
510
510
 
511
511
  exports.Sound = Sound$1;
512
512
  exports.SoundSystem = SoundSystem$1;
513
+ //# sourceMappingURL=plugin-sound.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-sound.cjs.js","sources":["../lib/SoundSystem.ts","../lib/Sound.ts"],"sourcesContent":["import { System, decorators, ComponentChanged, OBSERVER_TYPE, resource } from '@eva/eva.js';\nimport SoundComponent from './Sound';\n\ninterface SoundSystemParams {\n autoPauseAndStart?: boolean;\n onError: (error: any) => void;\n}\n\n@decorators.componentObserver({\n Sound: [],\n})\nclass SoundSystem extends System {\n static systemName = 'SoundSystem';\n\n private ctx: AudioContext;\n\n private gainNode: GainNode;\n\n /** 是否和游戏同步暂停和启动 */\n private autoPauseAndStart = true;\n\n private onError: (error: any) => void;\n\n private components: SoundComponent[] = [];\n\n private pausedComponents: SoundComponent[] = [];\n\n private audioBufferCache = {};\n\n private decodeAudioPromiseMap = {};\n\n get muted(): boolean {\n return this.gainNode ? this.gainNode.gain.value === 0 : false;\n }\n\n set muted(v: boolean) {\n if (!this.gainNode) {\n return;\n }\n this.gainNode.gain.setValueAtTime(v ? 0 : 1, 0);\n }\n\n get volume(): number {\n return this.gainNode ? this.gainNode.gain.value : 1;\n }\n\n set volume(v: number) {\n if (!this.gainNode || typeof v !== 'number' || v < 0 || v > 1) {\n return;\n }\n this.gainNode.gain.setValueAtTime(v, 0);\n }\n\n get audioLocked(): boolean {\n if (!this.ctx) {\n return true;\n }\n return this.ctx.state !== 'running';\n }\n\n constructor(obj?: SoundSystemParams) {\n super();\n Object.assign(this, obj);\n }\n\n /**\n * 恢复播放所有被暂停的音频\n */\n resumeAll() {\n const handleResume = () => {\n this.pausedComponents.forEach(component => {\n component.play();\n });\n // 清理之前缓存的暂停列表\n this.pausedComponents = [];\n };\n this.ctx.resume().then(handleResume, handleResume);\n }\n\n /**\n * 暂停所有正在播放的音频\n */\n pauseAll() {\n this.components.forEach(component => {\n if (component.playing) {\n this.pausedComponents.push(component);\n component.pause();\n }\n });\n this.ctx.suspend().then();\n }\n\n /**\n * 停止所有正在播放的音频\n */\n stopAll() {\n this.components.forEach(component => {\n if (component.playing) {\n component.stop();\n }\n });\n // 清理之前缓存的暂停列表\n this.pausedComponents = [];\n this.ctx.suspend().then();\n }\n\n /**\n * System 初始化用,可以配置参数,游戏未开始\n *\n * System init, set params, game is not begain\n */\n init() {\n this.setupAudioContext();\n }\n\n update() {\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n this.componentChanged(changed);\n }\n }\n\n /**\n * 游戏开始和游戏暂停后开始播放的时候调用。\n *\n * Called while the game to play when game pause.\n */\n onPlay() {\n if (!this.autoPauseAndStart) {\n return;\n }\n this.resumeAll();\n }\n\n /**\n * 游戏暂停的时候调用。\n *\n * Called while the game paused.\n */\n onPause() {\n if (!this.autoPauseAndStart) {\n return;\n }\n this.pauseAll();\n }\n\n /**\n * System 被销毁的时候调用。\n * Called while the system be destroyed.\n */\n onDestroy() {\n this.components.forEach(component => {\n component.onDestroy();\n });\n this.components = [];\n if (this.ctx) {\n this.gainNode.disconnect();\n this.gainNode = null;\n this.ctx.close();\n this.ctx = null;\n }\n }\n\n async componentChanged(changed: ComponentChanged) {\n if (changed.componentName !== 'Sound') {\n return;\n }\n if (changed.type === OBSERVER_TYPE.ADD) {\n this.add(changed);\n }\n }\n\n private setupAudioContext() {\n try {\n const AudioContext = window.AudioContext || (window as any).webkitAudioContext;\n this.ctx = new AudioContext();\n } catch (error) {\n console.error(error);\n if (this.onError) {\n this.onError(error);\n }\n }\n\n if (!this.ctx) {\n return;\n }\n this.gainNode =\n typeof this.ctx.createGain === 'undefined' ? (this.ctx as any).createGainNode() : this.ctx.createGain();\n this.gainNode.gain.setValueAtTime(this.muted ? 0 : this.volume, this.ctx.currentTime);\n this.gainNode.connect(this.ctx.destination);\n this.unlockAudio();\n }\n\n private unlockAudio() {\n if (!this.ctx || !this.audioLocked) {\n return;\n }\n\n const unlock = () => {\n if (this.ctx) {\n const removeListenerFn = () => {\n document.body.removeEventListener('touchstart', unlock);\n document.body.removeEventListener('touchend', unlock);\n document.body.removeEventListener('click', unlock);\n };\n this.ctx.resume().then(removeListenerFn, removeListenerFn);\n }\n };\n document.body.addEventListener('touchstart', unlock);\n document.body.addEventListener('touchend', unlock);\n document.body.addEventListener('click', unlock);\n }\n\n private async add(changed: ComponentChanged) {\n const component = changed.component as SoundComponent;\n this.components.push(component);\n try {\n const { config } = component;\n component.state = 'loading';\n\n const audio = await resource.getResource(config.resource);\n if (!this.audioBufferCache[audio.name]) {\n this.audioBufferCache[audio.name] = await this.decodeAudioData(audio.data.audio, audio.name);\n }\n if (this.audioBufferCache[audio.name]) {\n component.systemContext = this.ctx;\n component.systemDestination = this.gainNode;\n component.onload(this.audioBufferCache[audio.name]);\n }\n } catch (error) {\n console.error(error);\n if (this.onError) {\n this.onError(error);\n }\n }\n }\n\n private decodeAudioData(arraybuffer: ArrayBuffer, name: string) {\n if (this.decodeAudioPromiseMap[name]) {\n return this.decodeAudioPromiseMap[name];\n }\n const promise = new Promise<AudioBuffer>((resolve, reject) => {\n if (!this.ctx) {\n reject(new Error('No audio support'));\n }\n const error = (err: DOMException) => {\n if (this.decodeAudioPromiseMap[name]) {\n delete this.decodeAudioPromiseMap[name];\n }\n reject(new Error(`${err}. arrayBuffer byteLength: ${arraybuffer ? arraybuffer.byteLength : 0}`));\n };\n const success = (decodedData: AudioBuffer) => {\n if (this.decodeAudioPromiseMap[name]) {\n delete this.decodeAudioPromiseMap[name];\n }\n if (decodedData) {\n resolve(decodedData);\n } else {\n reject(new Error(`Error decoding audio ${name}`));\n }\n };\n\n this.ctx.decodeAudioData(arraybuffer, success, error);\n });\n this.decodeAudioPromiseMap[name] = promise;\n return promise;\n }\n}\n\nexport default SoundSystem;\n","import { Component } from '@eva/eva.js';\n\nexport interface SoundParams {\n resource: string;\n autoplay?: boolean;\n muted?: boolean;\n volume?: number;\n loop?: boolean;\n seek?: number;\n duration?: number;\n onEnd?: () => void;\n}\n\nclass Sound extends Component<SoundParams> {\n static componentName = 'Sound';\n\n systemContext: AudioContext;\n\n systemDestination: GainNode;\n\n playing: boolean;\n\n state: 'unloaded' | 'loading' | 'loaded' = 'unloaded';\n\n config: SoundParams = {\n resource: '',\n autoplay: false,\n muted: false,\n volume: 1,\n loop: false,\n seek: 0,\n };\n\n private buffer: AudioBuffer;\n\n private sourceNode: AudioBufferSourceNode;\n\n private gainNode: GainNode;\n\n private paused: boolean;\n\n private playTime: number = 0;\n\n // @ts-ignore\n private startTime: number = 0;\n\n private duration: number = 0;\n\n private actionQueue: (() => void)[] = [];\n\n private endedListener: () => void;\n\n get muted(): boolean {\n return this.gainNode ? this.gainNode.gain.value === 0 : false;\n }\n\n set muted(v: boolean) {\n if (!this.gainNode) {\n return;\n }\n this.gainNode.gain.setValueAtTime(v ? 0 : this.config.volume, 0);\n }\n\n get volume(): number {\n return this.gainNode ? this.gainNode.gain.value : 1;\n }\n\n set volume(v: number) {\n if (typeof v !== 'number' || v < 0 || v > 1) {\n return;\n }\n this.config.volume = v;\n if (!this.gainNode) {\n return;\n }\n this.gainNode.gain.setValueAtTime(v, 0);\n }\n\n init(obj?: SoundParams) {\n if (!obj) {\n return;\n }\n\n Object.assign(this.config, obj);\n if (this.config.autoplay) {\n this.actionQueue.push(this.play.bind(this));\n }\n }\n\n play() {\n if (this.state !== 'loaded') {\n this.actionQueue.push(this.play.bind(this));\n }\n this.destroySource();\n this.createSource();\n\n if (!this.sourceNode) {\n return;\n }\n const when = this.systemContext.currentTime;\n const offset = this.config.seek;\n const duration = this.config.duration;\n\n this.sourceNode.start(0, offset, duration);\n\n this.startTime = when;\n this.playTime = when - offset;\n this.paused = false;\n this.playing = true;\n this.resetConfig();\n this.endedListener = () => {\n if (!this.sourceNode) {\n return;\n }\n if (this.config.onEnd) {\n this.config.onEnd();\n }\n // 非交互事件播放完成需要销毁资源\n if (this.playing) {\n this.destroySource();\n }\n };\n this.sourceNode.addEventListener('ended', this.endedListener);\n }\n\n pause() {\n if (this.state !== 'loaded') {\n this.actionQueue.push(this.pause.bind(this));\n }\n if (this.paused || !this.playing) {\n return;\n }\n this.paused = true;\n this.playing = false;\n this.config.seek = this.getCurrentTime();\n this.destroySource();\n }\n\n stop() {\n if (this.state !== 'loaded') {\n this.actionQueue.push(this.stop.bind(this));\n }\n if (!this.paused && !this.playing) {\n return;\n }\n this.playing = false;\n this.paused = false;\n this.destroySource();\n this.resetConfig();\n }\n\n onload(buffer: AudioBuffer) {\n this.state = 'loaded';\n this.buffer = buffer;\n this.duration = this.buffer.duration;\n this.actionQueue.forEach(action => action());\n this.actionQueue.length = 0;\n }\n\n onDestroy() {\n this.actionQueue.length = 0;\n this.destroySource();\n }\n\n private resetConfig() {\n this.config.seek = 0;\n }\n\n private getCurrentTime() {\n if (this.config.loop && this.duration > 0) {\n return (this.systemContext.currentTime - this.playTime) % this.duration;\n }\n\n return this.systemContext.currentTime - this.playTime;\n }\n\n private createSource() {\n if (!this.systemContext || this.state !== 'loaded') {\n return;\n }\n this.sourceNode = this.systemContext.createBufferSource();\n this.sourceNode.buffer = this.buffer;\n this.sourceNode.loop = this.config.loop;\n\n if (!this.gainNode) {\n this.gainNode = this.systemContext.createGain();\n this.gainNode.connect(this.systemDestination);\n Object.assign(this, this.config);\n }\n this.sourceNode.connect(this.gainNode);\n }\n\n private destroySource() {\n if (!this.sourceNode) return;\n this.sourceNode.removeEventListener('ended', this.endedListener);\n this.sourceNode.stop();\n this.sourceNode.disconnect();\n this.sourceNode = null;\n\n this.startTime = 0;\n this.playTime = 0;\n this.playing = false;\n }\n}\n\nexport default Sound;\n"],"names":["OBSERVER_TYPE","resource","decorators","System","Component"],"mappings":"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"}
@@ -505,3 +505,4 @@ var Sound = (function (_super) {
505
505
  var Sound$1 = Sound;
506
506
 
507
507
  export { Sound$1 as Sound, SoundSystem$1 as SoundSystem };
508
+ //# sourceMappingURL=plugin-sound.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-sound.esm.js","sources":["../lib/SoundSystem.ts","../lib/Sound.ts"],"sourcesContent":["import { System, decorators, ComponentChanged, OBSERVER_TYPE, resource } from '@eva/eva.js';\nimport SoundComponent from './Sound';\n\ninterface SoundSystemParams {\n autoPauseAndStart?: boolean;\n onError: (error: any) => void;\n}\n\n@decorators.componentObserver({\n Sound: [],\n})\nclass SoundSystem extends System {\n static systemName = 'SoundSystem';\n\n private ctx: AudioContext;\n\n private gainNode: GainNode;\n\n /** 是否和游戏同步暂停和启动 */\n private autoPauseAndStart = true;\n\n private onError: (error: any) => void;\n\n private components: SoundComponent[] = [];\n\n private pausedComponents: SoundComponent[] = [];\n\n private audioBufferCache = {};\n\n private decodeAudioPromiseMap = {};\n\n get muted(): boolean {\n return this.gainNode ? this.gainNode.gain.value === 0 : false;\n }\n\n set muted(v: boolean) {\n if (!this.gainNode) {\n return;\n }\n this.gainNode.gain.setValueAtTime(v ? 0 : 1, 0);\n }\n\n get volume(): number {\n return this.gainNode ? this.gainNode.gain.value : 1;\n }\n\n set volume(v: number) {\n if (!this.gainNode || typeof v !== 'number' || v < 0 || v > 1) {\n return;\n }\n this.gainNode.gain.setValueAtTime(v, 0);\n }\n\n get audioLocked(): boolean {\n if (!this.ctx) {\n return true;\n }\n return this.ctx.state !== 'running';\n }\n\n constructor(obj?: SoundSystemParams) {\n super();\n Object.assign(this, obj);\n }\n\n /**\n * 恢复播放所有被暂停的音频\n */\n resumeAll() {\n const handleResume = () => {\n this.pausedComponents.forEach(component => {\n component.play();\n });\n // 清理之前缓存的暂停列表\n this.pausedComponents = [];\n };\n this.ctx.resume().then(handleResume, handleResume);\n }\n\n /**\n * 暂停所有正在播放的音频\n */\n pauseAll() {\n this.components.forEach(component => {\n if (component.playing) {\n this.pausedComponents.push(component);\n component.pause();\n }\n });\n this.ctx.suspend().then();\n }\n\n /**\n * 停止所有正在播放的音频\n */\n stopAll() {\n this.components.forEach(component => {\n if (component.playing) {\n component.stop();\n }\n });\n // 清理之前缓存的暂停列表\n this.pausedComponents = [];\n this.ctx.suspend().then();\n }\n\n /**\n * System 初始化用,可以配置参数,游戏未开始\n *\n * System init, set params, game is not begain\n */\n init() {\n this.setupAudioContext();\n }\n\n update() {\n const changes = this.componentObserver.clear();\n for (const changed of changes) {\n this.componentChanged(changed);\n }\n }\n\n /**\n * 游戏开始和游戏暂停后开始播放的时候调用。\n *\n * Called while the game to play when game pause.\n */\n onPlay() {\n if (!this.autoPauseAndStart) {\n return;\n }\n this.resumeAll();\n }\n\n /**\n * 游戏暂停的时候调用。\n *\n * Called while the game paused.\n */\n onPause() {\n if (!this.autoPauseAndStart) {\n return;\n }\n this.pauseAll();\n }\n\n /**\n * System 被销毁的时候调用。\n * Called while the system be destroyed.\n */\n onDestroy() {\n this.components.forEach(component => {\n component.onDestroy();\n });\n this.components = [];\n if (this.ctx) {\n this.gainNode.disconnect();\n this.gainNode = null;\n this.ctx.close();\n this.ctx = null;\n }\n }\n\n async componentChanged(changed: ComponentChanged) {\n if (changed.componentName !== 'Sound') {\n return;\n }\n if (changed.type === OBSERVER_TYPE.ADD) {\n this.add(changed);\n }\n }\n\n private setupAudioContext() {\n try {\n const AudioContext = window.AudioContext || (window as any).webkitAudioContext;\n this.ctx = new AudioContext();\n } catch (error) {\n console.error(error);\n if (this.onError) {\n this.onError(error);\n }\n }\n\n if (!this.ctx) {\n return;\n }\n this.gainNode =\n typeof this.ctx.createGain === 'undefined' ? (this.ctx as any).createGainNode() : this.ctx.createGain();\n this.gainNode.gain.setValueAtTime(this.muted ? 0 : this.volume, this.ctx.currentTime);\n this.gainNode.connect(this.ctx.destination);\n this.unlockAudio();\n }\n\n private unlockAudio() {\n if (!this.ctx || !this.audioLocked) {\n return;\n }\n\n const unlock = () => {\n if (this.ctx) {\n const removeListenerFn = () => {\n document.body.removeEventListener('touchstart', unlock);\n document.body.removeEventListener('touchend', unlock);\n document.body.removeEventListener('click', unlock);\n };\n this.ctx.resume().then(removeListenerFn, removeListenerFn);\n }\n };\n document.body.addEventListener('touchstart', unlock);\n document.body.addEventListener('touchend', unlock);\n document.body.addEventListener('click', unlock);\n }\n\n private async add(changed: ComponentChanged) {\n const component = changed.component as SoundComponent;\n this.components.push(component);\n try {\n const { config } = component;\n component.state = 'loading';\n\n const audio = await resource.getResource(config.resource);\n if (!this.audioBufferCache[audio.name]) {\n this.audioBufferCache[audio.name] = await this.decodeAudioData(audio.data.audio, audio.name);\n }\n if (this.audioBufferCache[audio.name]) {\n component.systemContext = this.ctx;\n component.systemDestination = this.gainNode;\n component.onload(this.audioBufferCache[audio.name]);\n }\n } catch (error) {\n console.error(error);\n if (this.onError) {\n this.onError(error);\n }\n }\n }\n\n private decodeAudioData(arraybuffer: ArrayBuffer, name: string) {\n if (this.decodeAudioPromiseMap[name]) {\n return this.decodeAudioPromiseMap[name];\n }\n const promise = new Promise<AudioBuffer>((resolve, reject) => {\n if (!this.ctx) {\n reject(new Error('No audio support'));\n }\n const error = (err: DOMException) => {\n if (this.decodeAudioPromiseMap[name]) {\n delete this.decodeAudioPromiseMap[name];\n }\n reject(new Error(`${err}. arrayBuffer byteLength: ${arraybuffer ? arraybuffer.byteLength : 0}`));\n };\n const success = (decodedData: AudioBuffer) => {\n if (this.decodeAudioPromiseMap[name]) {\n delete this.decodeAudioPromiseMap[name];\n }\n if (decodedData) {\n resolve(decodedData);\n } else {\n reject(new Error(`Error decoding audio ${name}`));\n }\n };\n\n this.ctx.decodeAudioData(arraybuffer, success, error);\n });\n this.decodeAudioPromiseMap[name] = promise;\n return promise;\n }\n}\n\nexport default SoundSystem;\n","import { Component } from '@eva/eva.js';\n\nexport interface SoundParams {\n resource: string;\n autoplay?: boolean;\n muted?: boolean;\n volume?: number;\n loop?: boolean;\n seek?: number;\n duration?: number;\n onEnd?: () => void;\n}\n\nclass Sound extends Component<SoundParams> {\n static componentName = 'Sound';\n\n systemContext: AudioContext;\n\n systemDestination: GainNode;\n\n playing: boolean;\n\n state: 'unloaded' | 'loading' | 'loaded' = 'unloaded';\n\n config: SoundParams = {\n resource: '',\n autoplay: false,\n muted: false,\n volume: 1,\n loop: false,\n seek: 0,\n };\n\n private buffer: AudioBuffer;\n\n private sourceNode: AudioBufferSourceNode;\n\n private gainNode: GainNode;\n\n private paused: boolean;\n\n private playTime: number = 0;\n\n // @ts-ignore\n private startTime: number = 0;\n\n private duration: number = 0;\n\n private actionQueue: (() => void)[] = [];\n\n private endedListener: () => void;\n\n get muted(): boolean {\n return this.gainNode ? this.gainNode.gain.value === 0 : false;\n }\n\n set muted(v: boolean) {\n if (!this.gainNode) {\n return;\n }\n this.gainNode.gain.setValueAtTime(v ? 0 : this.config.volume, 0);\n }\n\n get volume(): number {\n return this.gainNode ? this.gainNode.gain.value : 1;\n }\n\n set volume(v: number) {\n if (typeof v !== 'number' || v < 0 || v > 1) {\n return;\n }\n this.config.volume = v;\n if (!this.gainNode) {\n return;\n }\n this.gainNode.gain.setValueAtTime(v, 0);\n }\n\n init(obj?: SoundParams) {\n if (!obj) {\n return;\n }\n\n Object.assign(this.config, obj);\n if (this.config.autoplay) {\n this.actionQueue.push(this.play.bind(this));\n }\n }\n\n play() {\n if (this.state !== 'loaded') {\n this.actionQueue.push(this.play.bind(this));\n }\n this.destroySource();\n this.createSource();\n\n if (!this.sourceNode) {\n return;\n }\n const when = this.systemContext.currentTime;\n const offset = this.config.seek;\n const duration = this.config.duration;\n\n this.sourceNode.start(0, offset, duration);\n\n this.startTime = when;\n this.playTime = when - offset;\n this.paused = false;\n this.playing = true;\n this.resetConfig();\n this.endedListener = () => {\n if (!this.sourceNode) {\n return;\n }\n if (this.config.onEnd) {\n this.config.onEnd();\n }\n // 非交互事件播放完成需要销毁资源\n if (this.playing) {\n this.destroySource();\n }\n };\n this.sourceNode.addEventListener('ended', this.endedListener);\n }\n\n pause() {\n if (this.state !== 'loaded') {\n this.actionQueue.push(this.pause.bind(this));\n }\n if (this.paused || !this.playing) {\n return;\n }\n this.paused = true;\n this.playing = false;\n this.config.seek = this.getCurrentTime();\n this.destroySource();\n }\n\n stop() {\n if (this.state !== 'loaded') {\n this.actionQueue.push(this.stop.bind(this));\n }\n if (!this.paused && !this.playing) {\n return;\n }\n this.playing = false;\n this.paused = false;\n this.destroySource();\n this.resetConfig();\n }\n\n onload(buffer: AudioBuffer) {\n this.state = 'loaded';\n this.buffer = buffer;\n this.duration = this.buffer.duration;\n this.actionQueue.forEach(action => action());\n this.actionQueue.length = 0;\n }\n\n onDestroy() {\n this.actionQueue.length = 0;\n this.destroySource();\n }\n\n private resetConfig() {\n this.config.seek = 0;\n }\n\n private getCurrentTime() {\n if (this.config.loop && this.duration > 0) {\n return (this.systemContext.currentTime - this.playTime) % this.duration;\n }\n\n return this.systemContext.currentTime - this.playTime;\n }\n\n private createSource() {\n if (!this.systemContext || this.state !== 'loaded') {\n return;\n }\n this.sourceNode = this.systemContext.createBufferSource();\n this.sourceNode.buffer = this.buffer;\n this.sourceNode.loop = this.config.loop;\n\n if (!this.gainNode) {\n this.gainNode = this.systemContext.createGain();\n this.gainNode.connect(this.systemDestination);\n Object.assign(this, this.config);\n }\n this.sourceNode.connect(this.gainNode);\n }\n\n private destroySource() {\n if (!this.sourceNode) return;\n this.sourceNode.removeEventListener('ended', this.endedListener);\n this.sourceNode.stop();\n this.sourceNode.disconnect();\n this.sourceNode = null;\n\n this.startTime = 0;\n this.playTime = 0;\n this.playing = false;\n }\n}\n\nexport default Sound;\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eva/plugin-sound",
3
- "version": "1.1.1-fix.0",
3
+ "version": "1.1.1-fix.3",
4
4
  "description": "@eva/plugin-sound",
5
5
  "main": "index.js",
6
6
  "module": "dist/plugin-sound.esm.js",
@@ -18,7 +18,7 @@
18
18
  "license": "MIT",
19
19
  "homepage": "https://eva.js.org",
20
20
  "dependencies": {
21
- "@eva/eva.js": "1.1.1-fix.0",
21
+ "@eva/eva.js": "1.1.1-fix.3",
22
22
  "eventemitter3": "^3.1.2"
23
23
  }
24
24
  }
@@ -1,425 +0,0 @@
1
- import { windowAlias, documentAlias } from '@eva/miniprogram-adapter';
2
- import { __extends, __values, __awaiter, __generator, __decorate } from 'tslib';
3
- import { OBSERVER_TYPE, resource, decorators, System, Component } from '@eva/eva.js/dist/miniprogram';
4
-
5
- var SoundSystem = (function (_super) {
6
- __extends(SoundSystem, _super);
7
- function SoundSystem(obj) {
8
- var _this = _super.call(this) || this;
9
- _this.autoPauseAndStart = true;
10
- _this.components = [];
11
- _this.pausedComponents = [];
12
- _this.audioBufferCache = {};
13
- _this.decodeAudioPromiseMap = {};
14
- Object.assign(_this, obj);
15
- return _this;
16
- }
17
- Object.defineProperty(SoundSystem.prototype, "muted", {
18
- get: function () {
19
- return this.gainNode ? this.gainNode.gain.value === 0 : false;
20
- },
21
- set: function (v) {
22
- if (!this.gainNode) {
23
- return;
24
- }
25
- this.gainNode.gain.setValueAtTime(v ? 0 : 1, 0);
26
- },
27
- enumerable: false,
28
- configurable: true
29
- });
30
- Object.defineProperty(SoundSystem.prototype, "volume", {
31
- get: function () {
32
- return this.gainNode ? this.gainNode.gain.value : 1;
33
- },
34
- set: function (v) {
35
- if (!this.gainNode || typeof v !== 'number' || v < 0 || v > 1) {
36
- return;
37
- }
38
- this.gainNode.gain.setValueAtTime(v, 0);
39
- },
40
- enumerable: false,
41
- configurable: true
42
- });
43
- Object.defineProperty(SoundSystem.prototype, "audioLocked", {
44
- get: function () {
45
- if (!this.ctx) {
46
- return true;
47
- }
48
- return this.ctx.state !== 'running';
49
- },
50
- enumerable: false,
51
- configurable: true
52
- });
53
- SoundSystem.prototype.resumeAll = function () {
54
- var _this = this;
55
- var handleResume = function () {
56
- _this.pausedComponents.forEach(function (component) {
57
- component.play();
58
- });
59
- _this.pausedComponents = [];
60
- };
61
- this.ctx.resume().then(handleResume, handleResume);
62
- };
63
- SoundSystem.prototype.pauseAll = function () {
64
- var _this = this;
65
- this.components.forEach(function (component) {
66
- if (component.playing) {
67
- _this.pausedComponents.push(component);
68
- component.pause();
69
- }
70
- });
71
- this.ctx.suspend().then();
72
- };
73
- SoundSystem.prototype.stopAll = function () {
74
- this.components.forEach(function (component) {
75
- if (component.playing) {
76
- component.stop();
77
- }
78
- });
79
- this.pausedComponents = [];
80
- this.ctx.suspend().then();
81
- };
82
- SoundSystem.prototype.init = function () {
83
- this.setupAudioContext();
84
- };
85
- SoundSystem.prototype.update = function () {
86
- var e_1, _a;
87
- var changes = this.componentObserver.clear();
88
- try {
89
- for (var changes_1 = __values(changes), changes_1_1 = changes_1.next(); !changes_1_1.done; changes_1_1 = changes_1.next()) {
90
- var changed = changes_1_1.value;
91
- this.componentChanged(changed);
92
- }
93
- }
94
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
95
- finally {
96
- try {
97
- if (changes_1_1 && !changes_1_1.done && (_a = changes_1.return)) _a.call(changes_1);
98
- }
99
- finally { if (e_1) throw e_1.error; }
100
- }
101
- };
102
- SoundSystem.prototype.onPlay = function () {
103
- if (!this.autoPauseAndStart) {
104
- return;
105
- }
106
- this.resumeAll();
107
- };
108
- SoundSystem.prototype.onPause = function () {
109
- if (!this.autoPauseAndStart) {
110
- return;
111
- }
112
- this.pauseAll();
113
- };
114
- SoundSystem.prototype.onDestroy = function () {
115
- this.components.forEach(function (component) {
116
- component.onDestroy();
117
- });
118
- this.components = [];
119
- if (this.ctx) {
120
- this.gainNode.disconnect();
121
- this.gainNode = null;
122
- this.ctx.close();
123
- this.ctx = null;
124
- }
125
- };
126
- SoundSystem.prototype.componentChanged = function (changed) {
127
- return __awaiter(this, void 0, void 0, function () {
128
- return __generator(this, function (_a) {
129
- if (changed.componentName !== 'Sound') {
130
- return [2];
131
- }
132
- if (changed.type === OBSERVER_TYPE.ADD) {
133
- this.add(changed);
134
- }
135
- return [2];
136
- });
137
- });
138
- };
139
- SoundSystem.prototype.setupAudioContext = function () {
140
- try {
141
- var AudioContext_1 = windowAlias.AudioContext || windowAlias.webkitAudioContext;
142
- this.ctx = new AudioContext_1();
143
- }
144
- catch (error) {
145
- console.error(error);
146
- if (this.onError) {
147
- this.onError(error);
148
- }
149
- }
150
- if (!this.ctx) {
151
- return;
152
- }
153
- this.gainNode =
154
- typeof this.ctx.createGain === 'undefined' ? this.ctx.createGainNode() : this.ctx.createGain();
155
- this.gainNode.gain.setValueAtTime(this.muted ? 0 : this.volume, this.ctx.currentTime);
156
- this.gainNode.connect(this.ctx.destination);
157
- this.unlockAudio();
158
- };
159
- SoundSystem.prototype.unlockAudio = function () {
160
- var _this = this;
161
- if (!this.ctx || !this.audioLocked) {
162
- return;
163
- }
164
- var unlock = function () {
165
- if (_this.ctx) {
166
- var removeListenerFn = function () {
167
- documentAlias.body.removeEventListener('touchstart', unlock);
168
- documentAlias.body.removeEventListener('touchend', unlock);
169
- documentAlias.body.removeEventListener('click', unlock);
170
- };
171
- _this.ctx.resume().then(removeListenerFn, removeListenerFn);
172
- }
173
- };
174
- documentAlias.body.addEventListener('touchstart', unlock);
175
- documentAlias.body.addEventListener('touchend', unlock);
176
- documentAlias.body.addEventListener('click', unlock);
177
- };
178
- SoundSystem.prototype.add = function (changed) {
179
- return __awaiter(this, void 0, void 0, function () {
180
- var component, config, audio, _a, _b, error_1;
181
- return __generator(this, function (_c) {
182
- switch (_c.label) {
183
- case 0:
184
- component = changed.component;
185
- this.components.push(component);
186
- _c.label = 1;
187
- case 1:
188
- _c.trys.push([1, 5, , 6]);
189
- config = component.config;
190
- component.state = 'loading';
191
- return [4, resource.getResource(config.resource)];
192
- case 2:
193
- audio = _c.sent();
194
- if (!!this.audioBufferCache[audio.name]) return [3, 4];
195
- _a = this.audioBufferCache;
196
- _b = audio.name;
197
- return [4, this.decodeAudioData(audio.data.audio, audio.name)];
198
- case 3:
199
- _a[_b] = _c.sent();
200
- _c.label = 4;
201
- case 4:
202
- if (this.audioBufferCache[audio.name]) {
203
- component.systemContext = this.ctx;
204
- component.systemDestination = this.gainNode;
205
- component.onload(this.audioBufferCache[audio.name]);
206
- }
207
- return [3, 6];
208
- case 5:
209
- error_1 = _c.sent();
210
- console.error(error_1);
211
- if (this.onError) {
212
- this.onError(error_1);
213
- }
214
- return [3, 6];
215
- case 6: return [2];
216
- }
217
- });
218
- });
219
- };
220
- SoundSystem.prototype.decodeAudioData = function (arraybuffer, name) {
221
- var _this = this;
222
- if (this.decodeAudioPromiseMap[name]) {
223
- return this.decodeAudioPromiseMap[name];
224
- }
225
- var promise = new Promise(function (resolve, reject) {
226
- if (!_this.ctx) {
227
- reject(new Error('No audio support'));
228
- }
229
- var error = function (err) {
230
- if (_this.decodeAudioPromiseMap[name]) {
231
- delete _this.decodeAudioPromiseMap[name];
232
- }
233
- reject(new Error(err + ". arrayBuffer byteLength: " + (arraybuffer ? arraybuffer.byteLength : 0)));
234
- };
235
- var success = function (decodedData) {
236
- if (_this.decodeAudioPromiseMap[name]) {
237
- delete _this.decodeAudioPromiseMap[name];
238
- }
239
- if (decodedData) {
240
- resolve(decodedData);
241
- }
242
- else {
243
- reject(new Error("Error decoding audio " + name));
244
- }
245
- };
246
- _this.ctx.decodeAudioData(arraybuffer, success, error);
247
- });
248
- this.decodeAudioPromiseMap[name] = promise;
249
- return promise;
250
- };
251
- SoundSystem.systemName = 'SoundSystem';
252
- SoundSystem = __decorate([
253
- decorators.componentObserver({
254
- Sound: [],
255
- })
256
- ], SoundSystem);
257
- return SoundSystem;
258
- }(System));
259
- var SoundSystem$1 = SoundSystem;
260
-
261
- var Sound = (function (_super) {
262
- __extends(Sound, _super);
263
- function Sound() {
264
- var _this = _super !== null && _super.apply(this, arguments) || this;
265
- _this.state = 'unloaded';
266
- _this.config = {
267
- resource: '',
268
- autoplay: false,
269
- muted: false,
270
- volume: 1,
271
- loop: false,
272
- seek: 0,
273
- };
274
- _this.playTime = 0;
275
- _this.startTime = 0;
276
- _this.duration = 0;
277
- _this.actionQueue = [];
278
- return _this;
279
- }
280
- Object.defineProperty(Sound.prototype, "muted", {
281
- get: function () {
282
- return this.gainNode ? this.gainNode.gain.value === 0 : false;
283
- },
284
- set: function (v) {
285
- if (!this.gainNode) {
286
- return;
287
- }
288
- this.gainNode.gain.setValueAtTime(v ? 0 : this.config.volume, 0);
289
- },
290
- enumerable: false,
291
- configurable: true
292
- });
293
- Object.defineProperty(Sound.prototype, "volume", {
294
- get: function () {
295
- return this.gainNode ? this.gainNode.gain.value : 1;
296
- },
297
- set: function (v) {
298
- if (typeof v !== 'number' || v < 0 || v > 1) {
299
- return;
300
- }
301
- this.config.volume = v;
302
- if (!this.gainNode) {
303
- return;
304
- }
305
- this.gainNode.gain.setValueAtTime(v, 0);
306
- },
307
- enumerable: false,
308
- configurable: true
309
- });
310
- Sound.prototype.init = function (obj) {
311
- if (!obj) {
312
- return;
313
- }
314
- Object.assign(this.config, obj);
315
- if (this.config.autoplay) {
316
- this.actionQueue.push(this.play.bind(this));
317
- }
318
- };
319
- Sound.prototype.play = function () {
320
- var _this = this;
321
- if (this.state !== 'loaded') {
322
- this.actionQueue.push(this.play.bind(this));
323
- }
324
- this.destroySource();
325
- this.createSource();
326
- if (!this.sourceNode) {
327
- return;
328
- }
329
- var when = this.systemContext.currentTime;
330
- var offset = this.config.seek;
331
- var duration = this.config.duration;
332
- this.sourceNode.start(0, offset, duration);
333
- this.startTime = when;
334
- this.playTime = when - offset;
335
- this.paused = false;
336
- this.playing = true;
337
- this.resetConfig();
338
- this.endedListener = function () {
339
- if (!_this.sourceNode) {
340
- return;
341
- }
342
- if (_this.config.onEnd) {
343
- _this.config.onEnd();
344
- }
345
- if (_this.playing) {
346
- _this.destroySource();
347
- }
348
- };
349
- this.sourceNode.addEventListener('ended', this.endedListener);
350
- };
351
- Sound.prototype.pause = function () {
352
- if (this.state !== 'loaded') {
353
- this.actionQueue.push(this.pause.bind(this));
354
- }
355
- if (this.paused || !this.playing) {
356
- return;
357
- }
358
- this.paused = true;
359
- this.playing = false;
360
- this.config.seek = this.getCurrentTime();
361
- this.destroySource();
362
- };
363
- Sound.prototype.stop = function () {
364
- if (this.state !== 'loaded') {
365
- this.actionQueue.push(this.stop.bind(this));
366
- }
367
- if (!this.paused && !this.playing) {
368
- return;
369
- }
370
- this.playing = false;
371
- this.paused = false;
372
- this.destroySource();
373
- this.resetConfig();
374
- };
375
- Sound.prototype.onload = function (buffer) {
376
- this.state = 'loaded';
377
- this.buffer = buffer;
378
- this.duration = this.buffer.duration;
379
- this.actionQueue.forEach(function (action) { return action(); });
380
- this.actionQueue.length = 0;
381
- };
382
- Sound.prototype.onDestroy = function () {
383
- this.actionQueue.length = 0;
384
- this.destroySource();
385
- };
386
- Sound.prototype.resetConfig = function () {
387
- this.config.seek = 0;
388
- };
389
- Sound.prototype.getCurrentTime = function () {
390
- if (this.config.loop && this.duration > 0) {
391
- return (this.systemContext.currentTime - this.playTime) % this.duration;
392
- }
393
- return this.systemContext.currentTime - this.playTime;
394
- };
395
- Sound.prototype.createSource = function () {
396
- if (!this.systemContext || this.state !== 'loaded') {
397
- return;
398
- }
399
- this.sourceNode = this.systemContext.createBufferSource();
400
- this.sourceNode.buffer = this.buffer;
401
- this.sourceNode.loop = this.config.loop;
402
- if (!this.gainNode) {
403
- this.gainNode = this.systemContext.createGain();
404
- this.gainNode.connect(this.systemDestination);
405
- Object.assign(this, this.config);
406
- }
407
- this.sourceNode.connect(this.gainNode);
408
- };
409
- Sound.prototype.destroySource = function () {
410
- if (!this.sourceNode)
411
- return;
412
- this.sourceNode.removeEventListener('ended', this.endedListener);
413
- this.sourceNode.stop();
414
- this.sourceNode.disconnect();
415
- this.sourceNode = null;
416
- this.startTime = 0;
417
- this.playTime = 0;
418
- this.playing = false;
419
- };
420
- Sound.componentName = 'Sound';
421
- return Sound;
422
- }(Component));
423
- var Sound$1 = Sound;
424
-
425
- export { Sound$1 as Sound, SoundSystem$1 as SoundSystem };