218 lines
8.9 KiB
TypeScript
218 lines
8.9 KiB
TypeScript
declare module 'resonance-audio' {
|
|
namespace ResonanceAudio {
|
|
/** Options for constructing a new ResonanceAudio scene */
|
|
interface Options {
|
|
/** Desired ambisonic Order */
|
|
ambisonicOrder?: number;
|
|
/** The listener's initial position (in meters), where origin is the center of
|
|
* the room */
|
|
listenerPosition?: Float32Array;
|
|
/** The listener's initial forward vector */
|
|
listenerForward?: Float32Array;
|
|
/** The listener's initial up vector */
|
|
listenerUp?: Float32Array;
|
|
/** Room dimensions (in meters) */
|
|
dimensions?: Utils.RoomDimensions;
|
|
/** Named acoustic materials per wall */
|
|
materials?: Utils.RoomMaterials;
|
|
/** (in meters/second) */
|
|
speedOfSound?: number;
|
|
}
|
|
}
|
|
/** Main class for managing sources, room and listener models */
|
|
class ResonanceAudio {
|
|
/** Binaurally-rendered stereo (2-channel) output */
|
|
output: AudioNode;
|
|
/** Ambisonic (multichannel) input */
|
|
ambisonicInput: AudioNode;
|
|
/** Ambisonic (multichannel) output */
|
|
ambisonicOutput: AudioNode;
|
|
constructor(context: AudioContext, options?: ResonanceAudio.Options);
|
|
/**
|
|
* Create a new source for the scene.
|
|
* @param options
|
|
* Options for constructing a new Source.
|
|
*/
|
|
createSource(options?: Source.Options): Source;
|
|
/**
|
|
* Set the scene's desired ambisonic order.
|
|
* @param ambisonicOrder Desired ambisonic order.
|
|
*/
|
|
setAmbisonicOrder(ambisonicOrder: any): void;
|
|
/**
|
|
* Set the room's dimensions and wall materials.
|
|
* @param dimensions Room dimensions (in meters).
|
|
* @param materials Named acoustic materials per wall.
|
|
*/
|
|
setRoomProperties(dimensions: Utils.RoomDimensions, materials: Utils.RoomMaterials): void;
|
|
/**
|
|
* Set the listener's position (in meters), where origin is the center of
|
|
* the room.
|
|
*/
|
|
setListenerPosition(x: number, y: number, z: number): any;
|
|
/** Set the source's orientation using forward and up vectors. */
|
|
setOrientation(forwardX: number, forwardY: number, forwardZ: number, upX: number, upY: number, upZ: number): void;
|
|
/**
|
|
* Set the listener's position and orientation using a Three.js Matrix4 object.
|
|
* @param matrix
|
|
* The Three.js Matrix4 object representing the listener's world transform.
|
|
*/
|
|
setListenerFromMatrix(matrix4: Float32Array): void;
|
|
/**
|
|
* Set the speed of sound.
|
|
*/
|
|
setSpeedOfSound(speedOfSound: number): void;
|
|
}
|
|
namespace Source {
|
|
/** Options for constructing a new Source. */
|
|
interface Options {
|
|
/** The source's initial position (in meters), where origin is the center of
|
|
* the room */
|
|
position?: Float32Array;
|
|
/** The source's initial forward vector */
|
|
forward?: Float32Array;
|
|
/** The source's initial up vector */
|
|
up?: Float32Array;
|
|
/** Min. distance (in meters) */
|
|
minDistance?: number;
|
|
/** Max. distance (in meters) */
|
|
maxDistance?: number;
|
|
/** Rolloff model to use */
|
|
rolloff?: string;
|
|
/** Input gain (linear) */
|
|
gain?: number;
|
|
/** Directivity alpha */
|
|
alpha?: number;
|
|
/** Directivity sharpness */
|
|
sharpness?: number;
|
|
/** Source width (in degrees). Where 0 degrees is a point source and 360 degrees
|
|
* is an omnidirectional source */
|
|
sourceWidth?: number;
|
|
}
|
|
}
|
|
/**
|
|
* Source model to spatialize an audio buffer.
|
|
*/
|
|
class Source {
|
|
constructor(scene: ResonanceAudio, options?: Source.Options);
|
|
/** Mono (1-channel) input */
|
|
input: AudioNode;
|
|
/**
|
|
* Set source's position (in meters), where origin is the center of
|
|
* the room.
|
|
*/
|
|
setPosition(x: number, y: number, z: number): void;
|
|
/** Set source's rolloff. */
|
|
setRolloff(rolloff: string): void;
|
|
/** Set source's minimum distance (in meters). */
|
|
setMinDistance(minDistance: number): void;
|
|
/** Set source's maximum distance (in meters). */
|
|
setMaxDistance(maxDistance: number): void;
|
|
/** Set source's gain (linear). */
|
|
setGain(gain: number): void;
|
|
/** Set the source's orientation using forward and up vectors. */
|
|
setOrientation(forwardX: number, forwardY: number, forwardZ: number, upX: number, upY: number, upZ: number): void;
|
|
/** Set source's position and orientation using a
|
|
* Three.js modelViewMatrix object */
|
|
setFromMatrix(matrix4: Float32Array): void;
|
|
/** Set the source width (in degrees). Where 0 degrees is a point source and 360
|
|
* degrees is an omnidirectional source */
|
|
setSourceWidth(sourceWidth: number): void;
|
|
/**
|
|
* Set source's directivity pattern (defined by alpha), where 0 is an
|
|
* omnidirectional pattern, 1 is a bidirectional pattern, 0.5 is a cardiod
|
|
* pattern. The sharpness of the pattern is increased exponentially
|
|
* @param alpha
|
|
* Determines directivity pattern (0 to 1).
|
|
* @param sharpness
|
|
* Determines the sharpness of the directivity pattern (1 to Inf).
|
|
*/
|
|
setDirectivityPattern(alpha: number, sharpness: number): void;
|
|
}
|
|
namespace Room {
|
|
interface Options {
|
|
/** The listener's initial position (in meters), where origin is the center of
|
|
* the room */
|
|
listenerPosition?: Float32Array;
|
|
/** Room dimensions (in meters) */
|
|
dimensions?: Utils.RoomDimensions;
|
|
/** Named acoustic materials per wall */
|
|
materials?: Utils.RoomMaterials;
|
|
/** (in meters/second) */
|
|
speedOfSound?: number;
|
|
}
|
|
}
|
|
/**
|
|
* Model that manages early and late reflections using acoustic
|
|
* properties and listener position relative to a rectangular room.
|
|
*/
|
|
class Room {
|
|
constructor(context: AudioContext, options?: Room.Options);
|
|
/**
|
|
* Set the room's dimensions and wall materials.
|
|
* @param dimensions Room dimensions (in meters)
|
|
* @param materials Named acoustic materials per wall
|
|
*/
|
|
setProperties(dimensions: Utils.RoomDimensions, materials: Utils.RoomMaterials): void;
|
|
/**
|
|
* Set the listener's position (in meters), where origin is the center of
|
|
* the room.
|
|
*/
|
|
setListenerPosition(x: number, y: number, z: number): void;
|
|
/**
|
|
* Compute distance outside room of provided position (in meters).
|
|
* @return
|
|
* Distance outside room (in meters). Returns 0 if inside room.
|
|
*/
|
|
getDistanceOutsideRoom(x: number, y: number, z: number): number;
|
|
}
|
|
namespace Listener {
|
|
interface Options {
|
|
/** Desired ambisonic order */
|
|
ambisonicOrder: number;
|
|
/** Initial position (in meters), where origin is the center of
|
|
* the room */
|
|
position?: Float32Array;
|
|
/** The listener's initial forward vector */
|
|
forward?: Float32Array;
|
|
/** The listener's initial up vector */
|
|
up?: Float32Array;
|
|
}
|
|
}
|
|
/** Listener model to spatialize sources in an environment */
|
|
class Listener {
|
|
/** Position (in meters) */
|
|
position: Float32Array;
|
|
/** Ambisonic (multichannel) input */
|
|
input: AudioNode;
|
|
/** Binaurally-rendered stereo (2-channel) output */
|
|
output: AudioNode;
|
|
/** Ambisonic (multichannel) output */
|
|
ambisonicOutput: AudioNode;
|
|
/**
|
|
* Set the listener's orientation using forward and up vectors.
|
|
*/
|
|
setOrientation(forwardX: number, forwardY: number, forwardZ: number, upX: number, upY: number, upZ: number): void;
|
|
/** Set listener's position and orientation using a
|
|
* Three.js modelViewMatrix object */
|
|
setFromMatrix(matrix4: Float32Array): void;
|
|
}
|
|
namespace Utils {
|
|
/** Properties describing the geometry of a room. */
|
|
interface RoomDimensions {
|
|
width: number;
|
|
height: number;
|
|
depth: number;
|
|
}
|
|
/** Properties describing the wall materials */
|
|
interface RoomMaterials {
|
|
left: string;
|
|
right: string;
|
|
front: string;
|
|
back: string;
|
|
down: string;
|
|
up: string;
|
|
}
|
|
}
|
|
}
|