@aura3d/audio 4.0.2 → 4.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AudioAnalyser.d.ts +42 -0
- package/dist/AudioAnalyser.d.ts.map +1 -0
- package/dist/AudioAnalyser.js +75 -0
- package/dist/AudioAnalyser.js.map +1 -0
- package/dist/AudioContextManager.d.ts +6 -0
- package/dist/AudioContextManager.d.ts.map +1 -1
- package/dist/AudioContextManager.js.map +1 -1
- package/dist/AudioListener.d.ts +27 -0
- package/dist/AudioListener.d.ts.map +1 -1
- package/dist/AudioListener.js +34 -0
- package/dist/AudioListener.js.map +1 -1
- package/dist/PositionalEmitter.d.ts +58 -2
- package/dist/PositionalEmitter.d.ts.map +1 -1
- package/dist/PositionalEmitter.js +111 -12
- package/dist/PositionalEmitter.js.map +1 -1
- package/dist/SpatialAudio.d.ts +24 -0
- package/dist/SpatialAudio.d.ts.map +1 -1
- package/dist/SpatialAudio.js +31 -2
- package/dist/SpatialAudio.js.map +1 -1
- package/dist/game-sound/SpatialVoice.d.ts +2 -2
- package/dist/game-sound/SpatialVoice.d.ts.map +1 -1
- package/dist/game-sound/SpatialVoice.js +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { AudioContextLike } from "./AudioContextManager.js";
|
|
2
|
+
export interface AudioAnalyserOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Context to build the `AnalyserNode` on. Defaults to `source.context`,
|
|
5
|
+
* which every real `AudioNode` exposes; pass it explicitly for minimal
|
|
6
|
+
* fakes whose nodes do not carry a context reference.
|
|
7
|
+
*/
|
|
8
|
+
readonly context?: AudioContextLike;
|
|
9
|
+
/** FFT window size — power of two in [32, 32768]. three.js default is 2048. */
|
|
10
|
+
readonly fftSize?: number;
|
|
11
|
+
readonly minDecibels?: number;
|
|
12
|
+
readonly maxDecibels?: number;
|
|
13
|
+
readonly smoothingTimeConstant?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* AU-03 — spectrum/level tap on a live node, the `AudioAnalyser` parity class.
|
|
17
|
+
* Wraps a real `AnalyserNode`: `source` is connected into it (the analyser is a
|
|
18
|
+
* tap — it does not need to reach the destination to analyse), and the byte
|
|
19
|
+
* buffers are allocated once per `fftSize` and reused across reads.
|
|
20
|
+
*/
|
|
21
|
+
export declare class AudioAnalyser {
|
|
22
|
+
readonly analyser: AnalyserNode;
|
|
23
|
+
private frequencyBins;
|
|
24
|
+
private timeDomainBins;
|
|
25
|
+
constructor(source: AudioNode, options?: AudioAnalyserOptions);
|
|
26
|
+
get fftSize(): number;
|
|
27
|
+
get frequencyBinCount(): number;
|
|
28
|
+
/** Latest byte spectrum (0–255 per bin, dB-mapped); the same array is returned every call. */
|
|
29
|
+
getFrequencyData(): Uint8Array;
|
|
30
|
+
/** Mean of the byte spectrum — three.js `getAverageFrequency` parity. */
|
|
31
|
+
getAverageFrequency(): number;
|
|
32
|
+
/** Latest byte waveform (128 = zero); the same array is returned every call. */
|
|
33
|
+
getTimeDomainData(): Uint8Array;
|
|
34
|
+
disconnect(): void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* `createAnalyser(source, fftSize?, context?)` — the AU-03 factory spelling.
|
|
38
|
+
* `context` (or `{ context }` in options) is only needed when the source node
|
|
39
|
+
* does not expose `.context` itself (fakes); real `AudioNode`s resolve it.
|
|
40
|
+
*/
|
|
41
|
+
export declare function createAudioAnalyser(source: AudioNode, options?: AudioAnalyserOptions | number, context?: AudioContextLike): AudioAnalyser;
|
|
42
|
+
//# sourceMappingURL=AudioAnalyser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioAnalyser.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/AudioAnalyser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IACpC,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,cAAc,CAA0B;gBAEpC,MAAM,EAAE,SAAS,EAAE,OAAO,GAAE,oBAAyB;IAuBjE,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,8FAA8F;IAC9F,gBAAgB,IAAI,UAAU;IAK9B,yEAAyE;IACzE,mBAAmB,IAAI,MAAM;IAQ7B,gFAAgF;IAChF,iBAAiB,IAAI,UAAU;IAK/B,UAAU,IAAI,IAAI;CAGnB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,SAAS,EACjB,OAAO,GAAE,oBAAoB,GAAG,MAAW,EAC3C,OAAO,CAAC,EAAE,gBAAgB,GACzB,aAAa,CAEf"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AU-03 — spectrum/level tap on a live node, the `AudioAnalyser` parity class.
|
|
3
|
+
* Wraps a real `AnalyserNode`: `source` is connected into it (the analyser is a
|
|
4
|
+
* tap — it does not need to reach the destination to analyse), and the byte
|
|
5
|
+
* buffers are allocated once per `fftSize` and reused across reads.
|
|
6
|
+
*/
|
|
7
|
+
export class AudioAnalyser {
|
|
8
|
+
analyser;
|
|
9
|
+
frequencyBins;
|
|
10
|
+
timeDomainBins;
|
|
11
|
+
constructor(source, options = {}) {
|
|
12
|
+
const context = options.context ?? contextOfNode(source);
|
|
13
|
+
const create = context?.createAnalyser;
|
|
14
|
+
if (!context || typeof create !== "function") {
|
|
15
|
+
throw new Error("AudioAnalyser requires a context with createAnalyser — real AudioContext/OfflineAudioContext provide it; pass { context } when the source node does not expose one");
|
|
16
|
+
}
|
|
17
|
+
const fftSize = options.fftSize ?? 2048;
|
|
18
|
+
if (!Number.isInteger(fftSize) || fftSize < 32 || fftSize > 32_768 || (fftSize & (fftSize - 1)) !== 0) {
|
|
19
|
+
throw new RangeError("AudioAnalyser fftSize must be a power of two between 32 and 32768");
|
|
20
|
+
}
|
|
21
|
+
const analyser = create.call(context);
|
|
22
|
+
analyser.fftSize = fftSize;
|
|
23
|
+
if (options.minDecibels !== undefined)
|
|
24
|
+
analyser.minDecibels = options.minDecibels;
|
|
25
|
+
if (options.maxDecibels !== undefined)
|
|
26
|
+
analyser.maxDecibels = options.maxDecibels;
|
|
27
|
+
if (options.smoothingTimeConstant !== undefined)
|
|
28
|
+
analyser.smoothingTimeConstant = options.smoothingTimeConstant;
|
|
29
|
+
source.connect(analyser);
|
|
30
|
+
this.analyser = analyser;
|
|
31
|
+
this.frequencyBins = new Uint8Array(analyser.frequencyBinCount || fftSize / 2);
|
|
32
|
+
this.timeDomainBins = new Uint8Array(analyser.fftSize || fftSize);
|
|
33
|
+
}
|
|
34
|
+
get fftSize() {
|
|
35
|
+
return this.analyser.fftSize;
|
|
36
|
+
}
|
|
37
|
+
get frequencyBinCount() {
|
|
38
|
+
return this.analyser.frequencyBinCount;
|
|
39
|
+
}
|
|
40
|
+
/** Latest byte spectrum (0–255 per bin, dB-mapped); the same array is returned every call. */
|
|
41
|
+
getFrequencyData() {
|
|
42
|
+
this.analyser.getByteFrequencyData(this.frequencyBins);
|
|
43
|
+
return this.frequencyBins;
|
|
44
|
+
}
|
|
45
|
+
/** Mean of the byte spectrum — three.js `getAverageFrequency` parity. */
|
|
46
|
+
getAverageFrequency() {
|
|
47
|
+
const data = this.getFrequencyData();
|
|
48
|
+
if (data.length === 0)
|
|
49
|
+
return 0;
|
|
50
|
+
let sum = 0;
|
|
51
|
+
for (const value of data)
|
|
52
|
+
sum += value;
|
|
53
|
+
return sum / data.length;
|
|
54
|
+
}
|
|
55
|
+
/** Latest byte waveform (128 = zero); the same array is returned every call. */
|
|
56
|
+
getTimeDomainData() {
|
|
57
|
+
this.analyser.getByteTimeDomainData(this.timeDomainBins);
|
|
58
|
+
return this.timeDomainBins;
|
|
59
|
+
}
|
|
60
|
+
disconnect() {
|
|
61
|
+
this.analyser.disconnect();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* `createAnalyser(source, fftSize?, context?)` — the AU-03 factory spelling.
|
|
66
|
+
* `context` (or `{ context }` in options) is only needed when the source node
|
|
67
|
+
* does not expose `.context` itself (fakes); real `AudioNode`s resolve it.
|
|
68
|
+
*/
|
|
69
|
+
export function createAudioAnalyser(source, options = {}, context) {
|
|
70
|
+
return new AudioAnalyser(source, typeof options === "number" ? { fftSize: options, context } : options);
|
|
71
|
+
}
|
|
72
|
+
function contextOfNode(source) {
|
|
73
|
+
return source.context;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=AudioAnalyser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AudioAnalyser.js","sourceRoot":"","sources":["../../../../packages/audio/src/AudioAnalyser.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,12 @@ export interface AudioContextLike {
|
|
|
11
11
|
createPanner(): PannerNode;
|
|
12
12
|
createBiquadFilter(): BiquadFilterNode;
|
|
13
13
|
createConvolver(): ConvolverNode;
|
|
14
|
+
/**
|
|
15
|
+
* Optional like the other non-essential factories on the package's wider
|
|
16
|
+
* `SoundGraphContext`: real contexts provide it; minimal fakes may not.
|
|
17
|
+
* `AudioAnalyser` throws a clear error when it is absent.
|
|
18
|
+
*/
|
|
19
|
+
createAnalyser?(): AnalyserNode;
|
|
14
20
|
}
|
|
15
21
|
export interface AudioContextManagerOptions {
|
|
16
22
|
readonly context?: AudioContextLike;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioContextManager.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/AudioContextManager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,UAAU,IAAI,QAAQ,CAAC;IACvB,kBAAkB,IAAI,qBAAqB,CAAC;IAC5C,YAAY,IAAI,UAAU,CAAC;IAC3B,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,eAAe,IAAI,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"AudioContextManager.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/AudioContextManager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,UAAU,IAAI,QAAQ,CAAC;IACvB,kBAAkB,IAAI,qBAAqB,CAAC;IAC5C,YAAY,IAAI,UAAU,CAAC;IAC3B,kBAAkB,IAAI,gBAAgB,CAAC;IACvC,eAAe,IAAI,aAAa,CAAC;IACjC;;;;OAIG;IACH,cAAc,CAAC,IAAI,YAAY,CAAC;CACjC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,gBAAgB,CAAC;CACjD;AAED,qBAAa,mBAAmB;IAIlB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,UAAU,CAAC,CAAmB;IACtC,OAAO,CAAC,QAAQ,CAAS;gBAEI,OAAO,GAAE,0BAA+B;IAIrE,IAAI,OAAO,IAAI,gBAAgB,CAM9B;IAED,IAAI,KAAK,IAAI,iBAAiB,CAW7B;IAEK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioContextManager.js","sourceRoot":"","sources":["../../../../packages/audio/src/AudioContextManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AudioContextManager.js","sourceRoot":"","sources":["../../../../packages/audio/src/AudioContextManager.ts"],"names":[],"mappings":"AA2BA,MAAM,OAAO,mBAAmB;IAID;IAHrB,UAAU,CAAoB;IAC9B,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAA6B,UAAsC,EAAE;QAAxC,YAAO,GAAP,OAAO,CAAiC;QACnE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IACpC,CAAC;IAED,IAAI,OAAO;QACT,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,YAAY,EAAiC,CAAC,CAAC;YAC9G,IAAI,CAAC,UAAU,GAAG,aAAa,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,KAAK;QACP,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1D,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;IACH,CAAC;CACF"}
|
package/dist/AudioListener.d.ts
CHANGED
|
@@ -1,12 +1,39 @@
|
|
|
1
|
+
import type { AudioContextLike } from "./AudioContextManager.js";
|
|
2
|
+
import { type ListenerLike } from "./game-sound/listenerSync.js";
|
|
1
3
|
export interface Vec3Like {
|
|
2
4
|
readonly x: number;
|
|
3
5
|
readonly y: number;
|
|
4
6
|
readonly z: number;
|
|
5
7
|
}
|
|
8
|
+
export interface AudioListenerOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Bind a live context so `setTransform` also writes into `context.listener`
|
|
11
|
+
* (the native Web Audio listener) through `syncListener` — the shared frame
|
|
12
|
+
* driver. Without a context the pose is stored only (headless-safe).
|
|
13
|
+
*/
|
|
14
|
+
readonly context?: AudioContextLike;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* AU-01: the listener pose owner. `setTransform` stores the pose and, when a
|
|
18
|
+
* context is bound, pushes it into `ctx.listener` via `syncListener`
|
|
19
|
+
* (`positionX…upZ` AudioParams where they exist, `setPosition`/`setOrientation`
|
|
20
|
+
* legacy fallback otherwise). `SceneAudioBridge.update()` keeps calling
|
|
21
|
+
* `setTransform` per frame, so the native listener follows the bound node.
|
|
22
|
+
*/
|
|
6
23
|
export declare class AudioListener {
|
|
7
24
|
position: Vec3Like;
|
|
8
25
|
forward: Vec3Like;
|
|
9
26
|
up: Vec3Like;
|
|
27
|
+
private readonly context?;
|
|
28
|
+
constructor(options?: AudioListenerOptions);
|
|
29
|
+
/** The native `ctx.listener` this pose writes into, when a context is bound. */
|
|
30
|
+
get nativeListener(): ListenerLike | undefined;
|
|
10
31
|
setTransform(position: Vec3Like, forward?: Vec3Like, up?: Vec3Like): void;
|
|
32
|
+
/**
|
|
33
|
+
* Push the stored pose into `ctx.listener`. Returns the path taken —
|
|
34
|
+
* "audioparam", "legacy", or "none" when no context/listener is bound.
|
|
35
|
+
* Safe to call every frame; `syncListener` ramps with τ = 20 ms.
|
|
36
|
+
*/
|
|
37
|
+
sync(): "audioparam" | "legacy" | "none";
|
|
11
38
|
}
|
|
12
39
|
//# sourceMappingURL=AudioListener.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioListener.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/AudioListener.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,QAAQ,EAAE,QAAQ,CAAwB;IAC1C,OAAO,EAAE,QAAQ,CAAyB;IAC1C,EAAE,EAAE,QAAQ,CAAwB;IAEpC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,QAAuB,EAAE,EAAE,GAAE,QAAkB,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"AudioListener.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/AudioListener.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,QAAQ,EAAE,QAAQ,CAAwB;IAC1C,OAAO,EAAE,QAAQ,CAAyB;IAC1C,EAAE,EAAE,QAAQ,CAAwB;IAEpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAmB;gBAEhC,OAAO,GAAE,oBAAyB;IAI9C,gFAAgF;IAChF,IAAI,cAAc,IAAI,YAAY,GAAG,SAAS,CAI7C;IAED,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,GAAE,QAAuB,EAAE,EAAE,GAAE,QAAkB,GAAG,IAAI;IAOhG;;;;OAIG;IACH,IAAI,IAAI,YAAY,GAAG,QAAQ,GAAG,MAAM;CASzC"}
|
package/dist/AudioListener.js
CHANGED
|
@@ -1,11 +1,45 @@
|
|
|
1
|
+
import { syncListener } from "./game-sound/listenerSync.js";
|
|
2
|
+
/**
|
|
3
|
+
* AU-01: the listener pose owner. `setTransform` stores the pose and, when a
|
|
4
|
+
* context is bound, pushes it into `ctx.listener` via `syncListener`
|
|
5
|
+
* (`positionX…upZ` AudioParams where they exist, `setPosition`/`setOrientation`
|
|
6
|
+
* legacy fallback otherwise). `SceneAudioBridge.update()` keeps calling
|
|
7
|
+
* `setTransform` per frame, so the native listener follows the bound node.
|
|
8
|
+
*/
|
|
1
9
|
export class AudioListener {
|
|
2
10
|
position = { x: 0, y: 0, z: 0 };
|
|
3
11
|
forward = { x: 0, y: 0, z: -1 };
|
|
4
12
|
up = { x: 0, y: 1, z: 0 };
|
|
13
|
+
context;
|
|
14
|
+
constructor(options = {}) {
|
|
15
|
+
this.context = options.context;
|
|
16
|
+
}
|
|
17
|
+
/** The native `ctx.listener` this pose writes into, when a context is bound. */
|
|
18
|
+
get nativeListener() {
|
|
19
|
+
// Same access pattern as `GameSoundEngine.setListener` — `AudioContextLike`
|
|
20
|
+
// stays minimal, so the real-context `listener` is reached through a cast.
|
|
21
|
+
return this.context?.listener;
|
|
22
|
+
}
|
|
5
23
|
setTransform(position, forward = this.forward, up = this.up) {
|
|
6
24
|
this.position = { ...position };
|
|
7
25
|
this.forward = { ...forward };
|
|
8
26
|
this.up = { ...up };
|
|
27
|
+
this.sync();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Push the stored pose into `ctx.listener`. Returns the path taken —
|
|
31
|
+
* "audioparam", "legacy", or "none" when no context/listener is bound.
|
|
32
|
+
* Safe to call every frame; `syncListener` ramps with τ = 20 ms.
|
|
33
|
+
*/
|
|
34
|
+
sync() {
|
|
35
|
+
const listener = this.nativeListener;
|
|
36
|
+
if (!listener)
|
|
37
|
+
return "none";
|
|
38
|
+
return syncListener(listener, this.context?.currentTime ?? 0, {
|
|
39
|
+
position: this.position,
|
|
40
|
+
forward: this.forward,
|
|
41
|
+
up: this.up
|
|
42
|
+
});
|
|
9
43
|
}
|
|
10
44
|
}
|
|
11
45
|
//# sourceMappingURL=AudioListener.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AudioListener.js","sourceRoot":"","sources":["../../../../packages/audio/src/AudioListener.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AudioListener.js","sourceRoot":"","sources":["../../../../packages/audio/src/AudioListener.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAqB,MAAM,2BAA2B,CAAC;AAiB5E;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IACxB,QAAQ,GAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC1C,OAAO,GAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC1C,EAAE,GAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAEnB,OAAO,CAAoB;IAE5C,YAAY,UAAgC,EAAE;QAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,gFAAgF;IAChF,IAAI,cAAc;QAChB,4EAA4E;QAC5E,2EAA2E;QAC3E,OAAQ,IAAI,CAAC,OAA8D,EAAE,QAAQ,CAAC;IACxF,CAAC;IAED,YAAY,CAAC,QAAkB,EAAE,UAAoB,IAAI,CAAC,OAAO,EAAE,KAAe,IAAI,CAAC,EAAE;QACvF,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;QACrC,IAAI,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAC;QAC7B,OAAO,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,CAAC,EAAE;YAC5D,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,EAAE,EAAE,IAAI,CAAC,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -19,8 +19,31 @@ export type OcclusionHook = (emitter: Vec3Like, listener: Vec3Like) => number;
|
|
|
19
19
|
/**
|
|
20
20
|
* Pure distance-attenuation gain in [0, 1], mirroring the PannerNode models so
|
|
21
21
|
* evidence stays meaningful even when no WebAudio context exists (headless runs).
|
|
22
|
+
*
|
|
23
|
+
* Web Audio spec §6.4 (verified against Blink `DistanceEffect::Gain`):
|
|
24
|
+
* - `inverse`: `d` is clamped to `[ref, ∞)`; `maxDistance` is ignored.
|
|
25
|
+
* - `exponential`: `d` is clamped to `[ref, ∞)`; `maxDistance` is ignored.
|
|
26
|
+
* - `linear`: `d` is clamped to `[min(ref,max), max(ref,max)]` and rolloff is
|
|
27
|
+
* clamped to `[0, 1]` — the only model that uses `maxDistance`.
|
|
28
|
+
* (The previous implementation forced gain 0 for `d ≥ maxDistance` on every
|
|
29
|
+
* model, which no panner does — evidence lied past `maxDistance`.)
|
|
22
30
|
*/
|
|
23
31
|
export declare function computeDistanceAttenuation(distance: number, options?: DistanceAttenuationOptions): number;
|
|
32
|
+
export interface ConeOptions {
|
|
33
|
+
/** Degrees of full gain around `orientation`. Spec default 360 (omni). */
|
|
34
|
+
readonly innerAngle?: number;
|
|
35
|
+
/** Degrees at which gain reaches `outerGain`. Spec default 360. */
|
|
36
|
+
readonly outerAngle?: number;
|
|
37
|
+
/** Linear gain outside the outer cone, [0, 1]. Spec default 0. */
|
|
38
|
+
readonly outerGain?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Pure cone gain in [0, 1], mirroring PannerNode §6.5 (Blink `ConeEffect::Gain`):
|
|
42
|
+
* the angle between the *source→listener* vector and the source `orientation`.
|
|
43
|
+
* Inside `innerAngle` → 1; outside `outerAngle` → `outerGain`; between → linear
|
|
44
|
+
* interpolation. Zero orientation or a 360°/360° cone → omni (gain 1).
|
|
45
|
+
*/
|
|
46
|
+
export declare function computeConeGain(emitterPosition: Vec3Like, orientation: Vec3Like, listenerPosition: Vec3Like, cone?: ConeOptions): number;
|
|
24
47
|
/**
|
|
25
48
|
* Pure doppler playback-rate ratio for an emitter/listener pair. Returns 1 when
|
|
26
49
|
* both are stationary relative to each other; clamped to [0.25, 4].
|
|
@@ -39,8 +62,13 @@ export interface PositionalEmitterOptions {
|
|
|
39
62
|
readonly volume?: number;
|
|
40
63
|
readonly loop?: boolean;
|
|
41
64
|
readonly position?: Vec3Like;
|
|
65
|
+
/** Direction the emitter's cone axis points (panner `orientationX/Y/Z`). */
|
|
66
|
+
readonly orientation?: Vec3Like;
|
|
42
67
|
readonly velocity?: Vec3Like;
|
|
43
68
|
readonly attenuation?: DistanceAttenuationOptions;
|
|
69
|
+
readonly cone?: ConeOptions;
|
|
70
|
+
/** Panner `panningModel` — "HRTF" (default) or "equalpower". */
|
|
71
|
+
readonly panningModel?: PanningModelType;
|
|
44
72
|
readonly doppler?: DopplerOptions & {
|
|
45
73
|
readonly enabled?: boolean;
|
|
46
74
|
};
|
|
@@ -49,6 +77,10 @@ export interface PositionalEmitterEvidence {
|
|
|
49
77
|
readonly kind: "positional-emitter-evidence";
|
|
50
78
|
readonly position: Vec3Like;
|
|
51
79
|
readonly attenuationGain: number;
|
|
80
|
+
/** Cone gain the panner applies (or software applies when headless). */
|
|
81
|
+
readonly coneGain: number;
|
|
82
|
+
/** Effective panner/software distance model for this emitter. */
|
|
83
|
+
readonly distanceModel: DistanceAttenuationModel;
|
|
52
84
|
readonly dopplerShift: number;
|
|
53
85
|
readonly occlusion: number;
|
|
54
86
|
readonly state: AudioSourceState;
|
|
@@ -68,11 +100,15 @@ export declare class PositionalEmitter {
|
|
|
68
100
|
private readonly baseVolume;
|
|
69
101
|
private positionRef;
|
|
70
102
|
private velocityRef;
|
|
103
|
+
private orientationRef;
|
|
104
|
+
private lastListenerPosition;
|
|
71
105
|
private readonly attenuationOptions;
|
|
106
|
+
private coneOptions;
|
|
72
107
|
private readonly dopplerOptions;
|
|
73
108
|
private readonly dopplerEnabled;
|
|
74
109
|
private occlusionRef;
|
|
75
110
|
private lastAttenuation;
|
|
111
|
+
private lastCone;
|
|
76
112
|
private lastDoppler;
|
|
77
113
|
constructor(options: PositionalEmitterOptions);
|
|
78
114
|
get position(): Vec3Like;
|
|
@@ -80,16 +116,36 @@ export declare class PositionalEmitter {
|
|
|
80
116
|
get connected(): boolean;
|
|
81
117
|
setPosition(position: Vec3Like): void;
|
|
82
118
|
setVelocity(velocity: Vec3Like): void;
|
|
119
|
+
/** Repoint the cone axis; recomputes the cached cone gain against the last listener pose. */
|
|
120
|
+
setOrientation(orientation: Vec3Like): void;
|
|
121
|
+
/** Change the cone shape; recomputes the cached cone gain. */
|
|
122
|
+
setCone(cone: ConeOptions): void;
|
|
83
123
|
setOcclusion(amount: number): void;
|
|
84
124
|
/**
|
|
85
|
-
* Recompute attenuation + doppler against the listener and push them
|
|
86
|
-
* live graph (gain, playback rate, filter). Pure math runs even when
|
|
125
|
+
* Recompute attenuation + cone + doppler against the listener and push them
|
|
126
|
+
* into the live graph (gain, playback rate, filter). Pure math runs even when
|
|
127
|
+
* headless.
|
|
87
128
|
*/
|
|
88
129
|
update(listenerPosition: Vec3Like, listenerVelocity?: Vec3Like): PositionalEmitterEvidence;
|
|
89
130
|
play(when?: number): void;
|
|
90
131
|
stop(when?: number): void;
|
|
91
132
|
evidence(): PositionalEmitterEvidence;
|
|
92
133
|
dispose(): void;
|
|
134
|
+
private refreshConeGain;
|
|
135
|
+
/**
|
|
136
|
+
* AU-02 / C10 — distance and cone attenuation are applied EXACTLY ONCE.
|
|
137
|
+
*
|
|
138
|
+
* Connected: the `PannerNode` owns them — `SpatialAudio` mirrors
|
|
139
|
+
* `distanceModel`/`refDistance`/`maxDistance`/`rolloffFactor` and the cone
|
|
140
|
+
* params onto the panner, so the software gain carries only
|
|
141
|
+
* `volume × occlusion` (occlusion is ours; the panner cannot do it).
|
|
142
|
+
* Previously the software gain multiplied `attenuationGain` on top of the
|
|
143
|
+
* panner's own inverse-model gain — the C10 double attenuation.
|
|
144
|
+
*
|
|
145
|
+
* Headless (no panner/filter could be built): the software gain applies the
|
|
146
|
+
* same formulas itself, so the emitter still attenuates rather than playing
|
|
147
|
+
* full volume with `connected: false`.
|
|
148
|
+
*/
|
|
93
149
|
private applyGain;
|
|
94
150
|
}
|
|
95
151
|
//# sourceMappingURL=PositionalEmitter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PositionalEmitter.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/PositionalEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAC;AAE5E,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,wBAAwB,CAAC;CAC3C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,uGAAuG;AACvG,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC;AAM9E
|
|
1
|
+
{"version":3,"file":"PositionalEmitter.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/PositionalEmitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,25 +6,68 @@ const DOPPLER_MAX = 4;
|
|
|
6
6
|
/**
|
|
7
7
|
* Pure distance-attenuation gain in [0, 1], mirroring the PannerNode models so
|
|
8
8
|
* evidence stays meaningful even when no WebAudio context exists (headless runs).
|
|
9
|
+
*
|
|
10
|
+
* Web Audio spec §6.4 (verified against Blink `DistanceEffect::Gain`):
|
|
11
|
+
* - `inverse`: `d` is clamped to `[ref, ∞)`; `maxDistance` is ignored.
|
|
12
|
+
* - `exponential`: `d` is clamped to `[ref, ∞)`; `maxDistance` is ignored.
|
|
13
|
+
* - `linear`: `d` is clamped to `[min(ref,max), max(ref,max)]` and rolloff is
|
|
14
|
+
* clamped to `[0, 1]` — the only model that uses `maxDistance`.
|
|
15
|
+
* (The previous implementation forced gain 0 for `d ≥ maxDistance` on every
|
|
16
|
+
* model, which no panner does — evidence lied past `maxDistance`.)
|
|
9
17
|
*/
|
|
10
18
|
export function computeDistanceAttenuation(distance, options = {}) {
|
|
11
19
|
if (!Number.isFinite(distance) || distance < 0)
|
|
12
20
|
return 1;
|
|
13
21
|
const refDistance = Math.max(Number.EPSILON, options.refDistance ?? 1);
|
|
14
|
-
const maxDistance =
|
|
22
|
+
const maxDistance = options.maxDistance ?? 10_000;
|
|
15
23
|
const rolloff = Math.max(0, options.rolloffFactor ?? 1);
|
|
16
24
|
const model = options.model ?? "inverse";
|
|
17
|
-
|
|
18
|
-
return 1;
|
|
19
|
-
if (distance >= maxDistance)
|
|
20
|
-
return 0;
|
|
25
|
+
const d = Math.max(distance, refDistance);
|
|
21
26
|
if (model === "linear") {
|
|
22
|
-
|
|
27
|
+
const dRef = Math.min(refDistance, maxDistance);
|
|
28
|
+
const dMax = Math.max(refDistance, maxDistance);
|
|
29
|
+
const clamped = Math.min(Math.max(d, dRef), dMax);
|
|
30
|
+
if (dRef === dMax)
|
|
31
|
+
return 1 - rolloff;
|
|
32
|
+
const f = Math.min(1, rolloff);
|
|
33
|
+
return Math.max(0, 1 - f * ((clamped - dRef) / (dMax - dRef)));
|
|
23
34
|
}
|
|
24
35
|
if (model === "exponential") {
|
|
25
|
-
return Math.pow(
|
|
36
|
+
return Math.pow(d / refDistance, -rolloff);
|
|
26
37
|
}
|
|
27
|
-
return refDistance / (refDistance + rolloff * (
|
|
38
|
+
return refDistance / (refDistance + rolloff * (d - refDistance));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Pure cone gain in [0, 1], mirroring PannerNode §6.5 (Blink `ConeEffect::Gain`):
|
|
42
|
+
* the angle between the *source→listener* vector and the source `orientation`.
|
|
43
|
+
* Inside `innerAngle` → 1; outside `outerAngle` → `outerGain`; between → linear
|
|
44
|
+
* interpolation. Zero orientation or a 360°/360° cone → omni (gain 1).
|
|
45
|
+
*/
|
|
46
|
+
export function computeConeGain(emitterPosition, orientation, listenerPosition, cone = {}) {
|
|
47
|
+
const inner = cone.innerAngle ?? 360;
|
|
48
|
+
const outer = cone.outerAngle ?? 360;
|
|
49
|
+
const outerGain = Math.min(1, Math.max(0, cone.outerGain ?? 0));
|
|
50
|
+
const orientationLength = Math.hypot(orientation.x, orientation.y, orientation.z);
|
|
51
|
+
if (orientationLength < Number.EPSILON || (inner === 360 && outer === 360))
|
|
52
|
+
return 1;
|
|
53
|
+
const toListener = {
|
|
54
|
+
x: listenerPosition.x - emitterPosition.x,
|
|
55
|
+
y: listenerPosition.y - emitterPosition.y,
|
|
56
|
+
z: listenerPosition.z - emitterPosition.z
|
|
57
|
+
};
|
|
58
|
+
const listenerDistance = Math.hypot(toListener.x, toListener.y, toListener.z);
|
|
59
|
+
if (listenerDistance < Number.EPSILON)
|
|
60
|
+
return 1;
|
|
61
|
+
const cosAngle = Math.min(1, Math.max(-1, dot(toListener, orientation) / (listenerDistance * orientationLength)));
|
|
62
|
+
const absAngle = (Math.acos(cosAngle) * 180) / Math.PI;
|
|
63
|
+
const absInner = Math.abs(inner) / 2;
|
|
64
|
+
const absOuter = Math.abs(outer) / 2;
|
|
65
|
+
if (absAngle <= absInner)
|
|
66
|
+
return 1;
|
|
67
|
+
if (absAngle >= absOuter)
|
|
68
|
+
return outerGain;
|
|
69
|
+
const x = (absAngle - absInner) / (absOuter - absInner);
|
|
70
|
+
return 1 - x + outerGain * x;
|
|
28
71
|
}
|
|
29
72
|
function dot(a, b) {
|
|
30
73
|
return a.x * b.x + a.y * b.y + a.z * b.z;
|
|
@@ -89,18 +132,24 @@ export class PositionalEmitter {
|
|
|
89
132
|
baseVolume;
|
|
90
133
|
positionRef;
|
|
91
134
|
velocityRef;
|
|
135
|
+
orientationRef;
|
|
136
|
+
lastListenerPosition = { x: 0, y: 0, z: 0 };
|
|
92
137
|
attenuationOptions;
|
|
138
|
+
coneOptions;
|
|
93
139
|
dopplerOptions;
|
|
94
140
|
dopplerEnabled;
|
|
95
141
|
occlusionRef = 0;
|
|
96
142
|
lastAttenuation = 1;
|
|
143
|
+
lastCone = 1;
|
|
97
144
|
lastDoppler = 1;
|
|
98
145
|
constructor(options) {
|
|
99
146
|
this.options = options;
|
|
100
147
|
this.baseVolume = options.volume ?? 1;
|
|
101
148
|
this.positionRef = { ...(options.position ?? { x: 0, y: 0, z: 0 }) };
|
|
102
149
|
this.velocityRef = { ...(options.velocity ?? ZERO_VELOCITY) };
|
|
150
|
+
this.orientationRef = { ...(options.orientation ?? { x: 1, y: 0, z: 0 }) };
|
|
103
151
|
this.attenuationOptions = { ...(options.attenuation ?? {}) };
|
|
152
|
+
this.coneOptions = { ...(options.cone ?? {}) };
|
|
104
153
|
this.dopplerOptions = { ...(options.doppler ?? {}) };
|
|
105
154
|
this.dopplerEnabled = options.doppler?.enabled ?? true;
|
|
106
155
|
let spatial;
|
|
@@ -110,9 +159,15 @@ export class PositionalEmitter {
|
|
|
110
159
|
context: options.context,
|
|
111
160
|
destination: options.destination,
|
|
112
161
|
position: this.positionRef,
|
|
162
|
+
orientation: this.orientationRef,
|
|
163
|
+
panningModel: options.panningModel,
|
|
164
|
+
distanceModel: this.attenuationOptions.model,
|
|
113
165
|
maxDistance: this.attenuationOptions.maxDistance,
|
|
114
166
|
refDistance: this.attenuationOptions.refDistance,
|
|
115
|
-
rolloffFactor: this.attenuationOptions.rolloffFactor
|
|
167
|
+
rolloffFactor: this.attenuationOptions.rolloffFactor,
|
|
168
|
+
coneInnerAngle: this.coneOptions.innerAngle,
|
|
169
|
+
coneOuterAngle: this.coneOptions.outerAngle,
|
|
170
|
+
coneOuterGain: this.coneOptions.outerGain
|
|
116
171
|
});
|
|
117
172
|
filter = options.context.createBiquadFilter();
|
|
118
173
|
filter.type = "lowpass";
|
|
@@ -149,6 +204,25 @@ export class PositionalEmitter {
|
|
|
149
204
|
setVelocity(velocity) {
|
|
150
205
|
this.velocityRef = { ...velocity };
|
|
151
206
|
}
|
|
207
|
+
/** Repoint the cone axis; recomputes the cached cone gain against the last listener pose. */
|
|
208
|
+
setOrientation(orientation) {
|
|
209
|
+
this.orientationRef = { ...orientation };
|
|
210
|
+
this.spatial?.setOrientation(orientation);
|
|
211
|
+
this.refreshConeGain();
|
|
212
|
+
}
|
|
213
|
+
/** Change the cone shape; recomputes the cached cone gain. */
|
|
214
|
+
setCone(cone) {
|
|
215
|
+
this.coneOptions = { ...cone };
|
|
216
|
+
if (this.spatial) {
|
|
217
|
+
if (cone.innerAngle !== undefined)
|
|
218
|
+
this.spatial.panner.coneInnerAngle = cone.innerAngle;
|
|
219
|
+
if (cone.outerAngle !== undefined)
|
|
220
|
+
this.spatial.panner.coneOuterAngle = cone.outerAngle;
|
|
221
|
+
if (cone.outerGain !== undefined)
|
|
222
|
+
this.spatial.panner.coneOuterGain = cone.outerGain;
|
|
223
|
+
}
|
|
224
|
+
this.refreshConeGain();
|
|
225
|
+
}
|
|
152
226
|
setOcclusion(amount) {
|
|
153
227
|
this.occlusionRef = Math.min(1, Math.max(0, amount));
|
|
154
228
|
if (this.filter) {
|
|
@@ -157,12 +231,15 @@ export class PositionalEmitter {
|
|
|
157
231
|
this.applyGain();
|
|
158
232
|
}
|
|
159
233
|
/**
|
|
160
|
-
* Recompute attenuation + doppler against the listener and push them
|
|
161
|
-
* live graph (gain, playback rate, filter). Pure math runs even when
|
|
234
|
+
* Recompute attenuation + cone + doppler against the listener and push them
|
|
235
|
+
* into the live graph (gain, playback rate, filter). Pure math runs even when
|
|
236
|
+
* headless.
|
|
162
237
|
*/
|
|
163
238
|
update(listenerPosition, listenerVelocity = ZERO_VELOCITY) {
|
|
239
|
+
this.lastListenerPosition = { ...listenerPosition };
|
|
164
240
|
const distance = Math.hypot(this.positionRef.x - listenerPosition.x, this.positionRef.y - listenerPosition.y, this.positionRef.z - listenerPosition.z);
|
|
165
241
|
this.lastAttenuation = computeDistanceAttenuation(distance, this.attenuationOptions);
|
|
242
|
+
this.lastCone = computeConeGain(this.positionRef, this.orientationRef, listenerPosition, this.coneOptions);
|
|
166
243
|
this.lastDoppler = this.dopplerEnabled
|
|
167
244
|
? computeDopplerShift(this.positionRef, this.velocityRef, listenerPosition, listenerVelocity, this.dopplerOptions)
|
|
168
245
|
: 1;
|
|
@@ -181,6 +258,8 @@ export class PositionalEmitter {
|
|
|
181
258
|
kind: "positional-emitter-evidence",
|
|
182
259
|
position: { ...this.positionRef },
|
|
183
260
|
attenuationGain: this.lastAttenuation,
|
|
261
|
+
coneGain: this.lastCone,
|
|
262
|
+
distanceModel: this.attenuationOptions.model ?? "inverse",
|
|
184
263
|
dopplerShift: this.lastDoppler,
|
|
185
264
|
occlusion: this.occlusionRef,
|
|
186
265
|
state: this.source.state,
|
|
@@ -192,8 +271,28 @@ export class PositionalEmitter {
|
|
|
192
271
|
this.filter?.disconnect();
|
|
193
272
|
this.spatial?.dispose();
|
|
194
273
|
}
|
|
274
|
+
refreshConeGain() {
|
|
275
|
+
this.lastCone = computeConeGain(this.positionRef, this.orientationRef, this.lastListenerPosition, this.coneOptions);
|
|
276
|
+
this.applyGain();
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* AU-02 / C10 — distance and cone attenuation are applied EXACTLY ONCE.
|
|
280
|
+
*
|
|
281
|
+
* Connected: the `PannerNode` owns them — `SpatialAudio` mirrors
|
|
282
|
+
* `distanceModel`/`refDistance`/`maxDistance`/`rolloffFactor` and the cone
|
|
283
|
+
* params onto the panner, so the software gain carries only
|
|
284
|
+
* `volume × occlusion` (occlusion is ours; the panner cannot do it).
|
|
285
|
+
* Previously the software gain multiplied `attenuationGain` on top of the
|
|
286
|
+
* panner's own inverse-model gain — the C10 double attenuation.
|
|
287
|
+
*
|
|
288
|
+
* Headless (no panner/filter could be built): the software gain applies the
|
|
289
|
+
* same formulas itself, so the emitter still attenuates rather than playing
|
|
290
|
+
* full volume with `connected: false`.
|
|
291
|
+
*/
|
|
195
292
|
applyGain() {
|
|
196
|
-
|
|
293
|
+
const occlusionGain = applyOcclusionToGain(this.occlusionRef);
|
|
294
|
+
const spatialGain = this.connected ? 1 : this.lastAttenuation * this.lastCone;
|
|
295
|
+
this.source.setVolume(this.baseVolume * spatialGain * occlusionGain);
|
|
197
296
|
}
|
|
198
297
|
}
|
|
199
298
|
//# sourceMappingURL=PositionalEmitter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PositionalEmitter.js","sourceRoot":"","sources":["../../../../packages/audio/src/PositionalEmitter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PositionalEmitter.js","sourceRoot":"","sources":["../../../../packages/audio/src/PositionalEmitter.ts"],"names":[],"mappings":"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"}
|
package/dist/SpatialAudio.d.ts
CHANGED
|
@@ -4,14 +4,38 @@ export interface SpatialAudioOptions {
|
|
|
4
4
|
readonly context: AudioContextLike;
|
|
5
5
|
readonly destination?: AudioNode;
|
|
6
6
|
readonly position?: Vec3Like;
|
|
7
|
+
/**
|
|
8
|
+
* Direction the source's cone axis points (unit vector is not required).
|
|
9
|
+
* Panner semantics: a listener located along this vector from the source
|
|
10
|
+
* hears `coneInnerAngle` gain; behind the outer cone, `coneOuterGain`.
|
|
11
|
+
*/
|
|
12
|
+
readonly orientation?: Vec3Like;
|
|
7
13
|
readonly maxDistance?: number;
|
|
8
14
|
readonly refDistance?: number;
|
|
9
15
|
readonly rolloffFactor?: number;
|
|
16
|
+
/** AU-02: was hard-wired to "inverse"; now authored per emitter (three.js parity). */
|
|
17
|
+
readonly distanceModel?: DistanceModelType;
|
|
18
|
+
readonly panningModel?: PanningModelType;
|
|
19
|
+
/** Degrees. Inside this cone: no attenuation. Spec default 360 (omni). */
|
|
20
|
+
readonly coneInnerAngle?: number;
|
|
21
|
+
/** Degrees. Outside this cone: `coneOuterGain`. Spec default 360. */
|
|
22
|
+
readonly coneOuterAngle?: number;
|
|
23
|
+
/** Linear gain applied outside the outer cone, [0, 1]. Spec default 0. */
|
|
24
|
+
readonly coneOuterGain?: number;
|
|
10
25
|
}
|
|
11
26
|
export declare class SpatialAudio {
|
|
12
27
|
readonly panner: PannerNode;
|
|
28
|
+
private orientationRef;
|
|
13
29
|
constructor(options: SpatialAudioOptions);
|
|
30
|
+
get orientation(): Vec3Like;
|
|
14
31
|
setPosition(position: Vec3Like): void;
|
|
32
|
+
/**
|
|
33
|
+
* Point the emitter's cone axis. Prefers the `orientationX/Y/Z` AudioParams;
|
|
34
|
+
* falls back to the legacy `setOrientation` for contexts (or minimal fakes)
|
|
35
|
+
* that predate the AudioParam surface — the same dual path `syncListener`
|
|
36
|
+
* uses for the listener.
|
|
37
|
+
*/
|
|
38
|
+
setOrientation(orientation: Vec3Like): void;
|
|
15
39
|
dispose(): void;
|
|
16
40
|
}
|
|
17
41
|
//# sourceMappingURL=SpatialAudio.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpatialAudio.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/SpatialAudio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"SpatialAudio.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/SpatialAudio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAKhD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,sFAAsF;IACtF,QAAQ,CAAC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IACzC,0EAA0E;IAC1E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,qEAAqE;IACrE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,OAAO,CAAC,cAAc,CAAwC;gBAElD,OAAO,EAAE,mBAAmB;IAiBxC,IAAI,WAAW,IAAI,QAAQ,CAE1B;IAED,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAMrC;;;;;OAKG;IACH,cAAc,CAAC,WAAW,EAAE,QAAQ,GAAG,IAAI;IAc3C,OAAO,IAAI,IAAI;CAGhB"}
|
package/dist/SpatialAudio.js
CHANGED
|
@@ -1,20 +1,49 @@
|
|
|
1
|
+
/** The Web Audio PannerNode default orientation (unit +X) when none is authored. */
|
|
2
|
+
const DEFAULT_ORIENTATION = { x: 1, y: 0, z: 0 };
|
|
1
3
|
export class SpatialAudio {
|
|
2
4
|
panner;
|
|
5
|
+
orientationRef = { ...DEFAULT_ORIENTATION };
|
|
3
6
|
constructor(options) {
|
|
4
7
|
this.panner = options.context.createPanner();
|
|
5
|
-
this.panner.panningModel = "HRTF";
|
|
6
|
-
this.panner.distanceModel = "inverse";
|
|
8
|
+
this.panner.panningModel = options.panningModel ?? "HRTF";
|
|
9
|
+
this.panner.distanceModel = options.distanceModel ?? "inverse";
|
|
7
10
|
this.panner.maxDistance = options.maxDistance ?? 10_000;
|
|
8
11
|
this.panner.refDistance = options.refDistance ?? 1;
|
|
9
12
|
this.panner.rolloffFactor = options.rolloffFactor ?? 1;
|
|
13
|
+
this.panner.coneInnerAngle = options.coneInnerAngle ?? 360;
|
|
14
|
+
this.panner.coneOuterAngle = options.coneOuterAngle ?? 360;
|
|
15
|
+
this.panner.coneOuterGain = options.coneOuterGain ?? 0;
|
|
10
16
|
this.panner.connect(options.destination ?? options.context.destination);
|
|
11
17
|
this.setPosition(options.position ?? { x: 0, y: 0, z: 0 });
|
|
18
|
+
if (options.orientation) {
|
|
19
|
+
this.setOrientation(options.orientation);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
get orientation() {
|
|
23
|
+
return { ...this.orientationRef };
|
|
12
24
|
}
|
|
13
25
|
setPosition(position) {
|
|
14
26
|
this.panner.positionX.value = position.x;
|
|
15
27
|
this.panner.positionY.value = position.y;
|
|
16
28
|
this.panner.positionZ.value = position.z;
|
|
17
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Point the emitter's cone axis. Prefers the `orientationX/Y/Z` AudioParams;
|
|
32
|
+
* falls back to the legacy `setOrientation` for contexts (or minimal fakes)
|
|
33
|
+
* that predate the AudioParam surface — the same dual path `syncListener`
|
|
34
|
+
* uses for the listener.
|
|
35
|
+
*/
|
|
36
|
+
setOrientation(orientation) {
|
|
37
|
+
this.orientationRef = { ...orientation };
|
|
38
|
+
const panner = this.panner;
|
|
39
|
+
if (panner.orientationX && panner.orientationY && panner.orientationZ) {
|
|
40
|
+
panner.orientationX.value = orientation.x;
|
|
41
|
+
panner.orientationY.value = orientation.y;
|
|
42
|
+
panner.orientationZ.value = orientation.z;
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
panner.setOrientation?.(orientation.x, orientation.y, orientation.z);
|
|
46
|
+
}
|
|
18
47
|
dispose() {
|
|
19
48
|
this.panner.disconnect();
|
|
20
49
|
}
|
package/dist/SpatialAudio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpatialAudio.js","sourceRoot":"","sources":["../../../../packages/audio/src/SpatialAudio.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SpatialAudio.js","sourceRoot":"","sources":["../../../../packages/audio/src/SpatialAudio.ts"],"names":[],"mappings":"AAGA,oFAAoF;AACpF,MAAM,mBAAmB,GAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AA0B3D,MAAM,OAAO,YAAY;IACd,MAAM,CAAa;IACpB,cAAc,GAAa,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAE9D,YAAY,OAA4B;QACtC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,SAAS,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,GAAG,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,GAAG,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACxE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,IAAI,WAAW;QACb,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACpC,CAAC;IAED,WAAW,CAAC,QAAkB;QAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,WAAqB;QAClC,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAEnB,CAAC;QACF,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACtE,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,MAAM,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Voice → PannerNode (HRTF on high/ultra, equalpower otherwise; inverse
|
|
5
5
|
* distance, refDistance 1, maxDistance 60, rolloff 1) → occlusion lowpass
|
|
6
|
-
* (BiquadFilterNode, 20 kHz open →
|
|
6
|
+
* (BiquadFilterNode, ~20 kHz open → 400 Hz occluded, quadratic map) → cue
|
|
7
7
|
* gain → bus.
|
|
8
8
|
*/
|
|
9
9
|
import type { SoundBiquadLike, SoundGraphContext, SoundNodeLike, SoundPannerLike, Vec3 } from "./types.js";
|
|
@@ -21,7 +21,7 @@ export interface SpatialNode {
|
|
|
21
21
|
readonly occlusionFilter: SoundBiquadLike;
|
|
22
22
|
setPosition(p: Vec3): void;
|
|
23
23
|
setVelocity(v: Vec3): void;
|
|
24
|
-
/** 0 = open (20 kHz), 1 = fully occluded (
|
|
24
|
+
/** 0 = open (~20 kHz), 1 = fully occluded (400 Hz). */
|
|
25
25
|
setOcclusion(amount01: number): void;
|
|
26
26
|
dispose(): void;
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpatialVoice.d.ts","sourceRoot":"","sources":["../../../../../packages/audio/src/game-sound/SpatialVoice.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,IAAI,EACL,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,uEAAuE;IACvE,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,
|
|
1
|
+
{"version":3,"file":"SpatialVoice.d.ts","sourceRoot":"","sources":["../../../../../packages/audio/src/game-sound/SpatialVoice.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,IAAI,EACL,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,uEAAuE;IACvE,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,uDAAuD;IACvD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;CACjB;AAMD,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,KAAG,MACmC,CAAC;AAEnF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CAuF1E"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Voice → PannerNode (HRTF on high/ultra, equalpower otherwise; inverse
|
|
5
5
|
* distance, refDistance 1, maxDistance 60, rolloff 1) → occlusion lowpass
|
|
6
|
-
* (BiquadFilterNode, 20 kHz open →
|
|
6
|
+
* (BiquadFilterNode, ~20 kHz open → 400 Hz occluded, quadratic map) → cue
|
|
7
7
|
* gain → bus.
|
|
8
8
|
*/
|
|
9
9
|
import { clamp, vec3 } from "./types.js";
|
package/dist/index.d.ts
CHANGED
|
@@ -11,13 +11,15 @@ export { AudioContextManager } from "./AudioContextManager.js";
|
|
|
11
11
|
export type { AudioContextLike, AudioContextManagerOptions, AudioContextState } from "./AudioContextManager.js";
|
|
12
12
|
export type { AudioEffect } from "./AudioEffect.js";
|
|
13
13
|
export { AudioListener } from "./AudioListener.js";
|
|
14
|
-
export type { Vec3Like } from "./AudioListener.js";
|
|
14
|
+
export type { AudioListenerOptions, Vec3Like } from "./AudioListener.js";
|
|
15
|
+
export { AudioAnalyser, createAudioAnalyser } from "./AudioAnalyser.js";
|
|
16
|
+
export type { AudioAnalyserOptions } from "./AudioAnalyser.js";
|
|
15
17
|
export { AudioMixer, createAudioMixerEvidence, createAnimationAudioMixer } from "./AudioMixer.js";
|
|
16
18
|
export type { AudioMixerBusEvidence, AudioMixerEvidence, AnimationAudioMixer, AnimationAudioMixerOptions } from "./AudioMixer.js";
|
|
17
19
|
export { AudioSource } from "./AudioSource.js";
|
|
18
20
|
export type { AudioSourceOptions, AudioSourceState } from "./AudioSource.js";
|
|
19
|
-
export { PositionalEmitter, applyOcclusionToGain, computeDistanceAttenuation, computeDopplerShift, occlusionLowpassFrequency, resolveOcclusion } from "./PositionalEmitter.js";
|
|
20
|
-
export type { DistanceAttenuationModel, DistanceAttenuationOptions, DopplerOptions, OcclusionHook, PositionalEmitterEvidence, PositionalEmitterOptions } from "./PositionalEmitter.js";
|
|
21
|
+
export { PositionalEmitter, applyOcclusionToGain, computeConeGain, computeDistanceAttenuation, computeDopplerShift, occlusionLowpassFrequency, resolveOcclusion } from "./PositionalEmitter.js";
|
|
22
|
+
export type { ConeOptions, DistanceAttenuationModel, DistanceAttenuationOptions, DopplerOptions, OcclusionHook, PositionalEmitterEvidence, PositionalEmitterOptions } from "./PositionalEmitter.js";
|
|
21
23
|
export { attachFocusPolicy, createGameMixer, focusHandlersForMixer } from "./GameMixer.js";
|
|
22
24
|
export type { FocusEventTargetLike, FocusMutePolicy, FocusPolicyHandlers, GameMixer, GameMixerBusLevel, GameMixerEvidence, GameMixerOptions } from "./GameMixer.js";
|
|
23
25
|
export { FootstepPlayer } from "./Footsteps.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAClF,YAAY,EACV,sBAAsB,EACtB,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,kBAAkB,EAClB,0BAA0B,EAC1B,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACpJ,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACjK,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC7G,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,9 +5,10 @@ export { createAudioTimelineMixSnapshot, defaultAudioTimelineBusForRole, validat
|
|
|
5
5
|
export { audioWaveformPeakRange, createAudioWaveform, createAudioWaveformPath, createAudioWaveformReviewData, sampleAudioWaveformAtTime } from "./AudioWaveform.js";
|
|
6
6
|
export { AudioContextManager } from "./AudioContextManager.js";
|
|
7
7
|
export { AudioListener } from "./AudioListener.js";
|
|
8
|
+
export { AudioAnalyser, createAudioAnalyser } from "./AudioAnalyser.js";
|
|
8
9
|
export { AudioMixer, createAudioMixerEvidence, createAnimationAudioMixer } from "./AudioMixer.js";
|
|
9
10
|
export { AudioSource } from "./AudioSource.js";
|
|
10
|
-
export { PositionalEmitter, applyOcclusionToGain, computeDistanceAttenuation, computeDopplerShift, occlusionLowpassFrequency, resolveOcclusion } from "./PositionalEmitter.js";
|
|
11
|
+
export { PositionalEmitter, applyOcclusionToGain, computeConeGain, computeDistanceAttenuation, computeDopplerShift, occlusionLowpassFrequency, resolveOcclusion } from "./PositionalEmitter.js";
|
|
11
12
|
export { attachFocusPolicy, createGameMixer, focusHandlersForMixer } from "./GameMixer.js";
|
|
12
13
|
export { FootstepPlayer } from "./Footsteps.js";
|
|
13
14
|
export { AudioSystem } from "./AudioSystem.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/audio/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAclF,OAAO,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAepJ,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAYjK,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAE/F,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,EAC1B,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/audio/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAclF,OAAO,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAepJ,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAYjK,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAE/F,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,yBAAyB,EACzB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAU7B,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAUxF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,+EAA+E;AAC/E,2EAA2E;AAC3E,OAAO,EAAE,qBAAqB,IAAI,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAG3F,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1F,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aura3d/audio",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"main": "./dist/index.js",
|
|
12
12
|
"types": "./dist/index.d.ts",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@aura3d/scene": "4.0.
|
|
14
|
+
"@aura3d/scene": "4.0.4"
|
|
15
15
|
},
|
|
16
16
|
"description": "Browser audio lifecycle, clips, sources, buses, mixing, listener transforms, spatial attenuation, effects, and scene audio bridges for Aura3D.",
|
|
17
17
|
"keywords": [
|