Remove directional muffling, set rear directional range to 30%, and correct version to R119

This commit is contained in:
Jage9
2026-02-21 20:08:43 -05:00
parent 45ff3b13b1
commit 174845957a
3 changed files with 9 additions and 51 deletions

View File

@@ -1,7 +1,7 @@
import { HEARING_RADIUS, type WorldItem } from '../state/gameState';
import { EFFECT_IDS, clampEffectLevel, connectEffectChain, disconnectEffectRuntime, type EffectId, type EffectRuntime } from './effects';
import { AudioEngine } from './audioEngine';
import { resolveDirectionalMuffleRatio, resolveSpatialMix } from './spatial';
import { resolveSpatialMix } from './spatial';
export const RADIO_CHANNEL_OPTIONS = ['stereo', 'mono', 'left', 'right'] as const;
export type RadioChannelMode = (typeof RADIO_CHANNEL_OPTIONS)[number];
@@ -26,7 +26,6 @@ type ItemRadioOutput = {
effectRuntime: EffectRuntime | null;
effect: EffectId;
effectValue: number;
directionalFilter: BiquadFilterNode;
gain: GainNode;
panner: StereoPannerNode | null;
};
@@ -153,7 +152,6 @@ export class RadioStationRuntime {
output.sourceInput.disconnect();
output.effectInput.disconnect();
disconnectEffectRuntime(output.effectRuntime);
output.directionalFilter.disconnect();
output.gain.disconnect();
output.panner?.disconnect();
this.itemRadioOutputs.delete(itemId);
@@ -227,26 +225,11 @@ export class RadioStationRuntime {
enabled: spatialConfig.directional,
facingDeg: spatialConfig.facingDeg,
coneDeg: 120,
rearGain: 0.5,
rearGain: 0.3,
},
});
const gainValue = mix?.gain ?? 0;
const panValue = mix?.pan ?? 0;
const muffleRatio = resolveDirectionalMuffleRatio(
item.x - playerPosition.x,
item.y - playerPosition.y,
{
enabled: spatialConfig.directional,
facingDeg: spatialConfig.facingDeg,
coneDeg: 120,
rearGain: 0.35,
},
);
const clearCutoffHz = 22050;
const rearCutoffHz = 4500;
const muffleCurve = muffleRatio * muffleRatio;
const cutoffHz = clearCutoffHz - (clearCutoffHz - rearCutoffHz) * muffleCurve;
output.directionalFilter.frequency.linearRampToValueAtTime(cutoffHz, audioCtx.currentTime + 0.1);
output.gain.gain.linearRampToValueAtTime(gainValue, audioCtx.currentTime + 0.1);
if (output.panner) {
const resolvedPan = this.audio.getOutputMode() === 'mono' ? 0 : Math.max(-1, Math.min(1, panValue));
@@ -266,7 +249,7 @@ export class RadioStationRuntime {
}
output.effectInput.disconnect();
disconnectEffectRuntime(output.effectRuntime);
output.effectRuntime = connectEffectChain(audioCtx, output.effectInput, output.directionalFilter, effect, effectValue);
output.effectRuntime = connectEffectChain(audioCtx, output.effectInput, output.gain, effect, effectValue);
output.effect = effect;
output.effectValue = effectValue;
}
@@ -330,15 +313,11 @@ export class RadioStationRuntime {
const gain = audioCtx.createGain();
gain.gain.value = 0;
const directionalFilter = audioCtx.createBiquadFilter();
directionalFilter.type = 'lowpass';
directionalFilter.frequency.value = 12000;
const effectInput = audioCtx.createGain();
const channelSource = connectRadioChannelSource(audioCtx, shared.source, channel, effectInput);
const effect = normalizeRadioEffect(item.params.effect);
const effectValue = normalizeRadioEffectValue(item.params.effectValue);
const effectRuntime = connectEffectChain(audioCtx, effectInput, directionalFilter, effect, effectValue);
directionalFilter.connect(gain);
const effectRuntime = connectEffectChain(audioCtx, effectInput, gain, effect, effectValue);
let panner: StereoPannerNode | null = null;
if (this.audio.supportsStereoPanner()) {
panner = audioCtx.createStereoPanner();
@@ -359,7 +338,6 @@ export class RadioStationRuntime {
effectRuntime,
effect,
effectValue,
directionalFilter,
gain,
panner,
});