79 lines
3.3 KiB
JavaScript
79 lines
3.3 KiB
JavaScript
|
// 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();
|
||
|
}
|
||
|
}
|