// The code that deals with 3d audio import ResonanceAudio from '../vendor/resonance-es6/main'; import EventEmitter from 'eventemitter3'; import vec3 from '../../tsm/vec3'; export default class Scene extends EventEmitter { constructor(context) { super(); this.context = context; this.scene = new ResonanceAudio(this.context.getContext(), { ambisonicOrder: 3 }); this.listener = this.context.getContext().listener; this.init(); } init() { // this.scene.output.connect(this.context.getOutputDestination()); } createSource() { const source = this.scene.createSource(); return Object.assign(Object.assign({}, source), { getInput: () => source.input }); } getOutput() { return this.scene.output; } getInput() { return this.scene.input; } setListenerPosition(x, y, z) { this.scene.setListenerPosition(x, y, z); } setListenerOrientation(forward, rawup) { let fwd = new vec3([forward.x, forward.y, forward.z]); let up = fwd.copy(); vec3.cross(up, new vec3([rawup.x, rawup.y, rawup.z]), up); vec3.cross(up, fwd, up); fwd.normalize(); up.normalize(); this.scene.setListenerOrientation(forward.x, forward.y, forward.z, rawup.x, rawup.y, rawup.z); } }