UNPKG

@animech-public/playcanvas

Version:
2 lines (1 loc) 1.84 kB
import{path as o}from"../../core/path.js";import{Http as t,http as e}from"../../platform/net/http.js";import{hasAudioContext as n}from"../../platform/audio/capabilities.js";import{Sound as r}from"../../platform/sound/sound.js";import{ResourceHandler as i}from"./handler.js";const s=function(){if("undefined"==typeof window)return!1;const o=window.navigator.userAgent,t=o.indexOf("MSIE ");if(t>0)return parseInt(o.substring(t+5,o.indexOf(".",t)),10);if(o.indexOf("Trident/")>0){const t=o.indexOf("rv:");return parseInt(o.substring(t+3,o.indexOf(".",t)),10)}return!1}(),a=[".ogg",".mp3",".wav",".mp4a",".m4a",".mp4",".aac",".opus"];class d extends i{constructor(o){super(o,"audio"),this.manager=o.soundManager}_isSupported(t){const e=o.getExtension(t);return a.indexOf(e)>-1}load(o,t){"string"==typeof o&&(o={load:o,original:o});const e=function(o){t(null,new r(o))},n=function(e){let n=`Error loading audio url: ${o.original}`;e&&(n+=`: ${e.message||e}`),console.warn(n),t(n)};if(this._createSound){if(!this._isSupported(o.original))return void n(`Audio format for ${o.original} not supported`);this._createSound(o.load,e,n)}else n(null)}_createSound(o,r,i){if(n()){const n=this.manager;if(!n.context)return void i("Audio manager has no audio context");const s={retry:this.maxRetries>0,maxRetries:this.maxRetries};(o.startsWith("blob:")||o.startsWith("data:"))&&(s.responseType=t.ResponseType.ARRAY_BUFFER),e.get(o,s,((o,t)=>{o?i(o):n.context.decodeAudioData(t,r,i)}))}else{let t=null;try{t=new Audio}catch(o){return void i("No support for Audio element")}s&&document.body.appendChild(t);const e=function o(){t.removeEventListener("canplaythrough",o),s&&document.body.removeChild(t),r(t)};t.onerror=function(){t.onerror=null,s&&document.body.removeChild(t),i()},t.addEventListener("canplaythrough",e),t.src=o}}}export{d as AudioHandler};