@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
64 lines (63 loc) • 1.82 kB
JavaScript
;
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);
});
}
}