assassin-bug/framework/resonator/index.js

79 lines
3.3 KiB
JavaScript
Raw Permalink Normal View History

2022-11-26 01:22:02 +00:00
// the main module for Resonator
// API, etc.
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import ResonatorAudioContext from './audio-context';
import ResonatorScene from './scenes/webaudio-scene';
import AudioGraph from './audio-graph';
import AudioSource from './sources/audio-source';
import DataPool from './data-pool';
import Convolver from './effects/convolver';
import { HTTPLoader } from './loaders/http-loader';
import { SourceType } from './sources/source-type';
import { StreamingSource } from './sources/streaming-source';
export default class Resonator {
constructor(loader = new HTTPLoader()) {
this.loader = loader;
this.environmentImpulse = null;
this.context = new ResonatorAudioContext();
this.scene = new ResonatorScene(this.context);
this.graph = new AudioGraph(this.scene, this.context, false);
this.dataPool = new DataPool(this.context, this.loader);
}
load(path, type = SourceType.WorldSource) {
return __awaiter(this, void 0, void 0, function* () {
const data = yield this.dataPool.get(path);
const source = this.createSource(type, data);
return source;
});
}
loadImmediate(path, type = SourceType.WorldSource) {
const source = new AudioSource(this.graph, this.scene, this.context, null, type);
this.dataPool.get(path).then((data) => {
source.setBuffer(data);
});
return source;
}
stream(path, type = SourceType.MasterSource) {
const element = new Audio(path);
element.crossOrigin = 'anonymous';
element.volume = 1;
const source = new StreamingSource(this.graph, this.scene, this.context, element, type);
return source;
}
createSource(type, data) {
return new AudioSource(this.graph, this.scene, this.context, data);
}
setEnvironmentImpulse(file) {
return __awaiter(this, void 0, void 0, function* () {
if (this.environmentImpulse) {
this.graph.removeEffect(this.environmentImpulse);
}
if (file === null) {
return;
}
const buffer = yield this.dataPool.get(file);
this.environmentImpulse = new Convolver(this.context, this.graph, {
buffer
});
this.graph.applyEffect(this.environmentImpulse);
});
}
setListenerPosition(x, y, z) {
this.scene.setListenerPosition(x, y, z);
}
setListenerOrientation(forward, up) {
this.scene.setListenerOrientation(forward, up);
}
clearDataPool() {
this.dataPool.clear();
}
}