mirror of
https://github.com/smallmain/cocos-enhance-kit.git
synced 2025-01-14 23:11:06 +00:00
70 lines
2.2 KiB
JavaScript
70 lines
2.2 KiB
JavaScript
|
const Audio = cc._Audio;
|
||
|
|
||
|
if (Audio) {
|
||
|
let originGetDuration = Audio.prototype.getDuration;
|
||
|
Object.assign(Audio.prototype, {
|
||
|
_createElement () {
|
||
|
let elem = this._src._nativeAsset;
|
||
|
// Reuse dom audio element
|
||
|
if (!this._element) {
|
||
|
this._element = __globalAdapter.createInnerAudioContext();
|
||
|
}
|
||
|
this._element.src = elem.src;
|
||
|
},
|
||
|
|
||
|
destroy () {
|
||
|
if (this._element) {
|
||
|
this._element.destroy();
|
||
|
this._element = null;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
setCurrentTime (num) {
|
||
|
let self = this;
|
||
|
this._src && this._src._ensureLoaded(function () {
|
||
|
self._element.seek(num);
|
||
|
});
|
||
|
},
|
||
|
|
||
|
stop () {
|
||
|
let self = this;
|
||
|
this._src && this._src._ensureLoaded(function () {
|
||
|
// HACK: some platforms won't set currentTime to 0 when stop audio
|
||
|
self._element.seek(0);
|
||
|
self._element.stop();
|
||
|
self._unbindEnded();
|
||
|
self.emit('stop');
|
||
|
self._state = Audio.State.STOPPED;
|
||
|
});
|
||
|
},
|
||
|
|
||
|
_bindEnded () {
|
||
|
let elem = this._element;
|
||
|
if (elem && elem.onEnded && !this._onended._binded) {
|
||
|
this._onended._binded = true;
|
||
|
elem.onEnded(this._onended);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
_unbindEnded () {
|
||
|
let elem = this._element;
|
||
|
if (elem && elem.offEnded && this._onended._binded) {
|
||
|
this._onended._binded = false;
|
||
|
elem.offEnded && elem.offEnded(this._onended);
|
||
|
}
|
||
|
},
|
||
|
|
||
|
getDuration () {
|
||
|
let duration = originGetDuration.call(this);
|
||
|
// HACK: in mini game, if dynamicly load audio, can't get duration from audioClip
|
||
|
// because duration is not coming from audio deserialization
|
||
|
duration = duration || (this._element ? this._element.duration : 0);
|
||
|
return duration;
|
||
|
},
|
||
|
|
||
|
// adapt some special operations on web platform
|
||
|
_touchToPlay () { },
|
||
|
_forceUpdatingState () { },
|
||
|
});
|
||
|
}
|