docs: complete jsdoc pass and enforce newest-first changelog order
This commit is contained in:
@@ -145,6 +145,7 @@ export function connectEffectChain(
|
||||
return runtime;
|
||||
}
|
||||
|
||||
/** Generates a synthetic impulse buffer used by the reverb convolver effect. */
|
||||
function createImpulseResponse(audioCtx: AudioContext, duration: number, decay: number): AudioBuffer {
|
||||
const length = Math.floor(audioCtx.sampleRate * duration);
|
||||
const impulse = audioCtx.createBuffer(2, length, audioCtx.sampleRate);
|
||||
|
||||
@@ -25,6 +25,7 @@ type EmitSpatialConfig = {
|
||||
|
||||
const ITEM_EMIT_BASE_GAIN = 0.3;
|
||||
|
||||
/** Maps a 0-100 speed control to playback-rate range used by emitted audio. */
|
||||
function resolveEmitPlaybackRate(raw: unknown): number {
|
||||
const speed = Number(raw);
|
||||
const clamped = Number.isFinite(speed) ? Math.max(0, Math.min(100, speed)) : 50;
|
||||
@@ -34,6 +35,7 @@ function resolveEmitPlaybackRate(raw: unknown): number {
|
||||
return 1 + ((clamped - 50) / 50) * 1;
|
||||
}
|
||||
|
||||
/** Sets browser-specific preserve-pitch flags when changing element playback rate. */
|
||||
function setElementPreservesPitch(element: HTMLAudioElement, enabled: boolean): void {
|
||||
const target = element as HTMLAudioElement & {
|
||||
preservesPitch?: boolean;
|
||||
@@ -45,6 +47,7 @@ function setElementPreservesPitch(element: HTMLAudioElement, enabled: boolean):
|
||||
if ('webkitPreservesPitch' in target) target.webkitPreservesPitch = enabled;
|
||||
}
|
||||
|
||||
/** Resolves effective emit playback/pitch settings from item params with global fallbacks. */
|
||||
function resolveEmitRates(item: WorldItem): { playbackRate: number; preservePitch: boolean } {
|
||||
const globals = getItemTypeGlobalProperties(item.type);
|
||||
const speed = resolveEmitPlaybackRate(item.params.emitSoundSpeed ?? globals.emitSoundSpeed ?? 50);
|
||||
|
||||
@@ -50,6 +50,7 @@ export function normalizeRadioChannel(channel: unknown): RadioChannelMode {
|
||||
return (RADIO_CHANNEL_OPTIONS as readonly string[]).includes(normalized) ? normalized : 'stereo';
|
||||
}
|
||||
|
||||
/** Connects a shared radio media source according to channel mode. */
|
||||
function connectRadioChannelSource(
|
||||
audioCtx: AudioContext,
|
||||
sharedSource: MediaElementAudioSourceNode,
|
||||
@@ -109,6 +110,7 @@ function connectRadioChannelSource(
|
||||
};
|
||||
}
|
||||
|
||||
/** Returns whether a hostname belongs to Dropbox domains that need proxy support. */
|
||||
function isDropboxHost(hostname: string): boolean {
|
||||
const host = hostname.toLowerCase();
|
||||
return host.endsWith('dropbox.com') || host.endsWith('dropboxusercontent.com');
|
||||
@@ -138,6 +140,7 @@ export function getProxyUrlForStream(streamUrl: string): string {
|
||||
return proxy.toString();
|
||||
}
|
||||
|
||||
/** Appends a cache-buster query parameter to avoid stale stream buffers between sessions. */
|
||||
function freshStreamUrl(streamUrl: string): string {
|
||||
const playbackSource = shouldProxyStreamUrl(streamUrl) ? getProxyUrlForStream(streamUrl) : streamUrl;
|
||||
try {
|
||||
|
||||
@@ -80,17 +80,20 @@ export function normalizeDegrees(value: number): number {
|
||||
return wrapped < 0 ? wrapped + 360 : wrapped;
|
||||
}
|
||||
|
||||
/** Computes compass bearing from source to listener where 0 is north and 90 is east. */
|
||||
function bearingFromSourceToListener(dx: number, dy: number): number {
|
||||
// 0 degrees is north (+y), 90 is east (+x), matching screen-reader compass wording.
|
||||
const degrees = Math.atan2(dx, dy) * (180 / Math.PI);
|
||||
return normalizeDegrees(degrees);
|
||||
}
|
||||
|
||||
/** Returns shortest absolute angular difference in degrees on a circle. */
|
||||
function angularDifferenceDeg(a: number, b: number): number {
|
||||
const raw = Math.abs(normalizeDegrees(a) - normalizeDegrees(b));
|
||||
return raw > 180 ? 360 - raw : raw;
|
||||
}
|
||||
|
||||
/** Computes directional attenuation profile based on listener angle vs source facing. */
|
||||
function resolveDirectionalProfile(
|
||||
dx: number,
|
||||
dy: number,
|
||||
|
||||
Reference in New Issue
Block a user