UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

64 lines (63 loc) 1.82 kB
"use strict"; import { CoreBaseLoader } from "./_Base"; import { AudioContext, FileLoader, Loader } from "three"; class AudioLoader extends Loader { constructor(manager) { super(manager); this.manager = manager; } load(url, onLoad, onProgress, onError) { const scope = this; const loader = new FileLoader(this.manager); loader.setResponseType("arraybuffer"); loader.setPath(this.path); loader.setRequestHeader(this.requestHeader); loader.setWithCredentials(this.withCredentials); loader.load( url, function(buffer) { try { if (!(buffer instanceof ArrayBuffer)) { onError(new ErrorEvent("file content is not an ArrayBuffer")); return; } const bufferCopy = buffer.slice(0); const context = AudioContext.getContext(); context.decodeAudioData( bufferCopy, function(audioBuffer) { onLoad(audioBuffer); }, function(event) { onError(new ErrorEvent("failed to decode file")); } ); } catch (e) { onError(new ErrorEvent("failed to decode file")); scope.manager.itemError(url); } }, onProgress, onError ); } } export class CoreLoaderAudio extends CoreBaseLoader { async load() { const audioLoader = new AudioLoader(this.loadingManager); const url = this._urlToLoad(); return new Promise((resolve, reject) => { const onSuccess = (buffer) => { resolve(buffer); }; const onProgress = (progress) => { }; const onError = (err) => { console.log(`error:`); console.log(err); reject(); }; audioLoader.load(url, onSuccess, onProgress, onError); }); } }