type Vec3 = [number, number, number]; /** * AudioOcclusion.ts * * Advanced obstacle-based audio occlusion and obstruction: * - Raycast-based occlusion detection * - dB-based transmission loss * - Frequency-dependent filtering (realistic "behind wall" muffled sound) * - Per-material frequency absorption curves * * @module audio */ /** * Frequency-dependent absorption coefficients (0-1 per frequency band) */ export interface FrequencyAbsorption { 125: number; 250: number; 500: number; 1000: number; 2000: number; 4000: number; 8000: number; } export interface OcclusionMaterial { id: string; name: string; absorptionCoefficient: number; transmissionLoss: number; frequencyAbsorption?: FrequencyAbsorption; } export interface OcclusionResult { sourceId: string; occluded: boolean; occlusionFactor: number; hitCount: number; totalTransmissionLoss: number; materials: string[]; lowPassCutoff: number; frequencyAttenuation: Partial; } export interface OcclusionRay { origin: Vec3; direction: Vec3; maxDistance: number; } export interface OcclusionHit { distance: number; materialId: string; thickness: number; } export declare const OCCLUSION_MATERIALS: Record; export type RaycastProvider = (ray: OcclusionRay) => OcclusionHit[]; export declare class AudioOcclusionSystem { private materials; private raycastProvider; private maxTransmissionLoss; private cache; private enableFrequencyFiltering; constructor(); setRaycastProvider(provider: RaycastProvider): void; registerMaterial(material: OcclusionMaterial): void; getMaterial(id: string): OcclusionMaterial | undefined; setMaxTransmissionLoss(db: number): void; setFrequencyFilteringEnabled(enabled: boolean): void; isFrequencyFilteringEnabled(): boolean; /** * Compute occlusion between listener and a source. * Uses the registered raycast provider to detect obstacles. * Now includes frequency-dependent filtering for realistic muffled sound. */ computeOcclusion(listenPos: Vec3, sourcePos: Vec3, sourceId: string): OcclusionResult; /** * Compute without raycasting — direct manual hit specification. * Useful for testing or pre-computed occlusion. */ computeFromHits(sourceId: string, hits: OcclusionHit[]): OcclusionResult; /** * Get the volume multiplier for a given occlusion factor. * Converts transmission loss to a linear volume reduction. */ getVolumeMultiplier(occlusionFactor: number): number; getCachedResult(sourceId: string): OcclusionResult | undefined; clearCache(): void; /** * Calculate low-pass filter cutoff frequency based on occlusion. * Returns cutoff in Hz (500Hz fully occluded, 22kHz no occlusion). */ private calculateLowPassCutoff; /** * Get frequency attenuation for a specific source. * Returns per-band attenuation (0-1, where 1 = fully absorbed). */ getFrequencyAttenuation(sourceId: string): Partial; /** * Get low-pass cutoff for a specific source. */ getLowPassCutoff(sourceId: string): number; } export {}; //# sourceMappingURL=AudioOcclusion.d.ts.map