Files
cinny/src/app/utils/callDenoise.ts
T
Lotus CIandClaude Opus 5.5 504899aa14
CI / Build & Quality Checks (push) Skipped
CI / Secret scan (gitleaks) (push) Skipped
CI / Playwright smoke (e2e) (push) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 2m5s
CI / Build & Quality Checks (pull_request) Successful in 3m1s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Playwright smoke (e2e) (pull_request) Successful in 17m2s
feat(calls): change noise suppression mid-call without rejoining
Changing Noise suppression (off / browser-native / ML), the ML model, the
gate or "stack browser NS" in Settings now applies to the call you're in.
useCallDenoise sends the fork's io.lotus.set_denoise whenever those
settings change; CallControl join-gates it like set_quality and re-sends
it after an EC reconnect (the remounted fork handler starts again from
the join URL). The "requires rejoining the call" note is replaced.

Bumps Element Call to 0.28.0-lotus.4, which adds io.lotus.set_denoise and
fixes mic re-captures silently keeping the old noiseSuppression (the mic
level meter's clone held the old track open), the meter following the
old device after a mic switch, and voiceIsolation staying on in off/ML
modes (element-call#66).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5
2026-10-30 21:19:56 -04:00

32 lines
1.0 KiB
TypeScript

import { DenoiseModelId, NoiseSuppressionMode } from '../state/settings';
/**
* Payload for the fork's `io.lotus.set_denoise` action, which switches noise
* suppression on the live mic mid-call (browser suppressor on/off and/or the
* ML model) instead of needing a rejoin.
*/
export type LotusDenoisePayload = {
mode: NoiseSuppressionMode;
model: DenoiseModelId;
nativeNS: boolean;
gate: boolean;
gateThreshold: number;
};
export type DenoiseSettings = {
callNoiseSuppression?: NoiseSuppressionMode;
callDenoiseModel?: DenoiseModelId;
callDenoiseNativeNS?: boolean;
callDenoiseGate?: boolean;
callDenoiseGateThreshold?: number;
};
/** Same defaults as the call URL built at join (useCallStart/createCallEmbed). */
export const buildDenoisePayload = (s: DenoiseSettings): LotusDenoisePayload => ({
mode: s.callNoiseSuppression ?? 'browser',
model: s.callDenoiseModel ?? 'rnnoise',
nativeNS: s.callDenoiseNativeNS ?? true,
gate: s.callDenoiseGate ?? false,
gateThreshold: s.callDenoiseGateThreshold ?? -45,
});