@aura3d/audio 1.0.6

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.
Files changed (84) hide show
  1. package/README.md +16 -0
  2. package/dist/AdaptiveMusicFixtures.d.ts +36 -0
  3. package/dist/AdaptiveMusicFixtures.d.ts.map +1 -0
  4. package/dist/AdaptiveMusicFixtures.js +90 -0
  5. package/dist/AdaptiveMusicFixtures.js.map +1 -0
  6. package/dist/AudioBus.d.ts +13 -0
  7. package/dist/AudioBus.d.ts.map +1 -0
  8. package/dist/AudioBus.js +32 -0
  9. package/dist/AudioBus.js.map +1 -0
  10. package/dist/AudioClip.d.ts +13 -0
  11. package/dist/AudioClip.d.ts.map +1 -0
  12. package/dist/AudioClip.js +18 -0
  13. package/dist/AudioClip.js.map +1 -0
  14. package/dist/AudioContextManager.d.ts +31 -0
  15. package/dist/AudioContextManager.d.ts.map +1 -0
  16. package/dist/AudioContextManager.js +49 -0
  17. package/dist/AudioContextManager.js.map +1 -0
  18. package/dist/AudioEffect.d.ts +8 -0
  19. package/dist/AudioEffect.d.ts.map +1 -0
  20. package/dist/AudioEffect.js +2 -0
  21. package/dist/AudioEffect.js.map +1 -0
  22. package/dist/AudioEffectsAnalysisFixtures.d.ts +99 -0
  23. package/dist/AudioEffectsAnalysisFixtures.d.ts.map +1 -0
  24. package/dist/AudioEffectsAnalysisFixtures.js +192 -0
  25. package/dist/AudioEffectsAnalysisFixtures.js.map +1 -0
  26. package/dist/AudioListener.d.ts +12 -0
  27. package/dist/AudioListener.d.ts.map +1 -0
  28. package/dist/AudioListener.js +11 -0
  29. package/dist/AudioListener.js.map +1 -0
  30. package/dist/AudioMixer.d.ts +12 -0
  31. package/dist/AudioMixer.d.ts.map +1 -0
  32. package/dist/AudioMixer.js +33 -0
  33. package/dist/AudioMixer.js.map +1 -0
  34. package/dist/AudioSource.d.ts +25 -0
  35. package/dist/AudioSource.d.ts.map +1 -0
  36. package/dist/AudioSource.js +58 -0
  37. package/dist/AudioSource.js.map +1 -0
  38. package/dist/AudioSystem.d.ts +13 -0
  39. package/dist/AudioSystem.d.ts.map +1 -0
  40. package/dist/AudioSystem.js +28 -0
  41. package/dist/AudioSystem.js.map +1 -0
  42. package/dist/SceneAudioBridge.d.ts +19 -0
  43. package/dist/SceneAudioBridge.d.ts.map +1 -0
  44. package/dist/SceneAudioBridge.js +37 -0
  45. package/dist/SceneAudioBridge.js.map +1 -0
  46. package/dist/SpatialAudio.d.ts +17 -0
  47. package/dist/SpatialAudio.d.ts.map +1 -0
  48. package/dist/SpatialAudio.js +22 -0
  49. package/dist/SpatialAudio.js.map +1 -0
  50. package/dist/SpatialAudioFixtures.d.ts +38 -0
  51. package/dist/SpatialAudioFixtures.d.ts.map +1 -0
  52. package/dist/SpatialAudioFixtures.js +94 -0
  53. package/dist/SpatialAudioFixtures.js.map +1 -0
  54. package/dist/effects/Filter.d.ts +13 -0
  55. package/dist/effects/Filter.d.ts.map +1 -0
  56. package/dist/effects/Filter.js +31 -0
  57. package/dist/effects/Filter.js.map +1 -0
  58. package/dist/effects/Reverb.d.ts +12 -0
  59. package/dist/effects/Reverb.d.ts.map +1 -0
  60. package/dist/effects/Reverb.js +23 -0
  61. package/dist/effects/Reverb.js.map +1 -0
  62. package/dist/index.d.ts +25 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +15 -0
  65. package/dist/index.js.map +1 -0
  66. package/package.json +16 -0
  67. package/src/AdaptiveMusicFixtures.ts +132 -0
  68. package/src/AudioBus.ts +39 -0
  69. package/src/AudioClip.ts +26 -0
  70. package/src/AudioContextManager.ts +74 -0
  71. package/src/AudioEffect.ts +7 -0
  72. package/src/AudioEffectsAnalysisFixtures.ts +311 -0
  73. package/src/AudioListener.ts +17 -0
  74. package/src/AudioMixer.ts +36 -0
  75. package/src/AudioSource.ts +75 -0
  76. package/src/AudioSystem.ts +34 -0
  77. package/src/SceneAudioBridge.ts +49 -0
  78. package/src/SpatialAudio.ts +36 -0
  79. package/src/SpatialAudioFixtures.ts +137 -0
  80. package/src/effects/Filter.ts +39 -0
  81. package/src/effects/Reverb.ts +30 -0
  82. package/src/index.ts +33 -0
  83. package/tests/audio.test.ts +121 -0
  84. package/tsconfig.json +7 -0
@@ -0,0 +1,192 @@
1
+ const COMPRESSOR_PRESETS = {
2
+ gentle: { thresholdDb: -30, kneeDb: 20, ratio: 2, attackSeconds: 0.01, releaseSeconds: 0.3 },
3
+ moderate: { thresholdDb: -24, kneeDb: 30, ratio: 4, attackSeconds: 0.005, releaseSeconds: 0.25 },
4
+ aggressive: { thresholdDb: -18, kneeDb: 10, ratio: 8, attackSeconds: 0.001, releaseSeconds: 0.1 },
5
+ limiter: { thresholdDb: -6, kneeDb: 0, ratio: 20, attackSeconds: 0.001, releaseSeconds: 0.05 },
6
+ vocal: { thresholdDb: -20, kneeDb: 15, ratio: 3, attackSeconds: 0.005, releaseSeconds: 0.2 },
7
+ drums: { thresholdDb: -18, kneeDb: 5, ratio: 6, attackSeconds: 0.001, releaseSeconds: 0.08 },
8
+ master: { thresholdDb: -14, kneeDb: 8, ratio: 3, attackSeconds: 0.004, releaseSeconds: 0.16 }
9
+ };
10
+ const SPECTRUM_BANDS = [
11
+ { name: "Sub Bass", minHz: 20, maxHz: 60 },
12
+ { name: "Bass", minHz: 60, maxHz: 250 },
13
+ { name: "Low Mid", minHz: 250, maxHz: 500 },
14
+ { name: "Mid", minHz: 500, maxHz: 2_000 },
15
+ { name: "High Mid", minHz: 2_000, maxHz: 4_000 },
16
+ { name: "Presence", minHz: 4_000, maxHz: 6_000 },
17
+ { name: "Brilliance", minHz: 6_000, maxHz: 20_000 }
18
+ ];
19
+ export function sampleAudioEffectsAnalysisFixture(options = {}) {
20
+ const preset = options.preset ?? "master";
21
+ const compressorPreset = COMPRESSOR_PRESETS[preset];
22
+ const intensity = clamp01(options.intensity ?? 0.72);
23
+ const inputPeakDb = clamp(options.inputPeakDb ?? -3.5, -60, 6);
24
+ const overThresholdDb = Math.max(0, inputPeakDb - compressorPreset.thresholdDb);
25
+ const compressedOverage = overThresholdDb / compressorPreset.ratio;
26
+ const gainReductionDb = round(Math.max(0, overThresholdDb - compressedOverage));
27
+ const makeupGainDb = round(Math.min(6, gainReductionDb * 0.38));
28
+ const outputPeakDb = round(inputPeakDb - gainReductionDb + makeupGainDb);
29
+ const eqBands = eqBandsForIntensity(intensity);
30
+ const spectrumBands = SPECTRUM_BANDS.map((band, index) => ({
31
+ ...band,
32
+ magnitude: round(clamp01((Math.sin(index * 1.37 + intensity * 2.1) + 1) * 0.29 + intensity * (index === 1 || index === 5 ? 0.28 : 0.16)))
33
+ }));
34
+ const bars = spectrumBars(spectrumBands, 16);
35
+ const peak = spectrumBands.reduce((best, band) => band.magnitude > best.magnitude ? band : best, spectrumBands[0]);
36
+ const fixture = {
37
+ source: "origin-master-audio-effects-analysis-adapted",
38
+ effectChain: ["parametric-eq", "dynamic-compressor", "delay", "chorus", "distortion", "filter", "spectrum-analyzer"],
39
+ compressor: {
40
+ preset,
41
+ ...compressorPreset,
42
+ inputPeakDb: round(inputPeakDb),
43
+ outputPeakDb,
44
+ gainReductionDb,
45
+ makeupGainDb,
46
+ limiterTriggered: outputPeakDb >= -0.5 || preset === "limiter"
47
+ },
48
+ eq: {
49
+ bands: eqBands,
50
+ activeBandCount: eqBands.filter((band) => band.enabled).length,
51
+ lowShelfGainDb: eqBands[0]?.gainDb ?? 0,
52
+ presenceGainDb: eqBands.find((band) => band.name === "presence-lift")?.gainDb ?? 0,
53
+ outputGain: round(1 - Math.max(0, outputPeakDb) * 0.05)
54
+ },
55
+ delay: delayFixture(intensity),
56
+ chorus: chorusFixture(intensity),
57
+ distortion: distortionFixture(intensity, inputPeakDb),
58
+ filter: filterFixture(intensity),
59
+ spectrum: {
60
+ bands: spectrumBands,
61
+ barCount: bars.length,
62
+ bars,
63
+ peakFrequencyHz: Math.round((peak.minHz + peak.maxHz) / 2),
64
+ peakMagnitude: peak.magnitude,
65
+ logarithmicScale: true
66
+ },
67
+ hash: "",
68
+ claimBoundary: "Audio effects fixture adapts old compressor, EQ, delay, chorus, distortion, filter, and spectrum-analysis concepts for deterministic telemetry; it does not instantiate a production WebAudio mastering graph or prove audio middleware parity.",
69
+ blockedClaims: [
70
+ "production WebAudio effects graph parity",
71
+ "production delay/chorus/distortion/filter node graph parity",
72
+ "real-time FFT browser analyzer certification",
73
+ "audio middleware mastering parity",
74
+ "Unity Audio Mixer parity",
75
+ "Unreal Audio Mixer parity"
76
+ ]
77
+ };
78
+ return {
79
+ ...fixture,
80
+ hash: stableHash([
81
+ fixture.compressor.preset,
82
+ fixture.compressor.outputPeakDb,
83
+ fixture.compressor.gainReductionDb,
84
+ fixture.delay.preset,
85
+ fixture.delay.repeatsAboveNoiseFloor,
86
+ fixture.chorus.voices,
87
+ fixture.chorus.stereoWidth,
88
+ fixture.distortion.curve,
89
+ fixture.distortion.harmonicBoost,
90
+ fixture.filter.frequencyHz,
91
+ fixture.eq.bands.map((band) => `${band.frequencyHz}:${band.gainDb}`).join(","),
92
+ fixture.spectrum.peakFrequencyHz,
93
+ fixture.spectrum.peakMagnitude
94
+ ].join("|"))
95
+ };
96
+ }
97
+ function delayFixture(intensity) {
98
+ const preset = intensity > 0.7 ? "tape_echo" : intensity > 0.52 ? "medium_echo" : "short_echo";
99
+ const delayTimeSeconds = preset === "tape_echo" ? 0.42 : preset === "medium_echo" ? 0.5 : 0.25;
100
+ const feedback = round(preset === "tape_echo" ? 0.58 : 0.22 + intensity * 0.35);
101
+ const wetDryMix = round(0.24 + intensity * 0.34);
102
+ return {
103
+ source: "origin-master-delay-effect-adapted",
104
+ preset,
105
+ delayTimeSeconds,
106
+ feedback,
107
+ wetDryMix,
108
+ filterFrequencyHz: Math.round(7_500 - intensity * 4_600),
109
+ pingPong: preset === "tape_echo" || intensity > 0.82,
110
+ repeatsAboveNoiseFloor: Math.max(1, Math.min(8, Math.ceil(Math.log(0.04) / Math.log(Math.max(0.05, feedback)))))
111
+ };
112
+ }
113
+ function chorusFixture(intensity) {
114
+ const preset = intensity > 0.72 ? "ensemble" : intensity > 0.5 ? "classic" : "subtle";
115
+ const voices = preset === "ensemble" ? 4 : preset === "classic" ? 2 : 1;
116
+ return {
117
+ source: "origin-master-chorus-effect-adapted",
118
+ preset,
119
+ rateHz: round(0.85 + intensity * 2.2),
120
+ depthSeconds: round(0.0012 + intensity * 0.006),
121
+ feedback: round(0.08 + intensity * 0.26),
122
+ wetDryMix: round(0.18 + intensity * 0.42),
123
+ delaySeconds: round(0.012 + intensity * 0.018),
124
+ voices,
125
+ stereoWidth: round(Math.min(1, 0.36 + voices * 0.13 + intensity * 0.22))
126
+ };
127
+ }
128
+ function distortionFixture(intensity, inputPeakDb) {
129
+ const curve = intensity > 0.76 ? "saturation" : intensity > 0.58 ? "softclip" : "sigmoid";
130
+ const amount = round(18 + intensity * 62);
131
+ const preGain = round(1 + intensity * 2.4);
132
+ const postGain = round(Math.max(0.42, 1 - intensity * 0.36));
133
+ const harmonicBoost = round(Math.max(0, amount / 100 * preGain * Math.max(0.25, (inputPeakDb + 24) / 24)));
134
+ return {
135
+ source: "origin-master-distortion-effect-adapted",
136
+ curve,
137
+ amount,
138
+ preGain,
139
+ postGain,
140
+ wetDryMix: round(0.2 + intensity * 0.55),
141
+ harmonicBoost,
142
+ outputCeiling: round(Math.min(0.98, postGain + harmonicBoost * 0.08))
143
+ };
144
+ }
145
+ function filterFixture(intensity) {
146
+ const type = intensity > 0.62 ? "lowpass" : "bandpass";
147
+ const frequencyHz = Math.round(type === "lowpass" ? 6_800 - intensity * 2_400 : 1_200 + intensity * 2_200);
148
+ const q = round(0.7 + intensity * 1.6);
149
+ return {
150
+ source: "origin-master-filter-effect-adapted",
151
+ type,
152
+ frequencyHz,
153
+ q,
154
+ resonanceDb: round(q * 2.6),
155
+ enabled: true
156
+ };
157
+ }
158
+ function eqBandsForIntensity(intensity) {
159
+ return [
160
+ { name: "low-body", type: "lowshelf", frequencyHz: 120, q: 0.7, gainDb: round(2.4 * intensity), enabled: true },
161
+ { name: "mud-cut", type: "peaking", frequencyHz: 360, q: 1.1, gainDb: round(-1.8 * intensity), enabled: true },
162
+ { name: "presence-lift", type: "peaking", frequencyHz: 3_200, q: 0.9, gainDb: round(2.2 * intensity), enabled: true },
163
+ { name: "air", type: "highshelf", frequencyHz: 8_500, q: 0.8, gainDb: round(1.6 * intensity), enabled: true }
164
+ ];
165
+ }
166
+ function spectrumBars(bands, count) {
167
+ const bars = [];
168
+ for (let index = 0; index < count; index += 1) {
169
+ const band = bands[Math.min(bands.length - 1, Math.floor(index / count * bands.length))];
170
+ const shimmer = 0.85 + 0.15 * Math.sin(index * 0.9);
171
+ bars.push(round(clamp01(band.magnitude * shimmer)));
172
+ }
173
+ return bars;
174
+ }
175
+ function clamp01(value) {
176
+ return clamp(value, 0, 1);
177
+ }
178
+ function clamp(value, min, max) {
179
+ return Math.max(min, Math.min(max, Number.isFinite(value) ? value : min));
180
+ }
181
+ function round(value) {
182
+ return Number(value.toFixed(4));
183
+ }
184
+ function stableHash(value) {
185
+ let hash = 0x811c9dc5;
186
+ for (let index = 0; index < value.length; index += 1) {
187
+ hash ^= value.charCodeAt(index);
188
+ hash = Math.imul(hash, 0x01000193);
189
+ }
190
+ return (hash >>> 0).toString(16).padStart(8, "0");
191
+ }
192
+ //# sourceMappingURL=AudioEffectsAnalysisFixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioEffectsAnalysisFixtures.js","sourceRoot":"","sources":["../../../../packages/audio/src/AudioEffectsAnalysisFixtures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface Vec3Like {
2
+ readonly x: number;
3
+ readonly y: number;
4
+ readonly z: number;
5
+ }
6
+ export declare class AudioListener {
7
+ position: Vec3Like;
8
+ forward: Vec3Like;
9
+ up: Vec3Like;
10
+ setTransform(position: Vec3Like, forward?: Vec3Like, up?: Vec3Like): void;
11
+ }
12
+ //# sourceMappingURL=AudioListener.d.ts.map
@@ -0,0 +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;CAKjG"}
@@ -0,0 +1,11 @@
1
+ export class AudioListener {
2
+ position = { x: 0, y: 0, z: 0 };
3
+ forward = { x: 0, y: 0, z: -1 };
4
+ up = { x: 0, y: 1, z: 0 };
5
+ setTransform(position, forward = this.forward, up = this.up) {
6
+ this.position = { ...position };
7
+ this.forward = { ...forward };
8
+ this.up = { ...up };
9
+ }
10
+ }
11
+ //# sourceMappingURL=AudioListener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioListener.js","sourceRoot":"","sources":["../../../../packages/audio/src/AudioListener.ts"],"names":[],"mappings":"AAMA,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;IAEpC,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;IACtB,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import { AudioBus } from "./AudioBus";
2
+ import type { AudioContextLike } from "./AudioContextManager";
3
+ export declare class AudioMixer {
4
+ private readonly context;
5
+ readonly master: AudioBus;
6
+ private readonly buses;
7
+ constructor(context: AudioContextLike);
8
+ createBus(name: string, destination?: AudioNode): AudioBus;
9
+ getBus(name: string): AudioBus;
10
+ dispose(): void;
11
+ }
12
+ //# sourceMappingURL=AudioMixer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioMixer.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/AudioMixer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,qBAAa,UAAU;IAIT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;gBAExB,OAAO,EAAE,gBAAgB;IAKtD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,SAA6B,GAAG,QAAQ;IAS7E,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAQ9B,OAAO,IAAI,IAAI;CAMhB"}
@@ -0,0 +1,33 @@
1
+ import { AudioBus } from "./AudioBus.js";
2
+ export class AudioMixer {
3
+ context;
4
+ master;
5
+ buses = new Map();
6
+ constructor(context) {
7
+ this.context = context;
8
+ this.master = new AudioBus("master", context);
9
+ this.buses.set(this.master.name, this.master);
10
+ }
11
+ createBus(name, destination = this.master.input) {
12
+ if (this.buses.has(name)) {
13
+ throw new Error(`Audio bus already exists: ${name}`);
14
+ }
15
+ const bus = new AudioBus(name, this.context, destination);
16
+ this.buses.set(name, bus);
17
+ return bus;
18
+ }
19
+ getBus(name) {
20
+ const bus = this.buses.get(name);
21
+ if (!bus) {
22
+ throw new Error(`Unknown audio bus: ${name}`);
23
+ }
24
+ return bus;
25
+ }
26
+ dispose() {
27
+ for (const bus of [...this.buses.values()].reverse()) {
28
+ bus.dispose();
29
+ }
30
+ this.buses.clear();
31
+ }
32
+ }
33
+ //# sourceMappingURL=AudioMixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioMixer.js","sourceRoot":"","sources":["../../../../packages/audio/src/AudioMixer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,MAAM,OAAO,UAAU;IAIQ;IAHpB,MAAM,CAAW;IACT,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAErD,YAA6B,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QACpD,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,cAAyB,IAAI,CAAC,MAAM,CAAC,KAAK;QAChE,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO;QACL,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import type { AudioClip } from "./AudioClip";
2
+ import type { AudioContextLike } from "./AudioContextManager";
3
+ export type AudioSourceState = "idle" | "playing" | "paused" | "stopped";
4
+ export interface AudioSourceOptions {
5
+ readonly context: AudioContextLike;
6
+ readonly destination?: AudioNode;
7
+ readonly clip?: AudioClip;
8
+ readonly loop?: boolean;
9
+ readonly volume?: number;
10
+ }
11
+ export declare class AudioSource {
12
+ private readonly options;
13
+ clip?: AudioClip;
14
+ loop: boolean;
15
+ readonly gain: GainNode;
16
+ private stateRef;
17
+ private node?;
18
+ constructor(options: AudioSourceOptions);
19
+ get state(): AudioSourceState;
20
+ play(when?: number): void;
21
+ stop(when?: number): void;
22
+ setVolume(value: number): void;
23
+ dispose(): void;
24
+ }
25
+ //# sourceMappingURL=AudioSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioSource.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/AudioSource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,WAAW;IAQV,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPpC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAExB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAwB;gBAER,OAAO,EAAE,kBAAkB;IAQxD,IAAI,KAAK,IAAI,gBAAgB,CAE5B;IAED,IAAI,CAAC,IAAI,SAAI,GAAG,IAAI;IAmBpB,IAAI,CAAC,IAAI,SAAI,GAAG,IAAI;IAWpB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO9B,OAAO,IAAI,IAAI;CAIhB"}
@@ -0,0 +1,58 @@
1
+ export class AudioSource {
2
+ options;
3
+ clip;
4
+ loop;
5
+ gain;
6
+ stateRef = "idle";
7
+ node;
8
+ constructor(options) {
9
+ this.options = options;
10
+ this.clip = options.clip;
11
+ this.loop = options.loop ?? false;
12
+ this.gain = options.context.createGain();
13
+ this.gain.gain.value = options.volume ?? 1;
14
+ this.gain.connect(options.destination ?? options.context.destination);
15
+ }
16
+ get state() {
17
+ return this.stateRef;
18
+ }
19
+ play(when = 0) {
20
+ if (!this.clip) {
21
+ throw new Error("Cannot play an AudioSource without an AudioClip");
22
+ }
23
+ this.stop();
24
+ const source = this.options.context.createBufferSource();
25
+ source.buffer = this.clip.buffer;
26
+ source.loop = this.loop;
27
+ source.connect(this.gain);
28
+ source.start(when);
29
+ source.onended = () => {
30
+ if (this.node === source && this.stateRef === "playing") {
31
+ this.stateRef = "stopped";
32
+ }
33
+ };
34
+ this.node = source;
35
+ this.stateRef = "playing";
36
+ }
37
+ stop(when = 0) {
38
+ if (this.node) {
39
+ this.node.stop(when);
40
+ this.node.disconnect();
41
+ this.node = undefined;
42
+ }
43
+ if (this.stateRef !== "idle") {
44
+ this.stateRef = "stopped";
45
+ }
46
+ }
47
+ setVolume(value) {
48
+ if (!Number.isFinite(value) || value < 0) {
49
+ throw new Error("Audio source volume must be a non-negative finite number");
50
+ }
51
+ this.gain.gain.value = value;
52
+ }
53
+ dispose() {
54
+ this.stop();
55
+ this.gain.disconnect();
56
+ }
57
+ }
58
+ //# sourceMappingURL=AudioSource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioSource.js","sourceRoot":"","sources":["../../../../packages/audio/src/AudioSource.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,WAAW;IAQO;IAP7B,IAAI,CAAa;IACjB,IAAI,CAAU;IACL,IAAI,CAAW;IAEhB,QAAQ,GAAqB,MAAM,CAAC;IACpC,IAAI,CAAyB;IAErC,YAA6B,OAA2B;QAA3B,YAAO,GAAP,OAAO,CAAoB;QACtD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,CAAC,IAAI,GAAG,CAAC;QACX,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;QACzD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACjC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE;YACpB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACxD,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,IAAI,GAAG,CAAC;QACX,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAC/B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import { AudioContextManager, type AudioContextManagerOptions } from "./AudioContextManager";
2
+ import { AudioMixer } from "./AudioMixer";
3
+ export declare class AudioSystem {
4
+ readonly contextManager: AudioContextManager;
5
+ private mixerRef?;
6
+ constructor(options?: AudioContextManagerOptions);
7
+ get mixer(): AudioMixer;
8
+ unlock(): Promise<void>;
9
+ suspend(): Promise<void>;
10
+ resume(): Promise<void>;
11
+ dispose(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=AudioSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioSystem.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/AudioSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBAAa,WAAW;IACtB,QAAQ,CAAC,cAAc,EAAE,mBAAmB,CAAC;IAC7C,OAAO,CAAC,QAAQ,CAAC,CAAa;gBAElB,OAAO,GAAE,0BAA+B;IAIpD,IAAI,KAAK,IAAI,UAAU,CAGtB;IAEK,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}
@@ -0,0 +1,28 @@
1
+ import { AudioContextManager } from "./AudioContextManager.js";
2
+ import { AudioMixer } from "./AudioMixer.js";
3
+ export class AudioSystem {
4
+ contextManager;
5
+ mixerRef;
6
+ constructor(options = {}) {
7
+ this.contextManager = new AudioContextManager(options);
8
+ }
9
+ get mixer() {
10
+ this.mixerRef ??= new AudioMixer(this.contextManager.context);
11
+ return this.mixerRef;
12
+ }
13
+ async unlock() {
14
+ await this.contextManager.unlock();
15
+ }
16
+ async suspend() {
17
+ await this.contextManager.suspend();
18
+ }
19
+ async resume() {
20
+ await this.contextManager.resume();
21
+ }
22
+ async dispose() {
23
+ this.mixerRef?.dispose();
24
+ this.mixerRef = undefined;
25
+ await this.contextManager.dispose();
26
+ }
27
+ }
28
+ //# sourceMappingURL=AudioSystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioSystem.js","sourceRoot":"","sources":["../../../../packages/audio/src/AudioSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAmC,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,OAAO,WAAW;IACb,cAAc,CAAsB;IACrC,QAAQ,CAAc;IAE9B,YAAY,UAAsC,EAAE;QAClD,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,KAAK;QACP,IAAI,CAAC,QAAQ,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import type { Scene, SceneNode } from "@aura3d/scene";
2
+ import type { AudioListener } from "./AudioListener";
3
+ import type { SpatialAudio } from "./SpatialAudio";
4
+ export interface SceneAudioSourceBinding {
5
+ readonly node: SceneNode;
6
+ readonly spatial: SpatialAudio;
7
+ }
8
+ export declare class SceneAudioBridge {
9
+ private readonly scene?;
10
+ private listenerBinding?;
11
+ private readonly sources;
12
+ constructor(scene?: Scene | undefined);
13
+ bindListener(node: SceneNode, listener: AudioListener): void;
14
+ unbindListener(): void;
15
+ bindSource(node: SceneNode, spatial: SpatialAudio): SceneAudioSourceBinding;
16
+ unbindSource(binding: SceneAudioSourceBinding): void;
17
+ update(): void;
18
+ }
19
+ //# sourceMappingURL=SceneAudioBridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneAudioBridge.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/SceneAudioBridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAED,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAHnC,OAAO,CAAC,eAAe,CAAC,CAAiE;IACzF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;gBAEjC,KAAK,CAAC,EAAE,KAAK,YAAA;IAE1C,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAI5D,cAAc,IAAI,IAAI;IAItB,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,GAAG,uBAAuB;IAM3E,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAIpD,MAAM,IAAI,IAAI;CASf"}
@@ -0,0 +1,37 @@
1
+ export class SceneAudioBridge {
2
+ scene;
3
+ listenerBinding;
4
+ sources = new Set();
5
+ constructor(scene) {
6
+ this.scene = scene;
7
+ }
8
+ bindListener(node, listener) {
9
+ this.listenerBinding = { node, listener };
10
+ }
11
+ unbindListener() {
12
+ this.listenerBinding = undefined;
13
+ }
14
+ bindSource(node, spatial) {
15
+ const binding = { node, spatial };
16
+ this.sources.add(binding);
17
+ return binding;
18
+ }
19
+ unbindSource(binding) {
20
+ this.sources.delete(binding);
21
+ }
22
+ update() {
23
+ this.scene?.updateWorldTransforms();
24
+ if (this.listenerBinding) {
25
+ this.listenerBinding.listener.setTransform(worldPosition(this.listenerBinding.node));
26
+ }
27
+ for (const binding of this.sources) {
28
+ binding.spatial.setPosition(worldPosition(binding.node));
29
+ }
30
+ }
31
+ }
32
+ function worldPosition(node) {
33
+ node.updateWorldTransform();
34
+ const matrix = node.transform.worldMatrix;
35
+ return { x: matrix[12], y: matrix[13], z: matrix[14] };
36
+ }
37
+ //# sourceMappingURL=SceneAudioBridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SceneAudioBridge.js","sourceRoot":"","sources":["../../../../packages/audio/src/SceneAudioBridge.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,gBAAgB;IAIE;IAHrB,eAAe,CAAkE;IACxE,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE9D,YAA6B,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;IAAG,CAAC;IAE9C,YAAY,CAAC,IAAe,EAAE,QAAuB;QACnD,IAAI,CAAC,eAAe,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5C,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IACnC,CAAC;IAED,UAAU,CAAC,IAAe,EAAE,OAAqB;QAC/C,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,YAAY,CAAC,OAAgC;QAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,KAAK,EAAE,qBAAqB,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;QACvF,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;CACF;AAED,SAAS,aAAa,CAAC,IAAe;IACpC,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAgC,CAAC;IAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AACzD,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { AudioContextLike } from "./AudioContextManager";
2
+ import type { Vec3Like } from "./AudioListener";
3
+ export interface SpatialAudioOptions {
4
+ readonly context: AudioContextLike;
5
+ readonly destination?: AudioNode;
6
+ readonly position?: Vec3Like;
7
+ readonly maxDistance?: number;
8
+ readonly refDistance?: number;
9
+ readonly rolloffFactor?: number;
10
+ }
11
+ export declare class SpatialAudio {
12
+ readonly panner: PannerNode;
13
+ constructor(options: SpatialAudioOptions);
14
+ setPosition(position: Vec3Like): void;
15
+ dispose(): void;
16
+ }
17
+ //# sourceMappingURL=SpatialAudio.d.ts.map
@@ -0,0 +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;AAEhD,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,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEhB,OAAO,EAAE,mBAAmB;IAWxC,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAMrC,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,22 @@
1
+ export class SpatialAudio {
2
+ panner;
3
+ constructor(options) {
4
+ this.panner = options.context.createPanner();
5
+ this.panner.panningModel = "HRTF";
6
+ this.panner.distanceModel = "inverse";
7
+ this.panner.maxDistance = options.maxDistance ?? 10_000;
8
+ this.panner.refDistance = options.refDistance ?? 1;
9
+ this.panner.rolloffFactor = options.rolloffFactor ?? 1;
10
+ this.panner.connect(options.destination ?? options.context.destination);
11
+ this.setPosition(options.position ?? { x: 0, y: 0, z: 0 });
12
+ }
13
+ setPosition(position) {
14
+ this.panner.positionX.value = position.x;
15
+ this.panner.positionY.value = position.y;
16
+ this.panner.positionZ.value = position.z;
17
+ }
18
+ dispose() {
19
+ this.panner.disconnect();
20
+ }
21
+ }
22
+ //# sourceMappingURL=SpatialAudio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpatialAudio.js","sourceRoot":"","sources":["../../../../packages/audio/src/SpatialAudio.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,YAAY;IACd,MAAM,CAAa;IAE5B,YAAY,OAA4B;QACtC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;QACtC,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,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;IAC7D,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,OAAO;QACL,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,38 @@
1
+ export type AudioOcclusionLevel = "none" | "light" | "medium" | "heavy" | "complete";
2
+ export interface AudioEnvironmentFixtureOptions {
3
+ readonly sourcePosition?: readonly [number, number, number];
4
+ readonly listenerPosition?: readonly [number, number, number];
5
+ readonly sourceVelocity?: readonly [number, number, number];
6
+ readonly listenerVelocity?: readonly [number, number, number];
7
+ readonly obstacleCount?: number;
8
+ readonly reverbZoneRadius?: number;
9
+ readonly reverbZoneDistance?: number;
10
+ readonly baseFrequencyHz?: number;
11
+ }
12
+ export interface AudioEnvironmentFixture {
13
+ readonly source: "origin-master-spatial-audio-environment-adapted";
14
+ readonly distance: number;
15
+ readonly occlusion: {
16
+ readonly level: AudioOcclusionLevel;
17
+ readonly obstacleCount: number;
18
+ readonly lowpassHz: number;
19
+ readonly volume: number;
20
+ };
21
+ readonly doppler: {
22
+ readonly relativeVelocity: number;
23
+ readonly approaching: boolean;
24
+ readonly pitchFactor: number;
25
+ readonly frequencyShiftHz: number;
26
+ };
27
+ readonly reverb: {
28
+ readonly zoneRadius: number;
29
+ readonly zoneDistance: number;
30
+ readonly blend: number;
31
+ readonly wetLevel: number;
32
+ readonly dryLevel: number;
33
+ };
34
+ readonly hash: string;
35
+ readonly claimBoundary: string;
36
+ }
37
+ export declare function sampleAudioEnvironmentFixture(options?: AudioEnvironmentFixtureOptions): AudioEnvironmentFixture;
38
+ //# sourceMappingURL=SpatialAudioFixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpatialAudioFixtures.d.ts","sourceRoot":"","sources":["../../../../packages/audio/src/SpatialAudioFixtures.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAErF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,iDAAiD,CAAC;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE;QAClB,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;QACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;QAClC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;QAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;KACnC,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAUD,wBAAgB,6BAA6B,CAAC,OAAO,GAAE,8BAAmC,GAAG,uBAAuB,CA+CnH"}