From 3302540af0b8a9e203776bd470802f37f43d1220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Guimar=C3=A3es=20Pinto?= Date: Tue, 21 Jul 2026 20:15:07 -0400 Subject: [PATCH 1/8] feat(recording): add microphone noise suppression --- electron/electron-env.d.ts | 2 + electron/ipc/register/settings.ts | 6 + .../recordly-native-cursor-monitor | Bin 95840 -> 96896 bytes .../recordly-screencapturekit-helper | Bin 210256 -> 191872 bytes .../bin/darwin-arm64/recordly-system-cursors | Bin 99752 -> 101144 bytes .../bin/darwin-arm64/recordly-window-list | Bin 116024 -> 116920 bytes .../darwin-x64/recordly-native-cursor-monitor | Bin 70568 -> 71624 bytes .../recordly-screencapturekit-helper | Bin 185688 -> 182368 bytes .../bin/darwin-x64/recordly-system-cursors | Bin 70360 -> 71752 bytes .../bin/darwin-x64/recordly-window-list | Bin 82424 -> 83328 bytes electron/preload.ts | 1 + package-lock.json | 18 ++ package.json | 2 + src/components/launch/LaunchWindow.tsx | 4 + src/components/launch/popovers/MicPopover.tsx | 83 +++++++- src/hooks/useScreenRecorder.ts | 75 ++++++- src/i18n/locales/en/launch.json | 7 + src/i18n/locales/es/launch.json | 7 + src/i18n/locales/fr/launch.json | 7 + src/i18n/locales/it/launch.json | 7 + src/i18n/locales/ko/launch.json | 7 + src/i18n/locales/nl/launch.json | 7 + src/i18n/locales/pt-BR/launch.json | 7 + src/i18n/locales/ru/launch.json | 9 +- src/i18n/locales/zh-CN/launch.json | 7 + src/i18n/locales/zh-TW/launch.json | 25 ++- src/lib/audio/noiseSuppressedStream.ts | 134 ++++++++++++ src/lib/audio/noiseSuppression.test.ts | 132 ++++++++++++ src/lib/audio/noiseSuppression.ts | 198 ++++++++++++++++++ 29 files changed, 721 insertions(+), 24 deletions(-) create mode 100644 src/lib/audio/noiseSuppressedStream.ts create mode 100644 src/lib/audio/noiseSuppression.test.ts create mode 100644 src/lib/audio/noiseSuppression.ts diff --git a/electron/electron-env.d.ts b/electron/electron-env.d.ts index 8a4eedd63..a3ba8ccfc 100644 --- a/electron/electron-env.d.ts +++ b/electron/electron-env.d.ts @@ -880,6 +880,7 @@ interface Window { success: boolean; microphoneEnabled: boolean; microphoneDeviceId?: string; + noiseSuppressionMode?: string; systemAudioEnabled: boolean; }>; getRecordingAudioLabConfig: () => Promise<{ @@ -889,6 +890,7 @@ interface Window { setRecordingPreferences: (prefs: { microphoneEnabled?: boolean; microphoneDeviceId?: string; + noiseSuppressionMode?: string; systemAudioEnabled?: boolean; }) => Promise<{ success: boolean; error?: string }>; /** Countdown timer before recording */ diff --git a/electron/ipc/register/settings.ts b/electron/ipc/register/settings.ts index e84f63171..af7a34eb0 100644 --- a/electron/ipc/register/settings.ts +++ b/electron/ipc/register/settings.ts @@ -153,6 +153,10 @@ export function registerSettingsHandlers() { typeof parsed.microphoneDeviceId === "string" ? parsed.microphoneDeviceId : undefined, + noiseSuppressionMode: + typeof parsed.noiseSuppressionMode === "string" + ? parsed.noiseSuppressionMode + : "rnnoise", systemAudioEnabled: parsed.systemAudioEnabled === true, }; } catch { @@ -160,6 +164,7 @@ export function registerSettingsHandlers() { success: true, microphoneEnabled: false, microphoneDeviceId: undefined, + noiseSuppressionMode: "rnnoise", systemAudioEnabled: false, }; } @@ -176,6 +181,7 @@ export function registerSettingsHandlers() { prefs: { microphoneEnabled?: boolean; microphoneDeviceId?: string; + noiseSuppressionMode?: string; systemAudioEnabled?: boolean; }, ) => { diff --git a/electron/native/bin/darwin-arm64/recordly-native-cursor-monitor b/electron/native/bin/darwin-arm64/recordly-native-cursor-monitor index e0e478f11b0d8ac0ed5bcfbcd5fc4ea5dfac4e55..a3faa6c481b48d997a0136b23c7ed30de795910f 100755 GIT binary patch literal 96896 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 diff --git a/electron/native/bin/darwin-arm64/recordly-screencapturekit-helper b/electron/native/bin/darwin-arm64/recordly-screencapturekit-helper index 259f188480ef90e9ef21bf72abafadea312173c0..a384bd4339788d166bc4b268eb0d19e4bfb03575 100755 GIT binary patch literal 191872 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 NcAFWQ2gaZy`X3X61hoJF diff --git a/electron/native/bin/darwin-arm64/recordly-system-cursors b/electron/native/bin/darwin-arm64/recordly-system-cursors index f4b41ab66a9b36dc70b94fdde830775384037364..641e2b51f5336c021f43a86973d0b602f8f671dd 100755 GIT binary patch delta 21050 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 delta 19701 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

aoD=1yUos@*mrGdI{@vt2kS=rp=ujg|fdx65p| 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 L$N4`i8q5A4BwP7G diff --git a/electron/native/bin/darwin-x64/recordly-native-cursor-monitor b/electron/native/bin/darwin-x64/recordly-native-cursor-monitor index d577b1a6fe148c5f17883a13c42d75441b112b2b..36c1c0fdf6254bf730dd11db32bc548c461129a2 100755 GIT binary patch literal 71624 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%0Dx|4ESO_*baOqBZY9TvVW^v!hogO=Jsp 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 O_LZ_xV#g;{+y4)GuK#QR literal 185688 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%0AxYri0Pcl|+%`o~x*DBY;?gEY4e3+nc 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

+wVgvH4 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 KjZRcG^!xvH0)@8# diff --git a/electron/native/bin/darwin-x64/recordly-system-cursors b/electron/native/bin/darwin-x64/recordly-system-cursors index 545613624b4254e34bceb3c2de9606dba61fad60..045792221da67112c03681a725d141f64273ad1e 100755 GIT binary patch delta 23298 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 delta 21916 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

~BIUfY3^T+~Mgs@>hB$UjOetW)$>tE=|{d((_ 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 Uy0@q*CuT1;sg_D!*nGbK1&wCq`v3p{ diff --git a/electron/preload.ts b/electron/preload.ts index e55d42cbd..f12d04835 100644 --- a/electron/preload.ts +++ b/electron/preload.ts @@ -971,6 +971,7 @@ contextBridge.exposeInMainWorld("electronAPI", { setRecordingPreferences: (prefs: { microphoneEnabled?: boolean; microphoneDeviceId?: string; + noiseSuppressionMode?: string; systemAudioEnabled?: boolean; }) => ipcRenderer.invoke("set-recording-preferences", prefs), getCountdownDelay: () => ipcRenderer.invoke("get-countdown-delay"), diff --git a/package-lock.json b/package-lock.json index 71432b2b1..b41ab200b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,8 @@ "hasInstallScript": true, "dependencies": { "@phosphor-icons/react": "^2.1.10", + "@sapphi-red/speex-preprocess-wasm": "^0.4.0", + "@shiguredo/rnnoise-wasm": "^2025.1.5", "capturekit": "^1.0.13", "electron-updater": "^6.8.3", "ffmpeg-static": "^5.3.0", @@ -3477,6 +3479,22 @@ "win32" ] }, + "node_modules/@sapphi-red/speex-preprocess-wasm": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@sapphi-red/speex-preprocess-wasm/-/speex-preprocess-wasm-0.4.0.tgz", + "integrity": "sha512-VAybOqfE1m/3q+3BzpDiHuP/F5O1q0r6BosAkb2FYrBbMTiP1kWs/grELZqcIeSYa1tF5uVQzHi0hQtZUYRJVQ==", + "license": "MIT" + }, + "node_modules/@shiguredo/rnnoise-wasm": { + "version": "2025.1.5", + "resolved": "https://registry.npmjs.org/@shiguredo/rnnoise-wasm/-/rnnoise-wasm-2025.1.5.tgz", + "integrity": "sha512-9YJxzzHftlW936E5z9aEKK2CrPfUgc3HgZ2keyQ5e2Pb5bx+6tykYQ2Gyudvxd7Sxmlnar7SemDMFfx0OuVuGA==", + "license": "Apache-2.0", + "engines": { + "node": ">=20", + "pnpm": ">=10" + } + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", diff --git a/package.json b/package.json index 6fd53cd35..6691b3a54 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,8 @@ }, "dependencies": { "@phosphor-icons/react": "^2.1.10", + "@sapphi-red/speex-preprocess-wasm": "^0.4.0", + "@shiguredo/rnnoise-wasm": "^2025.1.5", "capturekit": "^1.0.13", "electron-updater": "^6.8.3", "ffmpeg-static": "^5.3.0", diff --git a/src/components/launch/LaunchWindow.tsx b/src/components/launch/LaunchWindow.tsx index 09cca63ef..3872468a2 100644 --- a/src/components/launch/LaunchWindow.tsx +++ b/src/components/launch/LaunchWindow.tsx @@ -69,6 +69,8 @@ function LaunchWindowContent() { setMicrophoneEnabled, microphoneDeviceId, setMicrophoneDeviceId, + noiseSuppressionMode, + setNoiseSuppressionMode, systemAudioEnabled, setSystemAudioEnabled, webcamEnabled, @@ -262,6 +264,8 @@ function LaunchWindowContent() { devices={devices} microphoneDeviceId={microphoneDeviceId} selectedDeviceId={selectedDeviceId} + noiseSuppressionMode={noiseSuppressionMode} + onSelectNoiseSuppressionMode={setNoiseSuppressionMode} onSelectDevice={(deviceId) => { setMicrophoneEnabled(true); setSelectedDeviceId(deviceId); diff --git a/src/components/launch/popovers/MicPopover.tsx b/src/components/launch/popovers/MicPopover.tsx index 02247d662..9350421de 100644 --- a/src/components/launch/popovers/MicPopover.tsx +++ b/src/components/launch/popovers/MicPopover.tsx @@ -1,5 +1,12 @@ -import { MicrophoneSlashIcon, SpeakerHighIcon, SpeakerXIcon } from "@phosphor-icons/react"; +import { + CheckCircleIcon, + MicrophoneIcon, + MicrophoneSlashIcon, + SpeakerHighIcon, + SpeakerXIcon, +} from "@phosphor-icons/react"; import { useScopedT } from "@/contexts/I18nContext"; +import type { NoiseSuppressionMode } from "@/lib/audio/noiseSuppression"; import { DropdownItem, HudPopover, MicDeviceRow } from "./PopoverScaffold"; import { useLaunchPopoverCoordinator } from "./LaunchPopoverCoordinator"; import type { DeviceOption } from "./launchPopoverTypes"; @@ -19,6 +26,8 @@ export function MicPopover({ microphoneDeviceId, selectedDeviceId, onSelectDevice, + noiseSuppressionMode, + onSelectNoiseSuppressionMode, }: { trigger: ReactElement; disabled?: boolean; @@ -30,6 +39,8 @@ export function MicPopover({ microphoneDeviceId?: string; selectedDeviceId?: string; onSelectDevice: (deviceId: string) => void; + noiseSuppressionMode: NoiseSuppressionMode; + onSelectNoiseSuppressionMode: (mode: NoiseSuppressionMode) => void; }) { const t = useScopedT("launch"); const { isOpen, requestOpen, requestClose } = useLaunchPopoverCoordinator(); @@ -53,7 +64,9 @@ export function MicPopover({ >

: } + icon={ + systemAudioEnabled ? : + } selected={systemAudioEnabled} onClick={onToggleSystemAudio} > @@ -73,7 +86,9 @@ export function MicPopover({ )} {!microphoneEnabled && ( -
{t("recording.selectMicToEnable")}
+
+ {t("recording.selectMicToEnable")} +
)} {devices.map((device) => ( onSelectDevice(device.deviceId)} /> ))} {devices.length === 0 && ( -
{t("recording.noMicrophonesFound")}
+
+ {t("recording.noMicrophonesFound")} +
)} +
{t("recording.noiseSuppression")}
+ + + ); } + +function NoiseSuppressionOption({ + mode, + selectedMode, + label, + description, + onSelect, +}: { + mode: NoiseSuppressionMode; + selectedMode: NoiseSuppressionMode; + label: string; + description: string; + onSelect: (mode: NoiseSuppressionMode) => void; +}) { + const selected = mode === selectedMode; + return ( + + ); +} diff --git a/src/hooks/useScreenRecorder.ts b/src/hooks/useScreenRecorder.ts index c5cd70056..ecc4d2a29 100644 --- a/src/hooks/useScreenRecorder.ts +++ b/src/hooks/useScreenRecorder.ts @@ -1,6 +1,15 @@ import { fixWebmDuration } from "@fix-webm-duration/fix"; import { useCallback, useEffect, useRef, useState } from "react"; import { toast } from "sonner"; +import { + DEFAULT_NOISE_SUPPRESSION_MODE, + normalizeNoiseSuppressionMode, + type NoiseSuppressionMode, +} from "@/lib/audio/noiseSuppression"; +import { + createNoiseSuppressedMicrophoneStream, + type NoiseSuppressedMicrophoneStream, +} from "@/lib/audio/noiseSuppressedStream"; import { getEffectiveRecordingDurationMs } from "@/lib/mediaTiming"; import { getVideoExtensionForMimeType, @@ -141,6 +150,8 @@ type UseScreenRecorderReturn = { setMicrophoneEnabled: (enabled: boolean) => void; microphoneDeviceId: string | undefined; setMicrophoneDeviceId: (deviceId: string | undefined) => void; + noiseSuppressionMode: NoiseSuppressionMode; + setNoiseSuppressionMode: (mode: NoiseSuppressionMode) => void; systemAudioEnabled: boolean; setSystemAudioEnabled: (enabled: boolean) => void; webcamEnabled: boolean; @@ -213,10 +224,7 @@ export function resolveBrowserCaptureCursorPolicy({ export function shouldUseNativeWindowsCaptureForSource( source: Pick | null | undefined, ): boolean { - return ( - source?.id?.startsWith("screen:") === true || - source?.id?.startsWith("window:") === true - ); + return source?.id?.startsWith("screen:") === true || source?.id?.startsWith("window:") === true; } export function createProcessedMicrophoneConstraints( @@ -328,6 +336,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { const [isMacOS, setIsMacOS] = useState(false); const [microphoneEnabled, setMicrophoneEnabled] = useState(false); const [microphoneDeviceId, setMicrophoneDeviceId] = useState(undefined); + const [noiseSuppressionMode, setNoiseSuppressionModeState] = useState( + DEFAULT_NOISE_SUPPRESSION_MODE, + ); const [systemAudioEnabled, setSystemAudioEnabled] = useState(false); const [webcamEnabled, setWebcamEnabled] = useState(false); const [webcamDeviceId, setWebcamDeviceId] = useState(undefined); @@ -337,6 +348,7 @@ export function useScreenRecorder(): UseScreenRecorderReturn { const stream = useRef(null); const screenStream = useRef(null); const microphoneStream = useRef(null); + const noiseSuppressedMicrophoneStreams = useRef([]); const webcamStream = useRef(null); const mixingContext = useRef(null); const chunks = useRef([]); @@ -554,6 +566,11 @@ export function useScreenRecorder(): UseScreenRecorderReturn { }; const cleanupCapturedMedia = useCallback(() => { + for (const processedStream of noiseSuppressedMicrophoneStreams.current) { + processedStream.destroy(); + } + noiseSuppressedMicrophoneStreams.current = []; + if (stream.current) { stream.current.getTracks().forEach((track) => track.stop()); stream.current = null; @@ -598,6 +615,23 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, [resetMicFallbackTimingDiagnostics]); + const prepareMicrophoneStream = useCallback( + async (rawStream: MediaStream) => { + const processed = await createNoiseSuppressedMicrophoneStream({ + sourceStream: rawStream, + mode: noiseSuppressionMode, + onWarning: (message) => toast.warning(message, { duration: 7000 }), + }); + noiseSuppressedMicrophoneStreams.current.push(processed); + console.info("[NoiseSuppression] Selected microphone mode.", { + requestedMode: processed.requestedMode, + activeMode: processed.activeMode, + }); + return processed.stream; + }, + [noiseSuppressionMode], + ); + const appendMicFallbackChunk = useCallback( (event: BlobEvent) => { if (event.data.size <= 0) { @@ -1266,6 +1300,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { if (result.microphoneDeviceId) { setMicrophoneDeviceId(result.microphoneDeviceId); } + setNoiseSuppressionModeState( + normalizeNoiseSuppressionMode(result.noiseSuppressionMode), + ); setSystemAudioEnabled(result.systemAudioEnabled); } })(); @@ -1281,6 +1318,14 @@ export function useScreenRecorder(): UseScreenRecorderReturn { void window.electronAPI.setRecordingPreferences({ microphoneDeviceId: deviceId }); }, []); + const persistNoiseSuppressionMode = useCallback((mode: NoiseSuppressionMode) => { + const normalizedMode = normalizeNoiseSuppressionMode(mode); + setNoiseSuppressionModeState(normalizedMode); + void window.electronAPI.setRecordingPreferences({ + noiseSuppressionMode: normalizedMode, + }); + }, []); + const persistSystemAudioEnabled = useCallback((enabled: boolean) => { setSystemAudioEnabled(enabled); void window.electronAPI.setRecordingPreferences({ systemAudioEnabled: enabled }); @@ -1457,7 +1502,8 @@ export function useScreenRecorder(): UseScreenRecorderReturn { selectedSource, { capturesSystemAudio: systemAudioEnabled, - capturesMicrophone: microphoneEnabled, + capturesMicrophone: + microphoneEnabled && noiseSuppressionMode === "disabled", microphoneDeviceId, microphoneLabel: micLabel, }, @@ -1504,7 +1550,11 @@ export function useScreenRecorder(): UseScreenRecorderReturn { // When native mic capture is unavailable or explicitly bypassed, // record mic via browser getUserMedia as a sidecar file. - if (nativeResult.microphoneFallbackRequired && microphoneEnabled) { + if ( + (nativeResult.microphoneFallbackRequired || + noiseSuppressionMode !== "disabled") && + microphoneEnabled + ) { void logNativeCaptureDiagnostics("start-browser-microphone-fallback"); console.info("Using browser microphone processing for this recording."); try { @@ -1513,10 +1563,12 @@ export function useScreenRecorder(): UseScreenRecorderReturn { browserMicrophoneProfile.current, ); micFallbackRequestedConstraints.current = microphoneConstraints; - const micStream = + const rawMicStream = await navigator.mediaDevices.getUserMedia(microphoneConstraints); + microphoneStream.current = rawMicStream; + const micStream = await prepareMicrophoneStream(rawMicStream); micFallbackTrackSettings.current = - createMicrophoneTrackSettingsSnapshot(micStream); + createMicrophoneTrackSettingsSnapshot(rawMicStream); micFallbackAudioInputDevices.current = await createAudioInputDeviceSnapshot().catch(() => null); console.info( @@ -1695,12 +1747,15 @@ export function useScreenRecorder(): UseScreenRecorderReturn { if (microphoneEnabled) { try { - microphoneStream.current = await navigator.mediaDevices.getUserMedia( + const rawMicrophoneStream = await navigator.mediaDevices.getUserMedia( createProcessedMicrophoneConstraints( microphoneDeviceId, browserMicrophoneProfile.current, ), ); + microphoneStream.current = rawMicrophoneStream; + microphoneStream.current = + await prepareMicrophoneStream(rawMicrophoneStream); } catch (audioError) { console.warn("Failed to get microphone access:", audioError); alert( @@ -2116,6 +2171,8 @@ export function useScreenRecorder(): UseScreenRecorderReturn { setMicrophoneEnabled: persistMicrophoneEnabled, microphoneDeviceId, setMicrophoneDeviceId: persistMicrophoneDeviceId, + noiseSuppressionMode, + setNoiseSuppressionMode: persistNoiseSuppressionMode, systemAudioEnabled, setSystemAudioEnabled: persistSystemAudioEnabled, webcamEnabled, diff --git a/src/i18n/locales/en/launch.json b/src/i18n/locales/en/launch.json index 9dfcbe038..15ad3a205 100644 --- a/src/i18n/locales/en/launch.json +++ b/src/i18n/locales/en/launch.json @@ -28,6 +28,13 @@ "turnOffMicrophone": "Turn Off Microphone", "selectMicToEnable": "Select a microphone to enable", "noMicrophonesFound": "No microphones found", + "noiseSuppression": "Noise suppression", + "noiseSuppressionRnnoise": "RNNoise - Better quality", + "noiseSuppressionRnnoiseDescription": "Better background-noise removal, higher CPU usage.", + "noiseSuppressionSpeex": "Speex - Lower CPU usage", + "noiseSuppressionSpeexDescription": "Lower CPU usage, but reduced voice quality.", + "noiseSuppressionDisabled": "Disabled", + "noiseSuppressionDisabledDescription": "Records the original microphone audio.", "webcam": "Webcam", "turnOffWebcam": "Turn Off Webcam", "hideFloatingWebcamPreview": "Hide Floating Preview", diff --git a/src/i18n/locales/es/launch.json b/src/i18n/locales/es/launch.json index a458844a2..fbff489bd 100644 --- a/src/i18n/locales/es/launch.json +++ b/src/i18n/locales/es/launch.json @@ -28,6 +28,13 @@ "turnOffMicrophone": "Desactivar micrófono", "selectMicToEnable": "Selecciona un micrófono para activar", "noMicrophonesFound": "No se encontraron micrófonos", + "noiseSuppression": "Supresión de ruido", + "noiseSuppressionRnnoise": "RNNoise - Mejor calidad", + "noiseSuppressionRnnoiseDescription": "Mejor eliminación del ruido de fondo, mayor uso de CPU.", + "noiseSuppressionSpeex": "Speex - Menor uso de CPU", + "noiseSuppressionSpeexDescription": "Menor uso de CPU, pero calidad de voz reducida.", + "noiseSuppressionDisabled": "Desactivado", + "noiseSuppressionDisabledDescription": "Graba el audio original del micrófono.", "webcam": "Cámara", "turnOffWebcam": "Desactivar cámara", "hideFloatingWebcamPreview": "Ocultar vista flotante", diff --git a/src/i18n/locales/fr/launch.json b/src/i18n/locales/fr/launch.json index df2e43b2b..70757a8eb 100644 --- a/src/i18n/locales/fr/launch.json +++ b/src/i18n/locales/fr/launch.json @@ -28,6 +28,13 @@ "turnOffMicrophone": "Désactiver le microphone", "selectMicToEnable": "Sélectionnez un microphone à activer", "noMicrophonesFound": "Aucun microphone trouvé", + "noiseSuppression": "Réduction du bruit", + "noiseSuppressionRnnoise": "RNNoise - Meilleure qualité", + "noiseSuppressionRnnoiseDescription": "Meilleure suppression du bruit de fond, utilisation du processeur plus élevée.", + "noiseSuppressionSpeex": "Speex - Utilisation du processeur réduite", + "noiseSuppressionSpeexDescription": "Utilisation du processeur réduite, mais qualité vocale moindre.", + "noiseSuppressionDisabled": "Désactivé", + "noiseSuppressionDisabledDescription": "Enregistre l’audio original du microphone.", "webcam": "Webcam", "turnOffWebcam": "Désactiver la webcam", "hideFloatingWebcamPreview": "Masquer l’aperçu flottant", diff --git a/src/i18n/locales/it/launch.json b/src/i18n/locales/it/launch.json index c27abc3ad..bc62837aa 100644 --- a/src/i18n/locales/it/launch.json +++ b/src/i18n/locales/it/launch.json @@ -28,6 +28,13 @@ "turnOffMicrophone": "Spegni microfono", "selectMicToEnable": "Seleziona un microfono da abilitare", "noMicrophonesFound": "Nessun microfono trovato", + "noiseSuppression": "Riduzione del rumore", + "noiseSuppressionRnnoise": "RNNoise - Qualità migliore", + "noiseSuppressionRnnoiseDescription": "Rimozione migliore del rumore di fondo, maggiore uso della CPU.", + "noiseSuppressionSpeex": "Speex - Minore uso della CPU", + "noiseSuppressionSpeexDescription": "Minore uso della CPU, ma qualità vocale ridotta.", + "noiseSuppressionDisabled": "Disabilitata", + "noiseSuppressionDisabledDescription": "Registra l'audio originale del microfono.", "webcam": "Webcam", "turnOffWebcam": "Spegni webcam", "hideFloatingWebcamPreview": "Nascondi anteprima fluttuante", diff --git a/src/i18n/locales/ko/launch.json b/src/i18n/locales/ko/launch.json index 345000399..57d06d9c2 100644 --- a/src/i18n/locales/ko/launch.json +++ b/src/i18n/locales/ko/launch.json @@ -28,6 +28,13 @@ "turnOffMicrophone": "마이크 끄기", "selectMicToEnable": "사용할 마이크를 선택하세요", "noMicrophonesFound": "마이크를 찾을 수 없습니다", + "noiseSuppression": "소음 억제", + "noiseSuppressionRnnoise": "RNNoise - 더 높은 품질", + "noiseSuppressionRnnoiseDescription": "배경 소음을 더 잘 제거하지만 CPU 사용량이 높습니다.", + "noiseSuppressionSpeex": "Speex - 더 낮은 CPU 사용량", + "noiseSuppressionSpeexDescription": "CPU 사용량은 낮지만 음성 품질이 떨어질 수 있습니다.", + "noiseSuppressionDisabled": "비활성화", + "noiseSuppressionDisabledDescription": "원본 마이크 오디오를 녹음합니다.", "webcam": "웹캠", "turnOffWebcam": "웹캠 끄기", "hideFloatingWebcamPreview": "플로팅 미리보기 숨기기", diff --git a/src/i18n/locales/nl/launch.json b/src/i18n/locales/nl/launch.json index d3d5870c9..3e987598c 100644 --- a/src/i18n/locales/nl/launch.json +++ b/src/i18n/locales/nl/launch.json @@ -28,6 +28,13 @@ "turnOffMicrophone": "Microfoon uitschakelen", "selectMicToEnable": "Selecteer een microfoon om in te schakelen", "noMicrophonesFound": "Geen microfoons gevonden", + "noiseSuppression": "Ruisonderdrukking", + "noiseSuppressionRnnoise": "RNNoise - Betere kwaliteit", + "noiseSuppressionRnnoiseDescription": "Betere verwijdering van achtergrondruis, hoger CPU-gebruik.", + "noiseSuppressionSpeex": "Speex - Lager CPU-gebruik", + "noiseSuppressionSpeexDescription": "Lager CPU-gebruik, maar lagere stemkwaliteit.", + "noiseSuppressionDisabled": "Uitgeschakeld", + "noiseSuppressionDisabledDescription": "Neemt de originele microfoonaudio op.", "webcam": "Webcam", "turnOffWebcam": "Webcam uitschakelen", "hideFloatingWebcamPreview": "Zwevende voorbeeldweergave verbergen", diff --git a/src/i18n/locales/pt-BR/launch.json b/src/i18n/locales/pt-BR/launch.json index 8d19ac7db..8e789cf51 100644 --- a/src/i18n/locales/pt-BR/launch.json +++ b/src/i18n/locales/pt-BR/launch.json @@ -28,6 +28,13 @@ "turnOffMicrophone": "Desligar microfone", "selectMicToEnable": "Selecione um microfone para ativar", "noMicrophonesFound": "Nenhum microfone encontrado", + "noiseSuppression": "Supressão de ruído", + "noiseSuppressionRnnoise": "RNNoise - Melhor qualidade", + "noiseSuppressionRnnoiseDescription": "Melhor remoção de ruído de fundo, maior uso de CPU.", + "noiseSuppressionSpeex": "Speex - Menor uso de CPU", + "noiseSuppressionSpeexDescription": "Menor uso de CPU, mas qualidade de voz reduzida.", + "noiseSuppressionDisabled": "Desativado", + "noiseSuppressionDisabledDescription": "Grava o áudio original do microfone.", "webcam": "Webcam", "turnOffWebcam": "Desligar webcam", "hideFloatingWebcamPreview": "Ocultar prévia flutuante", diff --git a/src/i18n/locales/ru/launch.json b/src/i18n/locales/ru/launch.json index 65bd57b8c..25e2e9648 100644 --- a/src/i18n/locales/ru/launch.json +++ b/src/i18n/locales/ru/launch.json @@ -28,6 +28,13 @@ "turnOffMicrophone": "Выключить микрофон", "selectMicToEnable": "Выберите микрофон для записи звука", "noMicrophonesFound": "Нет доступных микрофонов", + "noiseSuppression": "Шумоподавление", + "noiseSuppressionRnnoise": "RNNoise - Лучшее качество", + "noiseSuppressionRnnoiseDescription": "Лучше удаляет фоновый шум, но сильнее нагружает процессор.", + "noiseSuppressionSpeex": "Speex - Меньше нагрузка на процессор", + "noiseSuppressionSpeexDescription": "Меньше нагрузка на процессор, но ниже качество голоса.", + "noiseSuppressionDisabled": "Отключено", + "noiseSuppressionDisabledDescription": "Записывает исходный звук с микрофона.", "webcam": "Веб-камера", "turnOffWebcam": "Выключить веб-камеру", "hideFloatingWebcamPreview": "Скрыть предпросмотр", @@ -77,4 +84,4 @@ "failedToStart": "Не удалось начать запись: {{error}}", "failedToStartGeneric": "Не удалось начать запись" } -} \ No newline at end of file +} diff --git a/src/i18n/locales/zh-CN/launch.json b/src/i18n/locales/zh-CN/launch.json index 164c02afe..c7e202858 100644 --- a/src/i18n/locales/zh-CN/launch.json +++ b/src/i18n/locales/zh-CN/launch.json @@ -28,6 +28,13 @@ "turnOffMicrophone": "关闭麦克风", "selectMicToEnable": "选择一个麦克风以启用", "noMicrophonesFound": "未找到麦克风", + "noiseSuppression": "噪声抑制", + "noiseSuppressionRnnoise": "RNNoise - 更高质量", + "noiseSuppressionRnnoiseDescription": "更好地去除背景噪声,但 CPU 使用率更高。", + "noiseSuppressionSpeex": "Speex - 更低 CPU 使用率", + "noiseSuppressionSpeexDescription": "CPU 使用率更低,但语音质量会降低。", + "noiseSuppressionDisabled": "已禁用", + "noiseSuppressionDisabledDescription": "录制原始麦克风音频。", "webcam": "摄像头", "turnOffWebcam": "关闭摄像头", "hideFloatingWebcamPreview": "隐藏悬浮预览", diff --git a/src/i18n/locales/zh-TW/launch.json b/src/i18n/locales/zh-TW/launch.json index 12ec494d0..1a43b2019 100644 --- a/src/i18n/locales/zh-TW/launch.json +++ b/src/i18n/locales/zh-TW/launch.json @@ -28,6 +28,13 @@ "turnOffMicrophone": "關閉麥克風", "selectMicToEnable": "選擇要啟用的麥克風", "noMicrophonesFound": "找不到麥克風", + "noiseSuppression": "噪音抑制", + "noiseSuppressionRnnoise": "RNNoise - 較佳品質", + "noiseSuppressionRnnoiseDescription": "更有效移除背景噪音,但 CPU 使用率較高。", + "noiseSuppressionSpeex": "Speex - 較低 CPU 使用率", + "noiseSuppressionSpeexDescription": "CPU 使用率較低,但語音品質會下降。", + "noiseSuppressionDisabled": "已停用", + "noiseSuppressionDisabledDescription": "錄製原始麥克風音訊。", "webcam": "網路攝影機", "turnOffWebcam": "關閉網路攝影機", "hideFloatingWebcamPreview": "隱藏浮動預覽", @@ -44,15 +51,15 @@ "cancel": "取消", "more": "更多", "update": { - "update": "更新", - "updated": "已更新", - "idleTitle": "檢查更新。", - "checkingTitle": "正在檢查更新...", - "downloadingTitle": "正在下載更新...", - "errorTitle": "檢查更新失敗,點一下重試。", - "upToDateTitle": "Recordly {{version}} 已是最新版本。", - "availableTitle": "Recordly {{version}} 已推出新版本。", - "availableGenericTitle": "有可用更新。" + "update": "更新", + "updated": "已更新", + "idleTitle": "檢查更新。", + "checkingTitle": "正在檢查更新...", + "downloadingTitle": "正在下載更新...", + "errorTitle": "檢查更新失敗,點一下重試。", + "upToDateTitle": "Recordly {{version}} 已是最新版本。", + "availableTitle": "Recordly {{version}} 已推出新版本。", + "availableGenericTitle": "有可用更新。" } }, "sourceSelector": { diff --git a/src/lib/audio/noiseSuppressedStream.ts b/src/lib/audio/noiseSuppressedStream.ts new file mode 100644 index 000000000..77f9c447c --- /dev/null +++ b/src/lib/audio/noiseSuppressedStream.ts @@ -0,0 +1,134 @@ +import { + createNoiseSuppressorWithFallback, + normalizeNoiseSuppressionMode, + type NoiseSuppressionMode, + type NoiseSuppressionSelection, +} from "./noiseSuppression"; + +const PROCESSOR_BUFFER_SIZE = 1024; +const DEFAULT_SAMPLE_RATE = 48000; +const FRAME_BUDGET_MS = 12; +const LONG_FRAME_LOG_INTERVAL_MS = 5000; + +export type NoiseSuppressedMicrophoneStream = { + stream: MediaStream; + activeMode: NoiseSuppressionMode; + requestedMode: NoiseSuppressionMode; + warnings: string[]; + destroy(): void; +}; + +export async function createNoiseSuppressedMicrophoneStream({ + sourceStream, + mode, + onWarning, +}: { + sourceStream: MediaStream; + mode: NoiseSuppressionMode; + onWarning?: (message: string) => void; +}): Promise { + const requestedMode = normalizeNoiseSuppressionMode(mode); + if (requestedMode === "disabled") { + console.info("[NoiseSuppression] Microphone stream passthrough selected."); + return { + stream: sourceStream, + activeMode: "disabled", + requestedMode, + warnings: [], + destroy: () => { + sourceStream.getTracks().forEach((track) => track.stop()); + console.info("[NoiseSuppression] Passthrough stream cleanup complete."); + }, + }; + } + + const context = new AudioContext({ sampleRate: DEFAULT_SAMPLE_RATE }); + const source = context.createMediaStreamSource(sourceStream); + const destination = context.createMediaStreamDestination(); + const processor = context.createScriptProcessor(PROCESSOR_BUFFER_SIZE, 1, 1); + const sampleRate = context.sampleRate || DEFAULT_SAMPLE_RATE; + const selection = await createNoiseSuppressorWithFallback({ + mode: requestedMode, + frameSize: PROCESSOR_BUFFER_SIZE, + sampleRate, + }); + + reportWarnings(selection, onWarning); + + let droppedFrames = 0; + let lastLongFrameLogAt = 0; + const scratchFrame = new Float32Array(PROCESSOR_BUFFER_SIZE); + processor.onaudioprocess = (event) => { + const input = event.inputBuffer.getChannelData(0); + const output = event.outputBuffer.getChannelData(0); + const startedAt = performance.now(); + try { + scratchFrame.set(input); + output.set(selection.suppressor.processAudioFrame(scratchFrame)); + } catch (error) { + droppedFrames += 1; + output.set(input); + console.warn("[NoiseSuppression] Processing error; passed through frame.", { + activeMode: selection.activeMode, + droppedFrames, + error: error instanceof Error ? error.message : String(error), + }); + } + + const elapsedMs = performance.now() - startedAt; + const now = performance.now(); + if (elapsedMs > FRAME_BUDGET_MS && now - lastLongFrameLogAt > LONG_FRAME_LOG_INTERVAL_MS) { + lastLongFrameLogAt = now; + console.warn("[NoiseSuppression] Processing exceeded real-time budget.", { + activeMode: selection.activeMode, + elapsedMs: Number(elapsedMs.toFixed(2)), + frameSize: PROCESSOR_BUFFER_SIZE, + sampleRate, + }); + } + }; + + source.connect(processor); + processor.connect(destination); + console.info("[NoiseSuppression] Microphone stream processing active.", { + requestedMode, + activeMode: selection.activeMode, + frameSize: PROCESSOR_BUFFER_SIZE, + sampleRate, + }); + + return { + stream: destination.stream, + activeMode: selection.activeMode, + requestedMode, + warnings: selection.warnings, + destroy: () => { + processor.disconnect(); + source.disconnect(); + sourceStream.getTracks().forEach((track) => track.stop()); + destination.stream.getTracks().forEach((track) => track.stop()); + selection.suppressor.destroy(); + context.close().catch(() => undefined); + console.info("[NoiseSuppression] Microphone stream cleanup complete.", { + requestedMode, + activeMode: selection.activeMode, + droppedFrames, + }); + }, + }; +} + +function reportWarnings( + selection: NoiseSuppressionSelection, + onWarning?: (message: string) => void, +) { + if (selection.warnings.length === 0) { + return; + } + + const message = + selection.activeMode === "disabled" + ? "Noise suppression is unavailable on this device. Recording will continue without it." + : `Noise suppression fell back to ${selection.activeMode.toUpperCase()}.`; + onWarning?.(message); +} diff --git a/src/lib/audio/noiseSuppression.test.ts b/src/lib/audio/noiseSuppression.test.ts new file mode 100644 index 000000000..b5c639cac --- /dev/null +++ b/src/lib/audio/noiseSuppression.test.ts @@ -0,0 +1,132 @@ +import { describe, expect, it, vi } from "vitest"; +import { + createNoiseSuppressorWithFallback, + DEFAULT_NOISE_SUPPRESSION_MODE, + normalizeNoiseSuppressionMode, + type NoiseSuppressor, +} from "./noiseSuppression"; + +function createMockSuppressor({ + initialize = vi.fn().mockResolvedValue(undefined), + processAudioFrame = vi.fn((frame: Float32Array) => frame), + destroy = vi.fn(), +}: Partial = {}): NoiseSuppressor { + return { + initialize, + processAudioFrame, + destroy, + }; +} + +describe("normalizeNoiseSuppressionMode", () => { + it("defaults new and invalid values to RNNoise", () => { + expect(normalizeNoiseSuppressionMode()).toBe(DEFAULT_NOISE_SUPPRESSION_MODE); + expect(normalizeNoiseSuppressionMode("unknown")).toBe(DEFAULT_NOISE_SUPPRESSION_MODE); + }); + + it("normalizes supported persisted modes", () => { + expect(normalizeNoiseSuppressionMode(" RNNOISE ")).toBe("rnnoise"); + expect(normalizeNoiseSuppressionMode("speex")).toBe("speex"); + expect(normalizeNoiseSuppressionMode("disabled")).toBe("disabled"); + }); +}); + +describe("createNoiseSuppressorWithFallback", () => { + it("initializes RNNoise when requested", async () => { + const rnnoise = createMockSuppressor(); + const selection = await createNoiseSuppressorWithFallback({ + mode: "rnnoise", + frameSize: 1024, + sampleRate: 48000, + deps: { + createRnnoise: () => rnnoise, + }, + }); + + expect(selection.activeMode).toBe("rnnoise"); + expect(rnnoise.initialize).toHaveBeenCalledTimes(1); + }); + + it("initializes Speex when requested", async () => { + const speex = createMockSuppressor(); + const selection = await createNoiseSuppressorWithFallback({ + mode: "speex", + frameSize: 1024, + sampleRate: 48000, + deps: { + createSpeex: () => speex, + }, + }); + + expect(selection.activeMode).toBe("speex"); + expect(speex.initialize).toHaveBeenCalledTimes(1); + }); + + it("falls back from RNNoise to Speex", async () => { + const rnnoise = createMockSuppressor({ + initialize: vi.fn().mockRejectedValue(new Error("wasm unavailable")), + }); + const speex = createMockSuppressor(); + + const selection = await createNoiseSuppressorWithFallback({ + mode: "rnnoise", + frameSize: 1024, + sampleRate: 48000, + deps: { + createRnnoise: () => rnnoise, + createSpeex: () => speex, + }, + }); + + expect(selection.activeMode).toBe("speex"); + expect(selection.warnings).toHaveLength(1); + expect(rnnoise.destroy).toHaveBeenCalledTimes(1); + expect(speex.initialize).toHaveBeenCalledTimes(1); + }); + + it("falls back to disabled when both algorithms fail", async () => { + const disabled = createMockSuppressor(); + + const selection = await createNoiseSuppressorWithFallback({ + mode: "rnnoise", + frameSize: 1024, + sampleRate: 48000, + deps: { + createRnnoise: () => + createMockSuppressor({ + initialize: vi.fn().mockRejectedValue(new Error("rnnoise failed")), + }), + createSpeex: () => + createMockSuppressor({ + initialize: vi.fn().mockRejectedValue(new Error("speex failed")), + }), + createDisabled: () => disabled, + }, + }); + + expect(selection.activeMode).toBe("disabled"); + expect(selection.warnings).toHaveLength(2); + expect(disabled.initialize).toHaveBeenCalledTimes(1); + }); + + it("processes frames through the active suppressor and cleans up", async () => { + const frame = new Float32Array([0.1, -0.1]); + const processed = new Float32Array([0.05, -0.05]); + const speex = createMockSuppressor({ + processAudioFrame: vi.fn(() => processed), + }); + + const selection = await createNoiseSuppressorWithFallback({ + mode: "speex", + frameSize: 2, + sampleRate: 48000, + deps: { + createSpeex: () => speex, + }, + }); + + expect(selection.suppressor.processAudioFrame(frame)).toBe(processed); + selection.suppressor.destroy(); + expect(speex.destroy).toHaveBeenCalledTimes(1); + }); +}); diff --git a/src/lib/audio/noiseSuppression.ts b/src/lib/audio/noiseSuppression.ts new file mode 100644 index 000000000..b98757d00 --- /dev/null +++ b/src/lib/audio/noiseSuppression.ts @@ -0,0 +1,198 @@ +import { Rnnoise } from "@shiguredo/rnnoise-wasm"; +import { loadSpeexModule, SpeexPreprocessor } from "@sapphi-red/speex-preprocess-wasm"; + +export type NoiseSuppressionMode = "rnnoise" | "speex" | "disabled"; + +export interface NoiseSuppressor { + initialize(): Promise; + processAudioFrame(frame: Float32Array): Float32Array; + destroy(): void; +} + +export type NoiseSuppressionSelection = { + requestedMode: NoiseSuppressionMode; + activeMode: NoiseSuppressionMode; + suppressor: NoiseSuppressor; + warnings: string[]; +}; + +export const DEFAULT_NOISE_SUPPRESSION_MODE: NoiseSuppressionMode = "rnnoise"; +export const NOISE_SUPPRESSION_MODES = new Set([ + "rnnoise", + "speex", + "disabled", +]); + +export function normalizeNoiseSuppressionMode(value?: string | null): NoiseSuppressionMode { + const normalized = value?.trim().toLowerCase(); + return normalized && NOISE_SUPPRESSION_MODES.has(normalized as NoiseSuppressionMode) + ? (normalized as NoiseSuppressionMode) + : DEFAULT_NOISE_SUPPRESSION_MODE; +} + +export class DisabledNoiseSuppressor implements NoiseSuppressor { + async initialize() { + console.info("[NoiseSuppression] Disabled."); + } + + processAudioFrame(frame: Float32Array) { + return frame; + } + + destroy() { + console.info("[NoiseSuppression] Disabled cleanup complete."); + } +} + +export class RnnoiseNoiseSuppressor implements NoiseSuppressor { + private rnnoise: Awaited> | null = null; + private state: ReturnType< + Awaited>["createDenoiseState"] + > | null = null; + + async initialize() { + console.info("[NoiseSuppression] Initializing RNNoise."); + this.rnnoise = await Rnnoise.load(); + this.state = this.rnnoise.createDenoiseState(); + console.info("[NoiseSuppression] RNNoise initialized.", { + frameSize: this.rnnoise.frameSize, + }); + } + + processAudioFrame(frame: Float32Array) { + if (!this.rnnoise || !this.state) { + throw new Error("RNNoise suppressor has not been initialized."); + } + + const frameSize = this.rnnoise.frameSize; + if (frame.length === frameSize) { + this.state.processFrame(frame); + return frame; + } + + if (frame.length < frameSize) { + return frame; + } + + for (let offset = 0; offset + frameSize <= frame.length; offset += frameSize) { + this.state.processFrame(frame.subarray(offset, offset + frameSize)); + } + return frame; + } + + destroy() { + this.state?.destroy(); + this.state = null; + this.rnnoise = null; + console.info("[NoiseSuppression] RNNoise cleanup complete."); + } +} + +export class SpeexNoiseSuppressor implements NoiseSuppressor { + private preprocessor: SpeexPreprocessor | null = null; + + constructor( + private readonly frameSize: number, + private readonly sampleRate: number, + ) {} + + async initialize() { + console.info("[NoiseSuppression] Initializing Speex.", { + frameSize: this.frameSize, + sampleRate: this.sampleRate, + }); + const module = await loadSpeexModule(); + this.preprocessor = new SpeexPreprocessor(module, this.frameSize, this.sampleRate); + this.preprocessor.denoise = true; + this.preprocessor.noiseSuppress = -24; + this.preprocessor.agc = false; + this.preprocessor.vad = false; + console.info("[NoiseSuppression] Speex initialized."); + } + + processAudioFrame(frame: Float32Array) { + if (!this.preprocessor) { + throw new Error("Speex suppressor has not been initialized."); + } + + if (frame.length === this.frameSize) { + this.preprocessor.process(frame); + return frame; + } + + for (let offset = 0; offset + this.frameSize <= frame.length; offset += this.frameSize) { + this.preprocessor.process(frame.subarray(offset, offset + this.frameSize)); + } + return frame; + } + + destroy() { + this.preprocessor?.destroy(); + this.preprocessor = null; + console.info("[NoiseSuppression] Speex cleanup complete."); + } +} + +export type NoiseSuppressorFactoryDeps = { + createRnnoise?: () => NoiseSuppressor; + createSpeex?: () => NoiseSuppressor; + createDisabled?: () => NoiseSuppressor; +}; + +export async function createNoiseSuppressorWithFallback({ + mode, + frameSize, + sampleRate, + deps = {}, +}: { + mode: NoiseSuppressionMode; + frameSize: number; + sampleRate: number; + deps?: NoiseSuppressorFactoryDeps; +}): Promise { + const warnings: string[] = []; + const createDisabled = deps.createDisabled ?? (() => new DisabledNoiseSuppressor()); + const candidates: NoiseSuppressionMode[] = + mode === "disabled" ? ["disabled"] : mode === "rnnoise" ? ["rnnoise", "speex"] : ["speex"]; + + for (const candidate of candidates) { + const suppressor = + candidate === "rnnoise" + ? (deps.createRnnoise?.() ?? new RnnoiseNoiseSuppressor()) + : candidate === "speex" + ? (deps.createSpeex?.() ?? new SpeexNoiseSuppressor(frameSize, sampleRate)) + : createDisabled(); + try { + await suppressor.initialize(); + if (candidate !== mode) { + console.warn("[NoiseSuppression] Falling back.", { + requestedMode: mode, + activeMode: candidate, + }); + } + return { + requestedMode: mode, + activeMode: candidate, + suppressor, + warnings, + }; + } catch (error) { + suppressor.destroy(); + const warning = `Failed to initialize ${candidate}: ${ + error instanceof Error ? error.message : String(error) + }`; + warnings.push(warning); + console.warn("[NoiseSuppression]", warning); + } + } + + const suppressor = createDisabled(); + await suppressor.initialize(); + console.warn("[NoiseSuppression] All algorithms failed; recording without noise suppression."); + return { + requestedMode: mode, + activeMode: "disabled", + suppressor, + warnings, + }; +} From 81f6add35503f09430e7f6140f57a15ecbaa439d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Guimar=C3=A3es=20Pinto?= Date: Tue, 21 Jul 2026 21:43:14 -0400 Subject: [PATCH 2/8] Stop raw mic stream on processing failure --- src/hooks/useScreenRecorder.ts | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/hooks/useScreenRecorder.ts b/src/hooks/useScreenRecorder.ts index ecc4d2a29..c1cd9bc80 100644 --- a/src/hooks/useScreenRecorder.ts +++ b/src/hooks/useScreenRecorder.ts @@ -617,17 +617,22 @@ export function useScreenRecorder(): UseScreenRecorderReturn { const prepareMicrophoneStream = useCallback( async (rawStream: MediaStream) => { - const processed = await createNoiseSuppressedMicrophoneStream({ - sourceStream: rawStream, - mode: noiseSuppressionMode, - onWarning: (message) => toast.warning(message, { duration: 7000 }), - }); - noiseSuppressedMicrophoneStreams.current.push(processed); - console.info("[NoiseSuppression] Selected microphone mode.", { - requestedMode: processed.requestedMode, - activeMode: processed.activeMode, - }); - return processed.stream; + try { + const processed = await createNoiseSuppressedMicrophoneStream({ + sourceStream: rawStream, + mode: noiseSuppressionMode, + onWarning: (message) => toast.warning(message, { duration: 7000 }), + }); + noiseSuppressedMicrophoneStreams.current.push(processed); + console.info("[NoiseSuppression] Selected microphone mode.", { + requestedMode: processed.requestedMode, + activeMode: processed.activeMode, + }); + return processed.stream; + } catch (error) { + rawStream.getTracks().forEach((track) => track.stop()); + throw error; + } }, [noiseSuppressionMode], ); From 1f4b26c8f93784da9b9ced1130f2e11c95a89842 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Guimar=C3=A3es=20Pinto?= Date: Tue, 21 Jul 2026 21:47:31 -0400 Subject: [PATCH 3/8] feat(audio): localize noise suppression warnings --- src/hooks/useScreenRecorder.ts | 13 ++++++++++-- src/i18n/locales/en/launch.json | 2 ++ src/i18n/locales/es/launch.json | 2 ++ src/i18n/locales/fr/launch.json | 2 ++ src/i18n/locales/it/launch.json | 2 ++ src/i18n/locales/ko/launch.json | 2 ++ src/i18n/locales/nl/launch.json | 2 ++ src/i18n/locales/pt-BR/launch.json | 2 ++ src/i18n/locales/ru/launch.json | 2 ++ src/i18n/locales/zh-CN/launch.json | 2 ++ src/i18n/locales/zh-TW/launch.json | 2 ++ src/lib/audio/noiseSuppressedStream.ts | 29 +++++++++++++++++++------- 12 files changed, 52 insertions(+), 10 deletions(-) diff --git a/src/hooks/useScreenRecorder.ts b/src/hooks/useScreenRecorder.ts index c1cd9bc80..d92e3ab82 100644 --- a/src/hooks/useScreenRecorder.ts +++ b/src/hooks/useScreenRecorder.ts @@ -1,6 +1,7 @@ import { fixWebmDuration } from "@fix-webm-duration/fix"; import { useCallback, useEffect, useRef, useState } from "react"; import { toast } from "sonner"; +import { useI18n } from "@/contexts/I18nContext"; import { DEFAULT_NOISE_SUPPRESSION_MODE, normalizeNoiseSuppressionMode, @@ -328,6 +329,7 @@ async function createAudioInputDeviceSnapshot(): Promise< } export function useScreenRecorder(): UseScreenRecorderReturn { + const { t } = useI18n(); const [recording, setRecording] = useState(false); const [paused, setPaused] = useState(false); const [starting, setStarting] = useState(false); @@ -621,7 +623,14 @@ export function useScreenRecorder(): UseScreenRecorderReturn { const processed = await createNoiseSuppressedMicrophoneStream({ sourceStream: rawStream, mode: noiseSuppressionMode, - onWarning: (message) => toast.warning(message, { duration: 7000 }), + onWarning: (warning) => { + const fallback = + warning.key === "recording.noiseSuppressionUnavailableWarning" + ? "Noise suppression is unavailable on this device. Recording will continue without it." + : "Noise suppression fell back to {{mode}}."; + const params = "params" in warning ? warning.params : undefined; + toast.warning(t(warning.key, fallback, params), { duration: 7000 }); + }, }); noiseSuppressedMicrophoneStreams.current.push(processed); console.info("[NoiseSuppression] Selected microphone mode.", { @@ -634,7 +643,7 @@ export function useScreenRecorder(): UseScreenRecorderReturn { throw error; } }, - [noiseSuppressionMode], + [noiseSuppressionMode, t], ); const appendMicFallbackChunk = useCallback( diff --git a/src/i18n/locales/en/launch.json b/src/i18n/locales/en/launch.json index 15ad3a205..633a50eb2 100644 --- a/src/i18n/locales/en/launch.json +++ b/src/i18n/locales/en/launch.json @@ -35,6 +35,8 @@ "noiseSuppressionSpeexDescription": "Lower CPU usage, but reduced voice quality.", "noiseSuppressionDisabled": "Disabled", "noiseSuppressionDisabledDescription": "Records the original microphone audio.", + "noiseSuppressionUnavailableWarning": "Noise suppression is unavailable on this device. Recording will continue without it.", + "noiseSuppressionFallbackWarning": "Noise suppression fell back to {{mode}}.", "webcam": "Webcam", "turnOffWebcam": "Turn Off Webcam", "hideFloatingWebcamPreview": "Hide Floating Preview", diff --git a/src/i18n/locales/es/launch.json b/src/i18n/locales/es/launch.json index fbff489bd..773c51013 100644 --- a/src/i18n/locales/es/launch.json +++ b/src/i18n/locales/es/launch.json @@ -35,6 +35,8 @@ "noiseSuppressionSpeexDescription": "Menor uso de CPU, pero calidad de voz reducida.", "noiseSuppressionDisabled": "Desactivado", "noiseSuppressionDisabledDescription": "Graba el audio original del micrófono.", + "noiseSuppressionUnavailableWarning": "La supresión de ruido no está disponible en este dispositivo. La grabación continuará sin ella.", + "noiseSuppressionFallbackWarning": "La supresión de ruido cambió a {{mode}}.", "webcam": "Cámara", "turnOffWebcam": "Desactivar cámara", "hideFloatingWebcamPreview": "Ocultar vista flotante", diff --git a/src/i18n/locales/fr/launch.json b/src/i18n/locales/fr/launch.json index 70757a8eb..1a0699bd7 100644 --- a/src/i18n/locales/fr/launch.json +++ b/src/i18n/locales/fr/launch.json @@ -35,6 +35,8 @@ "noiseSuppressionSpeexDescription": "Utilisation du processeur réduite, mais qualité vocale moindre.", "noiseSuppressionDisabled": "Désactivé", "noiseSuppressionDisabledDescription": "Enregistre l’audio original du microphone.", + "noiseSuppressionUnavailableWarning": "La réduction du bruit n’est pas disponible sur cet appareil. L’enregistrement continuera sans elle.", + "noiseSuppressionFallbackWarning": "La réduction du bruit est passée à {{mode}}.", "webcam": "Webcam", "turnOffWebcam": "Désactiver la webcam", "hideFloatingWebcamPreview": "Masquer l’aperçu flottant", diff --git a/src/i18n/locales/it/launch.json b/src/i18n/locales/it/launch.json index bc62837aa..78f0988bc 100644 --- a/src/i18n/locales/it/launch.json +++ b/src/i18n/locales/it/launch.json @@ -35,6 +35,8 @@ "noiseSuppressionSpeexDescription": "Minore uso della CPU, ma qualità vocale ridotta.", "noiseSuppressionDisabled": "Disabilitata", "noiseSuppressionDisabledDescription": "Registra l'audio originale del microfono.", + "noiseSuppressionUnavailableWarning": "La riduzione del rumore non è disponibile su questo dispositivo. La registrazione continuerà senza.", + "noiseSuppressionFallbackWarning": "La riduzione del rumore è passata a {{mode}}.", "webcam": "Webcam", "turnOffWebcam": "Spegni webcam", "hideFloatingWebcamPreview": "Nascondi anteprima fluttuante", diff --git a/src/i18n/locales/ko/launch.json b/src/i18n/locales/ko/launch.json index 57d06d9c2..2d348d8e1 100644 --- a/src/i18n/locales/ko/launch.json +++ b/src/i18n/locales/ko/launch.json @@ -35,6 +35,8 @@ "noiseSuppressionSpeexDescription": "CPU 사용량은 낮지만 음성 품질이 떨어질 수 있습니다.", "noiseSuppressionDisabled": "비활성화", "noiseSuppressionDisabledDescription": "원본 마이크 오디오를 녹음합니다.", + "noiseSuppressionUnavailableWarning": "이 기기에서는 소음 억제를 사용할 수 없습니다. 녹음은 소음 억제 없이 계속됩니다.", + "noiseSuppressionFallbackWarning": "소음 억제가 {{mode}}(으)로 전환되었습니다.", "webcam": "웹캠", "turnOffWebcam": "웹캠 끄기", "hideFloatingWebcamPreview": "플로팅 미리보기 숨기기", diff --git a/src/i18n/locales/nl/launch.json b/src/i18n/locales/nl/launch.json index 3e987598c..051ced057 100644 --- a/src/i18n/locales/nl/launch.json +++ b/src/i18n/locales/nl/launch.json @@ -35,6 +35,8 @@ "noiseSuppressionSpeexDescription": "Lager CPU-gebruik, maar lagere stemkwaliteit.", "noiseSuppressionDisabled": "Uitgeschakeld", "noiseSuppressionDisabledDescription": "Neemt de originele microfoonaudio op.", + "noiseSuppressionUnavailableWarning": "Ruisonderdrukking is niet beschikbaar op dit apparaat. De opname gaat zonder ruisonderdrukking door.", + "noiseSuppressionFallbackWarning": "Ruisonderdrukking is teruggevallen op {{mode}}.", "webcam": "Webcam", "turnOffWebcam": "Webcam uitschakelen", "hideFloatingWebcamPreview": "Zwevende voorbeeldweergave verbergen", diff --git a/src/i18n/locales/pt-BR/launch.json b/src/i18n/locales/pt-BR/launch.json index 8e789cf51..1c6b55aa6 100644 --- a/src/i18n/locales/pt-BR/launch.json +++ b/src/i18n/locales/pt-BR/launch.json @@ -35,6 +35,8 @@ "noiseSuppressionSpeexDescription": "Menor uso de CPU, mas qualidade de voz reduzida.", "noiseSuppressionDisabled": "Desativado", "noiseSuppressionDisabledDescription": "Grava o áudio original do microfone.", + "noiseSuppressionUnavailableWarning": "A supressão de ruído não está disponível neste dispositivo. A gravação continuará sem ela.", + "noiseSuppressionFallbackWarning": "A supressão de ruído alternou para {{mode}}.", "webcam": "Webcam", "turnOffWebcam": "Desligar webcam", "hideFloatingWebcamPreview": "Ocultar prévia flutuante", diff --git a/src/i18n/locales/ru/launch.json b/src/i18n/locales/ru/launch.json index 25e2e9648..7e5230fe0 100644 --- a/src/i18n/locales/ru/launch.json +++ b/src/i18n/locales/ru/launch.json @@ -35,6 +35,8 @@ "noiseSuppressionSpeexDescription": "Меньше нагрузка на процессор, но ниже качество голоса.", "noiseSuppressionDisabled": "Отключено", "noiseSuppressionDisabledDescription": "Записывает исходный звук с микрофона.", + "noiseSuppressionUnavailableWarning": "Шумоподавление недоступно на этом устройстве. Запись продолжится без него.", + "noiseSuppressionFallbackWarning": "Шумоподавление переключилось на {{mode}}.", "webcam": "Веб-камера", "turnOffWebcam": "Выключить веб-камеру", "hideFloatingWebcamPreview": "Скрыть предпросмотр", diff --git a/src/i18n/locales/zh-CN/launch.json b/src/i18n/locales/zh-CN/launch.json index c7e202858..76c0ea89d 100644 --- a/src/i18n/locales/zh-CN/launch.json +++ b/src/i18n/locales/zh-CN/launch.json @@ -35,6 +35,8 @@ "noiseSuppressionSpeexDescription": "CPU 使用率更低,但语音质量会降低。", "noiseSuppressionDisabled": "已禁用", "noiseSuppressionDisabledDescription": "录制原始麦克风音频。", + "noiseSuppressionUnavailableWarning": "此设备不支持噪声抑制。录制将继续,但不会使用噪声抑制。", + "noiseSuppressionFallbackWarning": "噪声抑制已回退到 {{mode}}。", "webcam": "摄像头", "turnOffWebcam": "关闭摄像头", "hideFloatingWebcamPreview": "隐藏悬浮预览", diff --git a/src/i18n/locales/zh-TW/launch.json b/src/i18n/locales/zh-TW/launch.json index 1a43b2019..bf830d70e 100644 --- a/src/i18n/locales/zh-TW/launch.json +++ b/src/i18n/locales/zh-TW/launch.json @@ -35,6 +35,8 @@ "noiseSuppressionSpeexDescription": "CPU 使用率較低,但語音品質會下降。", "noiseSuppressionDisabled": "已停用", "noiseSuppressionDisabledDescription": "錄製原始麥克風音訊。", + "noiseSuppressionUnavailableWarning": "此裝置無法使用噪音抑制。錄製將繼續,但不會使用噪音抑制。", + "noiseSuppressionFallbackWarning": "噪音抑制已改用 {{mode}}。", "webcam": "網路攝影機", "turnOffWebcam": "關閉網路攝影機", "hideFloatingWebcamPreview": "隱藏浮動預覽", diff --git a/src/lib/audio/noiseSuppressedStream.ts b/src/lib/audio/noiseSuppressedStream.ts index 77f9c447c..a2cc28de9 100644 --- a/src/lib/audio/noiseSuppressedStream.ts +++ b/src/lib/audio/noiseSuppressedStream.ts @@ -18,6 +18,15 @@ export type NoiseSuppressedMicrophoneStream = { destroy(): void; }; +export type NoiseSuppressionWarning = + | { + key: "recording.noiseSuppressionUnavailableWarning"; + } + | { + key: "recording.noiseSuppressionFallbackWarning"; + params: { mode: string }; + }; + export async function createNoiseSuppressedMicrophoneStream({ sourceStream, mode, @@ -25,7 +34,7 @@ export async function createNoiseSuppressedMicrophoneStream({ }: { sourceStream: MediaStream; mode: NoiseSuppressionMode; - onWarning?: (message: string) => void; + onWarning?: (warning: NoiseSuppressionWarning) => void; }): Promise { const requestedMode = normalizeNoiseSuppressionMode(mode); if (requestedMode === "disabled") { @@ -120,15 +129,19 @@ export async function createNoiseSuppressedMicrophoneStream({ function reportWarnings( selection: NoiseSuppressionSelection, - onWarning?: (message: string) => void, -) { + onWarning?: (warning: NoiseSuppressionWarning) => void, +): NoiseSuppressionWarning | null { if (selection.warnings.length === 0) { - return; + return null; } - const message = + const warning: NoiseSuppressionWarning = selection.activeMode === "disabled" - ? "Noise suppression is unavailable on this device. Recording will continue without it." - : `Noise suppression fell back to ${selection.activeMode.toUpperCase()}.`; - onWarning?.(message); + ? { key: "recording.noiseSuppressionUnavailableWarning" } + : { + key: "recording.noiseSuppressionFallbackWarning", + params: { mode: selection.activeMode.toUpperCase() }, + }; + onWarning?.(warning); + return warning; } From 913f761df3424d7db94c0297d2fea1f8f3f7f0b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Guimar=C3=A3es=20Pinto?= Date: Tue, 21 Jul 2026 21:47:49 -0400 Subject: [PATCH 4/8] fix(audio): buffer rnnoise frame remainders --- src/lib/audio/noiseSuppression.test.ts | 57 +++++++++++++++++++++++++- src/lib/audio/noiseSuppression.ts | 47 ++++++++++++++++----- 2 files changed, 92 insertions(+), 12 deletions(-) diff --git a/src/lib/audio/noiseSuppression.test.ts b/src/lib/audio/noiseSuppression.test.ts index b5c639cac..f7d2a747d 100644 --- a/src/lib/audio/noiseSuppression.test.ts +++ b/src/lib/audio/noiseSuppression.test.ts @@ -1,11 +1,20 @@ -import { describe, expect, it, vi } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; import { createNoiseSuppressorWithFallback, DEFAULT_NOISE_SUPPRESSION_MODE, - normalizeNoiseSuppressionMode, type NoiseSuppressor, + normalizeNoiseSuppressionMode, + RnnoiseNoiseSuppressor, } from "./noiseSuppression"; +const rnnoiseLoad = vi.hoisted(() => vi.fn()); + +vi.mock("@shiguredo/rnnoise-wasm", () => ({ + Rnnoise: { + load: rnnoiseLoad, + }, +})); + function createMockSuppressor({ initialize = vi.fn().mockResolvedValue(undefined), processAudioFrame = vi.fn((frame: Float32Array) => frame), @@ -18,6 +27,10 @@ function createMockSuppressor({ }; } +beforeEach(() => { + rnnoiseLoad.mockReset(); +}); + describe("normalizeNoiseSuppressionMode", () => { it("defaults new and invalid values to RNNoise", () => { expect(normalizeNoiseSuppressionMode()).toBe(DEFAULT_NOISE_SUPPRESSION_MODE); @@ -31,6 +44,46 @@ describe("normalizeNoiseSuppressionMode", () => { }); }); +describe("RnnoiseNoiseSuppressor", () => { + it("buffers incomplete RNNoise frames across calls without returning raw remainder samples", async () => { + const processFrame = vi.fn((frame: Float32Array) => { + for (let index = 0; index < frame.length; index += 1) { + frame[index] += 100; + } + }); + const destroy = vi.fn(); + rnnoiseLoad.mockResolvedValue({ + frameSize: 4, + createDenoiseState: () => ({ + processFrame, + destroy, + }), + }); + + const suppressor = new RnnoiseNoiseSuppressor(); + await suppressor.initialize(); + + const firstOutput = suppressor.processAudioFrame(new Float32Array([1, 2, 3, 4, 5, 6])); + expect(Array.from(firstOutput)).toEqual([101, 102, 103, 104, 0, 0]); + expect(processFrame).toHaveBeenCalledTimes(1); + + const secondOutput = suppressor.processAudioFrame(new Float32Array([7, 8, 9, 10, 11, 12])); + expect(Array.from(secondOutput)).toEqual([105, 106, 107, 108, 109, 110]); + expect(processFrame).toHaveBeenCalledTimes(3); + + const thirdOutput = suppressor.processAudioFrame(new Float32Array([13, 14])); + expect(Array.from(thirdOutput)).toEqual([111, 112]); + expect(processFrame).toHaveBeenCalledTimes(3); + + const fourthOutput = suppressor.processAudioFrame(new Float32Array([15, 16])); + expect(Array.from(fourthOutput)).toEqual([113, 114]); + expect(processFrame).toHaveBeenCalledTimes(4); + + suppressor.destroy(); + expect(destroy).toHaveBeenCalledTimes(1); + }); +}); + describe("createNoiseSuppressorWithFallback", () => { it("initializes RNNoise when requested", async () => { const rnnoise = createMockSuppressor(); diff --git a/src/lib/audio/noiseSuppression.ts b/src/lib/audio/noiseSuppression.ts index b98757d00..0abe9672f 100644 --- a/src/lib/audio/noiseSuppression.ts +++ b/src/lib/audio/noiseSuppression.ts @@ -1,5 +1,5 @@ -import { Rnnoise } from "@shiguredo/rnnoise-wasm"; import { loadSpeexModule, SpeexPreprocessor } from "@sapphi-red/speex-preprocess-wasm"; +import { Rnnoise } from "@shiguredo/rnnoise-wasm"; export type NoiseSuppressionMode = "rnnoise" | "speex" | "disabled"; @@ -49,6 +49,8 @@ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { private state: ReturnType< Awaited>["createDenoiseState"] > | null = null; + private remainder = new Float32Array(0); + private queuedOutput = new Float32Array(0); async initialize() { console.info("[NoiseSuppression] Initializing RNNoise."); @@ -65,29 +67,54 @@ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { } const frameSize = this.rnnoise.frameSize; - if (frame.length === frameSize) { - this.state.processFrame(frame); - return frame; - } + const pendingInput = new Float32Array(this.remainder.length + frame.length); + pendingInput.set(this.remainder); + pendingInput.set(frame, this.remainder.length); - if (frame.length < frameSize) { - return frame; + const completeLength = pendingInput.length - (pendingInput.length % frameSize); + for (let offset = 0; offset < completeLength; offset += frameSize) { + this.state.processFrame(pendingInput.subarray(offset, offset + frameSize)); } - for (let offset = 0; offset + frameSize <= frame.length; offset += frameSize) { - this.state.processFrame(frame.subarray(offset, offset + frameSize)); + this.remainder = pendingInput.slice(completeLength); + this.queuedOutput = appendFloat32Arrays( + this.queuedOutput, + pendingInput.subarray(0, completeLength), + ); + + const output = new Float32Array(frame.length); + const outputLength = Math.min(output.length, this.queuedOutput.length); + if (outputLength > 0) { + output.set(this.queuedOutput.subarray(0, outputLength)); + this.queuedOutput = this.queuedOutput.slice(outputLength); } - return frame; + return output; } destroy() { this.state?.destroy(); this.state = null; this.rnnoise = null; + this.remainder = new Float32Array(0); + this.queuedOutput = new Float32Array(0); console.info("[NoiseSuppression] RNNoise cleanup complete."); } } +function appendFloat32Arrays(left: Float32Array, right: Float32Array) { + if (left.length === 0) { + return right.slice(); + } + if (right.length === 0) { + return left; + } + + const combined = new Float32Array(left.length + right.length); + combined.set(left); + combined.set(right, left.length); + return combined; +} + export class SpeexNoiseSuppressor implements NoiseSuppressor { private preprocessor: SpeexPreprocessor | null = null; From d4242a3f8ce38467df1028b13dc92cf932498444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Guimar=C3=A3es=20Pinto?= Date: Tue, 21 Jul 2026 22:01:11 -0400 Subject: [PATCH 5/8] docs(audio): document noise suppression APIs --- src/components/launch/popovers/MicPopover.tsx | 9 ++-- src/lib/audio/noiseSuppressedStream.ts | 8 ++- src/lib/audio/noiseSuppression.ts | 54 +++++++++++++++++++ 3 files changed, 67 insertions(+), 4 deletions(-) diff --git a/src/components/launch/popovers/MicPopover.tsx b/src/components/launch/popovers/MicPopover.tsx index 9350421de..c92a369be 100644 --- a/src/components/launch/popovers/MicPopover.tsx +++ b/src/components/launch/popovers/MicPopover.tsx @@ -5,13 +5,13 @@ import { SpeakerHighIcon, SpeakerXIcon, } from "@phosphor-icons/react"; +import type { ReactElement } from "react"; import { useScopedT } from "@/contexts/I18nContext"; import type { NoiseSuppressionMode } from "@/lib/audio/noiseSuppression"; -import { DropdownItem, HudPopover, MicDeviceRow } from "./PopoverScaffold"; +import styles from "../LaunchWindow.module.css"; import { useLaunchPopoverCoordinator } from "./LaunchPopoverCoordinator"; import type { DeviceOption } from "./launchPopoverTypes"; -import type { ReactElement } from "react"; -import styles from "../LaunchWindow.module.css"; +import { DropdownItem, HudPopover, MicDeviceRow } from "./PopoverScaffold"; const POPOVER_ID = "mic"; @@ -133,6 +133,9 @@ export function MicPopover({ ); } +/** + * Renders one selectable noise suppression mode in the microphone popover. + */ function NoiseSuppressionOption({ mode, selectedMode, diff --git a/src/lib/audio/noiseSuppressedStream.ts b/src/lib/audio/noiseSuppressedStream.ts index a2cc28de9..07ad73262 100644 --- a/src/lib/audio/noiseSuppressedStream.ts +++ b/src/lib/audio/noiseSuppressedStream.ts @@ -1,8 +1,8 @@ import { createNoiseSuppressorWithFallback, - normalizeNoiseSuppressionMode, type NoiseSuppressionMode, type NoiseSuppressionSelection, + normalizeNoiseSuppressionMode, } from "./noiseSuppression"; const PROCESSOR_BUFFER_SIZE = 1024; @@ -27,6 +27,9 @@ export type NoiseSuppressionWarning = params: { mode: string }; }; +/** + * Wraps a microphone MediaStream with Web Audio noise suppression when enabled. + */ export async function createNoiseSuppressedMicrophoneStream({ sourceStream, mode, @@ -127,6 +130,9 @@ export async function createNoiseSuppressedMicrophoneStream({ }; } +/** + * Converts suppressor initialization warnings into the localized warning shape used by the UI. + */ function reportWarnings( selection: NoiseSuppressionSelection, onWarning?: (warning: NoiseSuppressionWarning) => void, diff --git a/src/lib/audio/noiseSuppression.ts b/src/lib/audio/noiseSuppression.ts index 0abe9672f..c36cee8df 100644 --- a/src/lib/audio/noiseSuppression.ts +++ b/src/lib/audio/noiseSuppression.ts @@ -4,8 +4,17 @@ import { Rnnoise } from "@shiguredo/rnnoise-wasm"; export type NoiseSuppressionMode = "rnnoise" | "speex" | "disabled"; export interface NoiseSuppressor { + /** + * Allocates any native or WASM state needed before processing audio frames. + */ initialize(): Promise; + /** + * Applies suppression to a single audio callback buffer. + */ processAudioFrame(frame: Float32Array): Float32Array; + /** + * Releases resources held by the suppressor. + */ destroy(): void; } @@ -23,6 +32,9 @@ export const NOISE_SUPPRESSION_MODES = new Set([ "disabled", ]); +/** + * Converts a persisted or user-provided value into a supported noise suppression mode. + */ export function normalizeNoiseSuppressionMode(value?: string | null): NoiseSuppressionMode { const normalized = value?.trim().toLowerCase(); return normalized && NOISE_SUPPRESSION_MODES.has(normalized as NoiseSuppressionMode) @@ -30,20 +42,35 @@ export function normalizeNoiseSuppressionMode(value?: string | null): NoiseSuppr : DEFAULT_NOISE_SUPPRESSION_MODE; } +/** + * Pass-through suppressor used when microphone noise suppression is explicitly disabled. + */ export class DisabledNoiseSuppressor implements NoiseSuppressor { + /** + * Completes setup for the disabled suppressor. + */ async initialize() { console.info("[NoiseSuppression] Disabled."); } + /** + * Returns the input audio frame unchanged. + */ processAudioFrame(frame: Float32Array) { return frame; } + /** + * Releases the disabled suppressor lifecycle. + */ destroy() { console.info("[NoiseSuppression] Disabled cleanup complete."); } } +/** + * Applies RNNoise denoising to microphone frames while preserving output timing. + */ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { private rnnoise: Awaited> | null = null; private state: ReturnType< @@ -52,6 +79,9 @@ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { private remainder = new Float32Array(0); private queuedOutput = new Float32Array(0); + /** + * Loads the RNNoise WASM module and creates a denoise state. + */ async initialize() { console.info("[NoiseSuppression] Initializing RNNoise."); this.rnnoise = await Rnnoise.load(); @@ -61,6 +91,9 @@ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { }); } + /** + * Processes complete RNNoise frames and buffers partial input between callbacks. + */ processAudioFrame(frame: Float32Array) { if (!this.rnnoise || !this.state) { throw new Error("RNNoise suppressor has not been initialized."); @@ -91,6 +124,9 @@ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { return output; } + /** + * Destroys RNNoise state and clears buffered audio. + */ destroy() { this.state?.destroy(); this.state = null; @@ -101,6 +137,9 @@ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { } } +/** + * Concatenates two Float32 buffers without mutating either source buffer. + */ function appendFloat32Arrays(left: Float32Array, right: Float32Array) { if (left.length === 0) { return right.slice(); @@ -115,6 +154,9 @@ function appendFloat32Arrays(left: Float32Array, right: Float32Array) { return combined; } +/** + * Applies Speex preprocessor denoising to microphone frames. + */ export class SpeexNoiseSuppressor implements NoiseSuppressor { private preprocessor: SpeexPreprocessor | null = null; @@ -123,6 +165,9 @@ export class SpeexNoiseSuppressor implements NoiseSuppressor { private readonly sampleRate: number, ) {} + /** + * Loads the Speex WASM module and configures denoise-only preprocessing. + */ async initialize() { console.info("[NoiseSuppression] Initializing Speex.", { frameSize: this.frameSize, @@ -137,6 +182,9 @@ export class SpeexNoiseSuppressor implements NoiseSuppressor { console.info("[NoiseSuppression] Speex initialized."); } + /** + * Processes full Speex-sized chunks and leaves any incomplete trailing samples untouched. + */ processAudioFrame(frame: Float32Array) { if (!this.preprocessor) { throw new Error("Speex suppressor has not been initialized."); @@ -153,6 +201,9 @@ export class SpeexNoiseSuppressor implements NoiseSuppressor { return frame; } + /** + * Releases the Speex preprocessor instance. + */ destroy() { this.preprocessor?.destroy(); this.preprocessor = null; @@ -166,6 +217,9 @@ export type NoiseSuppressorFactoryDeps = { createDisabled?: () => NoiseSuppressor; }; +/** + * Initializes the requested suppressor and falls back to compatible alternatives when needed. + */ export async function createNoiseSuppressorWithFallback({ mode, frameSize, From 02b3608729900cba1174f8de28c64b988e3c84e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Guimar=C3=A3es=20Pinto?= Date: Tue, 21 Jul 2026 23:00:09 -0400 Subject: [PATCH 6/8] Move noise suppression into audio worklet --- electron/ipc/register/settings.ts | 15 ++ src/components/launch/LaunchWindow.tsx | 6 + src/components/launch/popovers/MicPopover.tsx | 3 + src/hooks/useScreenRecorder.ts | 151 ++++++++++++ src/lib/audio/noiseSuppressedStream.ts | 108 +++++---- src/lib/audio/noiseSuppression.ts | 23 +- src/lib/audio/noiseSuppressionWorklet.ts | 219 ++++++++++++++++++ 7 files changed, 484 insertions(+), 41 deletions(-) create mode 100644 src/lib/audio/noiseSuppressionWorklet.ts diff --git a/electron/ipc/register/settings.ts b/electron/ipc/register/settings.ts index af7a34eb0..c6a8f24e2 100644 --- a/electron/ipc/register/settings.ts +++ b/electron/ipc/register/settings.ts @@ -31,6 +31,9 @@ const BROWSER_MICROPHONE_PROFILES = new Set([ "raw", ]); +/** + * Reads the browser microphone processing profile requested through the lab env flag. + */ function getBrowserMicrophoneProfileFromEnv() { const requested = process.env[BROWSER_MICROPHONE_PROFILE_ENV]?.trim() || null; const normalized = requested?.toLowerCase() ?? DEFAULT_BROWSER_MICROPHONE_PROFILE; @@ -42,6 +45,9 @@ function getBrowserMicrophoneProfileFromEnv() { }; } +/** + * Loads persisted app settings, falling back to an empty store when the file is absent or invalid. + */ function readAppSettingsStore(): Record { try { const content = readFileSync(APP_SETTINGS_FILE, "utf-8"); @@ -56,14 +62,23 @@ function readAppSettingsStore(): Record { } } +/** + * Persists the complete app settings store to disk. + */ function writeAppSettingsStore(store: Record) { writeFileSync(APP_SETTINGS_FILE, JSON.stringify(store, null, 2), "utf-8"); } +/** + * Checks for an explicitly persisted app setting without treating falsy values as missing. + */ function hasAppSetting(store: Record, key: string): boolean { return Reflect.getOwnPropertyDescriptor(store, key) !== undefined; } +/** + * Registers settings, preferences, shortcuts, countdown, and update IPC handlers. + */ export function registerSettingsHandlers() { ipcMain.handle("app:getVersion", () => { return app.getVersion(); diff --git a/src/components/launch/LaunchWindow.tsx b/src/components/launch/LaunchWindow.tsx index 3872468a2..3bdb41132 100644 --- a/src/components/launch/LaunchWindow.tsx +++ b/src/components/launch/LaunchWindow.tsx @@ -44,6 +44,9 @@ import { MarqueeText } from "./SourceSelector"; const SHOW_DEV_UPDATE_PREVIEW = import.meta.env.DEV; +/** + * Mounts the launch HUD with shared popover coordination for recording controls. + */ export function LaunchWindow() { return ( @@ -52,6 +55,9 @@ export function LaunchWindow() { ); } +/** + * Renders the interactive launch HUD content once popover coordination is available. + */ function LaunchWindowContent() { const t = useScopedT("launch"); const { openId, requestClose, requestOpen } = useLaunchPopoverCoordinator(); diff --git a/src/components/launch/popovers/MicPopover.tsx b/src/components/launch/popovers/MicPopover.tsx index c92a369be..3bafcf14e 100644 --- a/src/components/launch/popovers/MicPopover.tsx +++ b/src/components/launch/popovers/MicPopover.tsx @@ -15,6 +15,9 @@ import { DropdownItem, HudPopover, MicDeviceRow } from "./PopoverScaffold"; const POPOVER_ID = "mic"; +/** + * Renders microphone, system audio, and noise suppression controls for the recording HUD. + */ export function MicPopover({ trigger, disabled, diff --git a/src/hooks/useScreenRecorder.ts b/src/hooks/useScreenRecorder.ts index d92e3ab82..41492d5a7 100644 --- a/src/hooks/useScreenRecorder.ts +++ b/src/hooks/useScreenRecorder.ts @@ -49,6 +49,10 @@ const WEBCAM_FRAME_RATE = 30; const WEBCAM_SUFFIX = "-webcam"; const MICROPHONE_FALLBACK_ERROR_TOAST_ID = "recording-microphone-fallback-error"; const MICROPHONE_SIDECAR_ERROR_TOAST_ID = "recording-microphone-sidecar-error"; + +/** + * Browser microphone constraint presets used to tune capture processing before app-level effects. + */ export type BrowserMicrophoneProfile = | "processed" | "no-agc" @@ -56,6 +60,10 @@ export type BrowserMicrophoneProfile = | "no-noise-suppression" | "raw"; type BrowserCaptureCursorMode = "always" | "never"; + +/** + * Cursor capture behavior for browser fallback recordings and the editor overlay that follows them. + */ export type BrowserCaptureCursorPolicy = { streamCursor: BrowserCaptureCursorMode; hideOsCursorBeforeRecording: boolean; @@ -163,6 +171,9 @@ type UseScreenRecorderReturn = { setCountdownDelay: (delay: number) => void; }; +/** + * Converts unknown thrown values into a user-facing error message. + */ function getErrorMessage(error: unknown) { if (error instanceof Error && error.message) { return error.message; @@ -193,6 +204,9 @@ function getErrorMessage(error: unknown) { return "An unexpected error occurred"; } +/** + * Normalizes persisted microphone processing profile values to a supported browser preset. + */ export function normalizeBrowserMicrophoneProfile(value?: string | null): BrowserMicrophoneProfile { const normalized = value?.trim().toLowerCase(); return normalized && BROWSER_MICROPHONE_PROFILES.has(normalized as BrowserMicrophoneProfile) @@ -200,6 +214,9 @@ export function normalizeBrowserMicrophoneProfile(value?: string | null): Browse : DEFAULT_BROWSER_MICROPHONE_PROFILE; } +/** + * Selects cursor capture behavior for browser recordings based on native capture availability. + */ export function resolveBrowserCaptureCursorPolicy({ nativeWindowsCaptureStartFailed = false, }: { @@ -222,12 +239,18 @@ export function resolveBrowserCaptureCursorPolicy({ }; } +/** + * Returns whether a desktop source can use Recordly's native Windows capture pipeline. + */ export function shouldUseNativeWindowsCaptureForSource( source: Pick | null | undefined, ): boolean { return source?.id?.startsWith("screen:") === true || source?.id?.startsWith("window:") === true; } +/** + * Builds microphone getUserMedia constraints from the selected input device and processing preset. + */ export function createProcessedMicrophoneConstraints( microphoneDeviceId?: string, profile: BrowserMicrophoneProfile = DEFAULT_BROWSER_MICROPHONE_PROFILE, @@ -249,6 +272,9 @@ export function createProcessedMicrophoneConstraints( return { audio, video: false }; } +/** + * Creates MediaRecorder options with explicit audio and video bitrates for browser recording. + */ export function createBrowserRecordingOptions({ audioBitsPerSecond, mimeType, @@ -274,6 +300,9 @@ export function createBrowserRecordingOptions({ return options; } +/** + * Captures stable microphone track settings for fallback sidecar diagnostics. + */ function createMicrophoneTrackSettingsSnapshot( stream: MediaStream, ): MicrophoneTrackSettingsSnapshot | null { @@ -309,6 +338,9 @@ function createMicrophoneTrackSettingsSnapshot( return Object.keys(snapshot).length > 0 ? snapshot : null; } +/** + * Captures the visible audio input device list for microphone fallback diagnostics. + */ async function createAudioInputDeviceSnapshot(): Promise< MicrophoneAudioInputDeviceSnapshot[] | null > { @@ -328,6 +360,9 @@ async function createAudioInputDeviceSnapshot(): Promise< return audioInputs.length > 0 ? audioInputs : null; } +/** + * Coordinates screen, microphone, webcam, countdown, and persistence state for recording. + */ export function useScreenRecorder(): UseScreenRecorderReturn { const { t } = useI18n(); const [recording, setRecording] = useState(false); @@ -390,11 +425,17 @@ export function useScreenRecorder(): UseScreenRecorderReturn { const requestedBrowserMicrophoneProfile = useRef(null); const hideEditorOverlayCursorByDefault = useRef(false); + /** + * Clears finalizing state and reports a recording finalization failure. + */ const notifyRecordingFinalizationFailure = useCallback(async (message: string) => { setFinalizing(false); toast.error(message, { duration: 10000 }); }, []); + /** + * Logs native capture diagnostics for troubleshooting failed native capture paths. + */ const logNativeCaptureDiagnostics = useCallback(async (context: string) => { if (typeof window.electronAPI?.getLastNativeCaptureDiagnostics !== "function") { return; @@ -410,6 +451,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, []); + /** + * Builds a native capture failure message enriched with the latest diagnostics when available. + */ const buildNativeCaptureFailureMessage = useCallback( async (context: string, fallbackMessage: string) => { if (typeof window.electronAPI?.getLastNativeCaptureDiagnostics !== "function") { @@ -444,18 +488,27 @@ export function useScreenRecorder(): UseScreenRecorderReturn { [], ); + /** + * Starts a fresh recording clock and clears accumulated pause time. + */ const resetRecordingClock = useCallback((startedAt: number) => { startTime.current = startedAt; accumulatedPausedDurationMs.current = 0; pauseStartedAtMs.current = null; }, []); + /** + * Marks the current recording as paused at the provided wall-clock boundary. + */ const markRecordingPaused = useCallback((pausedAt: number) => { if (pauseStartedAtMs.current === null) { pauseStartedAtMs.current = pausedAt; } }, []); + /** + * Adds the latest pause interval to the recording clock when recording resumes. + */ const markRecordingResumed = useCallback((resumedAt: number) => { if (pauseStartedAtMs.current === null) { return; @@ -467,6 +520,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { pauseStartedAtMs.current = null; }, []); + /** + * Calculates effective recording duration after subtracting paused intervals. + */ const getRecordingDurationMs = useCallback((endedAt: number) => { return getEffectiveRecordingDurationMs({ startTimeMs: startTime.current, @@ -476,6 +532,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { }); }, []); + /** + * Calculates elapsed audio duration recorded by the microphone fallback recorder. + */ const getMicFallbackRecordedElapsedMs = useCallback((now = performance.now()) => { const startedAt = micFallbackRecorderStartedAt.current; if (startedAt === null) { @@ -494,6 +553,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { ); }, []); + /** + * Clears timing diagnostics captured for fallback microphone sidecars. + */ const resetMicFallbackTimingDiagnostics = useCallback(() => { micFallbackChunkEvents.current = []; micFallbackRecorderStartedAt.current = null; @@ -502,6 +564,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { micFallbackPauseIntervals.current = []; }, []); + /** + * Ensures required macOS recording permissions are granted before capture starts. + */ const preparePermissions = useCallback(async (options: { startup?: boolean } = {}) => { const platform = await window.electronAPI.getPlatform(); if (platform !== "darwin") { @@ -543,14 +608,23 @@ export function useScreenRecorder(): UseScreenRecorderReturn { return false; }, []); + /** + * Chooses the browser MediaRecorder MIME type for the main screen capture. + */ const selectMimeType = useCallback(() => { return selectRecordingMimeType(); }, []); + /** + * Chooses the browser MediaRecorder MIME type for webcam sidecar capture. + */ const selectWebcamMimeType = useCallback(() => { return selectWebcamRecordingMimeType(); }, []); + /** + * Estimates video bitrate from capture dimensions and the target frame rate. + */ const computeBitrate = (width: number, height: number) => { const pixels = width * height; const highFrameRateBoost = @@ -567,6 +641,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { return Math.round(BITRATE_BASE * highFrameRateBoost); }; + /** + * Stops all active media tracks and releases recording-side resources. + */ const cleanupCapturedMedia = useCallback(() => { for (const processedStream of noiseSuppressedMicrophoneStreams.current) { processedStream.destroy(); @@ -617,6 +694,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, [resetMicFallbackTimingDiagnostics]); + /** + * Wraps a raw microphone stream with the selected app-level noise suppression mode. + */ const prepareMicrophoneStream = useCallback( async (rawStream: MediaStream) => { try { @@ -646,6 +726,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { [noiseSuppressionMode, t], ); + /** + * Stores a microphone fallback recorder chunk and records its timing diagnostics. + */ const appendMicFallbackChunk = useCallback( (event: BlobEvent) => { if (event.data.size <= 0) { @@ -677,6 +760,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { [getMicFallbackRecordedElapsedMs], ); + /** + * Refreshes stale browser screen source IDs before starting desktop capture. + */ const resolveBrowserCaptureSource = useCallback(async (source: ProcessedDesktopSource) => { if (!source?.id?.startsWith("screen:")) { return source; @@ -726,6 +812,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { return source; }, []); + /** + * Persists final recording session metadata and switches the UI to the editor. + */ const finalizeRecordingSession = useCallback( async (videoPath: string, webcamPath: string | null) => { const start = performance.now(); @@ -765,6 +854,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { [], ); + /** + * Closes the current fallback microphone pause interval and records its duration. + */ const closeMicFallbackPauseInterval = useCallback((now = performance.now()) => { const pauseStartedAt = micFallbackPauseStartedAt.current; if (pauseStartedAt === null) { @@ -786,6 +878,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { micFallbackPauseStartedAt.current = null; }, []); + /** + * Stops the microphone fallback recorder and resolves the accumulated audio blob. + */ const stopMicFallbackRecorder = useCallback((): Promise => { return new Promise((resolve) => { const recorder = micFallbackRecorder.current; @@ -811,6 +906,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { }); }, [appendMicFallbackChunk, closeMicFallbackPauseInterval]); + /** + * Pauses the microphone fallback recorder and starts pause timing diagnostics. + */ const pauseMicFallbackRecorder = useCallback(() => { const recorder = micFallbackRecorder.current; if (recorder?.state !== "recording") { @@ -832,6 +930,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { }); }, []); + /** + * Resumes the microphone fallback recorder and closes the active pause interval. + */ const resumeMicFallbackRecorder = useCallback(() => { const recorder = micFallbackRecorder.current; if (recorder?.state !== "paused") { @@ -842,6 +943,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { recorder.resume(); }, [closeMicFallbackPauseInterval]); + /** + * Writes the fallback microphone sidecar and its diagnostic metadata next to the recording. + */ const storeMicrophoneSidecar = useCallback( async ( micFallbackBlobPromise: Promise | null | undefined, @@ -931,6 +1035,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { [resetMicFallbackTimingDiagnostics], ); + /** + * Stops webcam sidecar recording and resolves the saved webcam file path. + */ const stopWebcamRecorder = useCallback(async () => { const recorder = webcamRecorder.current; const pending = webcamStopPromise.current; @@ -957,6 +1064,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { return result ?? null; }, []); + /** + * Recovers a native capture output after an interrupted or failed stop request. + */ const recoverNativeRecordingSession = useCallback( async ( micFallbackBlobPromise?: Promise | null, @@ -1114,6 +1224,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, []); + /** + * Stops the active recording path and starts foreground or background finalization. + */ const stopRecording = useRef(() => { setPaused(false); if (nativeScreenRecording.current) { @@ -1298,6 +1411,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { })(); }, []); + /** + * Persists countdown delay changes made from the launch HUD. + */ const setCountdownDelay = useCallback((delay: number) => { setCountdownDelayState(delay); void window.electronAPI.setCountdownDelay(delay); @@ -1322,16 +1438,25 @@ export function useScreenRecorder(): UseScreenRecorderReturn { })(); }, []); + /** + * Persists whether microphone capture is enabled for future recordings. + */ const persistMicrophoneEnabled = useCallback((enabled: boolean) => { setMicrophoneEnabled(enabled); void window.electronAPI.setRecordingPreferences({ microphoneEnabled: enabled }); }, []); + /** + * Persists the selected microphone device for future recordings. + */ const persistMicrophoneDeviceId = useCallback((deviceId: string | undefined) => { setMicrophoneDeviceId(deviceId); void window.electronAPI.setRecordingPreferences({ microphoneDeviceId: deviceId }); }, []); + /** + * Persists the selected microphone noise suppression mode for future recordings. + */ const persistNoiseSuppressionMode = useCallback((mode: NoiseSuppressionMode) => { const normalizedMode = normalizeNoiseSuppressionMode(mode); setNoiseSuppressionModeState(normalizedMode); @@ -1340,6 +1465,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { }); }, []); + /** + * Persists whether system audio capture is enabled for future recordings. + */ const persistSystemAudioEnabled = useCallback((enabled: boolean) => { setSystemAudioEnabled(enabled); void window.electronAPI.setRecordingPreferences({ systemAudioEnabled: enabled }); @@ -1414,12 +1542,19 @@ export function useScreenRecorder(): UseScreenRecorderReturn { }; }, [cleanupCapturedMedia, recoverNativeRecordingSession]); + /** + * Starts the selected native or browser recording pipeline. + */ const startRecording = async () => { if (startInFlight.current) { return; } let hudSourceSelectionActive = false; + + /** + * Tells the HUD window whether a native source picker is currently active. + */ const setHudSourceSelectionActive = (active: boolean) => { if (hudSourceSelectionActive === active) { return; @@ -1698,6 +1833,10 @@ export function useScreenRecorder(): UseScreenRecorderReturn { if (wantsAudioCapture) { let screenMediaStream: MediaStream; + + /** + * Acquires a Linux portal stream with optional system audio in a single chooser flow. + */ const acquireLinuxPortalStream = (withAudio: boolean) => mediaDevices.getDisplayMedia({ audio: withAudio, @@ -2005,6 +2144,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }; + /** + * Pauses the active native or browser recording and synchronized sidecar recorders. + */ const pauseRecording = useCallback(() => { if (!recording || paused) return; if (nativeScreenRecording.current) { @@ -2051,6 +2193,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, [markRecordingPaused, pauseMicFallbackRecorder, paused, recording]); + /** + * Resumes the active native or browser recording and synchronized sidecar recorders. + */ const resumeRecording = useCallback(() => { if (!recording || !paused) return; if (nativeScreenRecording.current) { @@ -2097,6 +2242,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, [markRecordingResumed, paused, recording, resumeMicFallbackRecorder]); + /** + * Cancels the active recording and discards any partial media outputs. + */ const cancelRecording = useCallback(() => { if (!recording) return; setPaused(false); @@ -2144,6 +2292,9 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, [cleanupCapturedMedia, markRecordingResumed, recording]); + /** + * Toggles between starting a new recording and stopping the active one. + */ const toggleRecording = async () => { if (starting || countdownActive || finalizing) { return; diff --git a/src/lib/audio/noiseSuppressedStream.ts b/src/lib/audio/noiseSuppressedStream.ts index 07ad73262..d2ba67b2c 100644 --- a/src/lib/audio/noiseSuppressedStream.ts +++ b/src/lib/audio/noiseSuppressedStream.ts @@ -1,15 +1,18 @@ import { - createNoiseSuppressorWithFallback, type NoiseSuppressionMode, type NoiseSuppressionSelection, normalizeNoiseSuppressionMode, } from "./noiseSuppression"; +import noiseSuppressionWorkletUrl from "./noiseSuppressionWorklet.ts?worker&url"; const PROCESSOR_BUFFER_SIZE = 1024; const DEFAULT_SAMPLE_RATE = 48000; const FRAME_BUDGET_MS = 12; const LONG_FRAME_LOG_INTERVAL_MS = 5000; +/** + * Processed microphone stream plus lifecycle metadata for the active suppressor. + */ export type NoiseSuppressedMicrophoneStream = { stream: MediaStream; activeMode: NoiseSuppressionMode; @@ -18,6 +21,9 @@ export type NoiseSuppressedMicrophoneStream = { destroy(): void; }; +/** + * Localized warning payload emitted when suppression falls back or becomes unavailable. + */ export type NoiseSuppressionWarning = | { key: "recording.noiseSuppressionUnavailableWarning"; @@ -57,49 +63,23 @@ export async function createNoiseSuppressedMicrophoneStream({ const context = new AudioContext({ sampleRate: DEFAULT_SAMPLE_RATE }); const source = context.createMediaStreamSource(sourceStream); const destination = context.createMediaStreamDestination(); - const processor = context.createScriptProcessor(PROCESSOR_BUFFER_SIZE, 1, 1); const sampleRate = context.sampleRate || DEFAULT_SAMPLE_RATE; - const selection = await createNoiseSuppressorWithFallback({ + await context.audioWorklet.addModule(noiseSuppressionWorkletUrl); + const processor = new AudioWorkletNode(context, "noise-suppression-processor", { + numberOfInputs: 1, + numberOfOutputs: 1, + outputChannelCount: [1], + }); + const selection = await initializeNoiseSuppressionWorklet(processor, { mode: requestedMode, frameSize: PROCESSOR_BUFFER_SIZE, sampleRate, + frameBudgetMs: FRAME_BUDGET_MS, + longFrameLogIntervalMs: LONG_FRAME_LOG_INTERVAL_MS, }); reportWarnings(selection, onWarning); - let droppedFrames = 0; - let lastLongFrameLogAt = 0; - const scratchFrame = new Float32Array(PROCESSOR_BUFFER_SIZE); - processor.onaudioprocess = (event) => { - const input = event.inputBuffer.getChannelData(0); - const output = event.outputBuffer.getChannelData(0); - const startedAt = performance.now(); - try { - scratchFrame.set(input); - output.set(selection.suppressor.processAudioFrame(scratchFrame)); - } catch (error) { - droppedFrames += 1; - output.set(input); - console.warn("[NoiseSuppression] Processing error; passed through frame.", { - activeMode: selection.activeMode, - droppedFrames, - error: error instanceof Error ? error.message : String(error), - }); - } - - const elapsedMs = performance.now() - startedAt; - const now = performance.now(); - if (elapsedMs > FRAME_BUDGET_MS && now - lastLongFrameLogAt > LONG_FRAME_LOG_INTERVAL_MS) { - lastLongFrameLogAt = now; - console.warn("[NoiseSuppression] Processing exceeded real-time budget.", { - activeMode: selection.activeMode, - elapsedMs: Number(elapsedMs.toFixed(2)), - frameSize: PROCESSOR_BUFFER_SIZE, - sampleRate, - }); - } - }; - source.connect(processor); processor.connect(destination); console.info("[NoiseSuppression] Microphone stream processing active.", { @@ -115,26 +95,76 @@ export async function createNoiseSuppressedMicrophoneStream({ requestedMode, warnings: selection.warnings, destroy: () => { + processor.port.postMessage({ type: "destroy" }); processor.disconnect(); source.disconnect(); sourceStream.getTracks().forEach((track) => track.stop()); destination.stream.getTracks().forEach((track) => track.stop()); - selection.suppressor.destroy(); context.close().catch(() => undefined); console.info("[NoiseSuppression] Microphone stream cleanup complete.", { requestedMode, activeMode: selection.activeMode, - droppedFrames, }); }, }; } +type NoiseSuppressionWorkletReadySelection = Omit; + +/** + * Initializes the audio worklet processor and waits for its selected suppressor mode. + */ +async function initializeNoiseSuppressionWorklet( + processor: AudioWorkletNode, + config: { + mode: NoiseSuppressionMode; + frameSize: number; + frameBudgetMs: number; + longFrameLogIntervalMs: number; + sampleRate: number; + }, +): Promise { + return new Promise((resolve, reject) => { + processor.port.onmessage = (event) => { + const message = event.data; + if (message.type === "ready") { + resolve({ + requestedMode: message.requestedMode, + activeMode: message.activeMode, + warnings: message.warnings, + }); + return; + } + if (message.type === "error") { + reject(new Error(message.error)); + return; + } + if (message.type === "processing-error") { + console.warn("[NoiseSuppression] Processing error; passed through frame.", { + activeMode: message.activeMode, + droppedFrames: message.droppedFrames, + error: message.error, + }); + return; + } + if (message.type === "long-frame") { + console.warn("[NoiseSuppression] Processing exceeded real-time budget.", { + activeMode: message.activeMode, + elapsedMs: message.elapsedMs, + frameSize: message.frameSize, + sampleRate: message.sampleRate, + }); + } + }; + processor.port.postMessage({ type: "init", ...config }); + }); +} + /** * Converts suppressor initialization warnings into the localized warning shape used by the UI. */ function reportWarnings( - selection: NoiseSuppressionSelection, + selection: Pick, onWarning?: (warning: NoiseSuppressionWarning) => void, ): NoiseSuppressionWarning | null { if (selection.warnings.length === 0) { diff --git a/src/lib/audio/noiseSuppression.ts b/src/lib/audio/noiseSuppression.ts index c36cee8df..ffc2d0120 100644 --- a/src/lib/audio/noiseSuppression.ts +++ b/src/lib/audio/noiseSuppression.ts @@ -1,8 +1,14 @@ import { loadSpeexModule, SpeexPreprocessor } from "@sapphi-red/speex-preprocess-wasm"; import { Rnnoise } from "@shiguredo/rnnoise-wasm"; +/** + * Available microphone noise suppression engines and the explicit passthrough mode. + */ export type NoiseSuppressionMode = "rnnoise" | "speex" | "disabled"; +/** + * Common lifecycle and frame-processing contract for microphone denoisers. + */ export interface NoiseSuppressor { /** * Allocates any native or WASM state needed before processing audio frames. @@ -18,6 +24,9 @@ export interface NoiseSuppressor { destroy(): void; } +/** + * Result of choosing and initializing a suppressor, including fallback diagnostics. + */ export type NoiseSuppressionSelection = { requestedMode: NoiseSuppressionMode; activeMode: NoiseSuppressionMode; @@ -25,7 +34,14 @@ export type NoiseSuppressionSelection = { warnings: string[]; }; +/** + * Default denoiser used for new and invalid persisted recording preferences. + */ export const DEFAULT_NOISE_SUPPRESSION_MODE: NoiseSuppressionMode = "rnnoise"; + +/** + * Supported persisted values for microphone noise suppression. + */ export const NOISE_SUPPRESSION_MODES = new Set([ "rnnoise", "speex", @@ -76,8 +92,8 @@ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { private state: ReturnType< Awaited>["createDenoiseState"] > | null = null; - private remainder = new Float32Array(0); - private queuedOutput = new Float32Array(0); + private remainder: Float32Array = new Float32Array(0); + private queuedOutput: Float32Array = new Float32Array(0); /** * Loads the RNNoise WASM module and creates a denoise state. @@ -211,6 +227,9 @@ export class SpeexNoiseSuppressor implements NoiseSuppressor { } } +/** + * Optional factories used by tests and callers that need custom suppressor implementations. + */ export type NoiseSuppressorFactoryDeps = { createRnnoise?: () => NoiseSuppressor; createSpeex?: () => NoiseSuppressor; diff --git a/src/lib/audio/noiseSuppressionWorklet.ts b/src/lib/audio/noiseSuppressionWorklet.ts new file mode 100644 index 000000000..8c810f5d7 --- /dev/null +++ b/src/lib/audio/noiseSuppressionWorklet.ts @@ -0,0 +1,219 @@ +import { + createNoiseSuppressorWithFallback, + type NoiseSuppressionMode, + type NoiseSuppressionSelection, +} from "./noiseSuppression"; + +declare const AudioWorkletProcessor: { + new (): AudioWorkletProcessor; +}; +declare function registerProcessor(name: string, processorCtor: typeof AudioWorkletProcessor): void; +declare const currentTime: number; + +type AudioWorkletProcessor = { + readonly port: MessagePort; + process(inputs: Float32Array[][], outputs: Float32Array[][]): boolean; +}; + +type NoiseSuppressionWorkletMessage = + | { + type: "init"; + mode: NoiseSuppressionMode; + frameSize: number; + frameBudgetMs: number; + longFrameLogIntervalMs: number; + sampleRate: number; + } + | { type: "destroy" }; + +/** + * Runs microphone noise suppression off the main thread inside an AudioWorklet. + */ +class NoiseSuppressionProcessor extends AudioWorkletProcessor { + private droppedFrames = 0; + private frameBudgetMs = 12; + private frameSize = 1024; + private inputBuffer = new Float32Array(1024); + private inputBufferOffset = 0; + private lastLongFrameLogAt = 0; + private longFrameLogIntervalMs = 5000; + private outputBuffer: Float32Array = new Float32Array(0); + private sampleRate = 48000; + private selection: NoiseSuppressionSelection | null = null; + private scratchFrame = new Float32Array(1024); + + constructor() { + super(); + this.port.onmessage = (event: MessageEvent) => { + if (event.data.type === "init") { + void this.initialize(event.data); + return; + } + this.destroy(); + }; + } + + /** + * Initializes the selected suppressor after receiving configuration from the main audio graph. + */ + private async initialize({ + mode, + frameSize, + frameBudgetMs, + longFrameLogIntervalMs, + sampleRate, + }: Extract) { + this.frameSize = frameSize; + this.frameBudgetMs = frameBudgetMs; + this.longFrameLogIntervalMs = longFrameLogIntervalMs; + this.sampleRate = sampleRate; + this.inputBuffer = new Float32Array(frameSize); + this.inputBufferOffset = 0; + this.outputBuffer = new Float32Array(0); + this.scratchFrame = new Float32Array(frameSize); + + try { + this.selection = await createNoiseSuppressorWithFallback({ + mode, + frameSize, + sampleRate, + }); + this.port.postMessage({ + type: "ready", + activeMode: this.selection.activeMode, + requestedMode: this.selection.requestedMode, + warnings: this.selection.warnings, + }); + } catch (error) { + this.port.postMessage({ + type: "error", + error: error instanceof Error ? error.message : String(error), + }); + } + } + + /** + * Streams audio through the suppressor while preserving AudioWorklet output timing. + */ + process(inputs: Float32Array[][], outputs: Float32Array[][]) { + const input = inputs[0]?.[0]; + const output = outputs[0]?.[0]; + if (!output) { + return true; + } + + if (!input || !this.selection) { + output.fill(0); + return true; + } + + let inputOffset = 0; + while (inputOffset < input.length) { + const writableLength = Math.min( + this.frameSize - this.inputBufferOffset, + input.length - inputOffset, + ); + this.inputBuffer.set( + input.subarray(inputOffset, inputOffset + writableLength), + this.inputBufferOffset, + ); + this.inputBufferOffset += writableLength; + inputOffset += writableLength; + + if (this.inputBufferOffset === this.frameSize) { + this.processBufferedFrame(); + this.inputBufferOffset = 0; + } + } + + const readableLength = Math.min(output.length, this.outputBuffer.length); + if (readableLength > 0) { + output.set(this.outputBuffer.subarray(0, readableLength)); + this.outputBuffer = this.outputBuffer.slice(readableLength); + } + if (readableLength < output.length) { + output.fill(0, readableLength); + } + + return true; + } + + /** + * Processes a complete internal frame and queues it for the next output callback. + */ + private processBufferedFrame() { + if (!this.selection) { + return; + } + + const startedAt = getNowMs(); + try { + this.scratchFrame.set(this.inputBuffer); + this.outputBuffer = appendFloat32Arrays( + this.outputBuffer, + this.selection.suppressor.processAudioFrame(this.scratchFrame), + ); + } catch (error) { + this.droppedFrames += 1; + this.outputBuffer = appendFloat32Arrays(this.outputBuffer, this.inputBuffer); + this.port.postMessage({ + type: "processing-error", + activeMode: this.selection.activeMode, + droppedFrames: this.droppedFrames, + error: error instanceof Error ? error.message : String(error), + }); + } + + const now = getNowMs(); + const elapsedMs = now - startedAt; + if ( + elapsedMs > this.frameBudgetMs && + now - this.lastLongFrameLogAt > this.longFrameLogIntervalMs + ) { + this.lastLongFrameLogAt = now; + this.port.postMessage({ + type: "long-frame", + activeMode: this.selection.activeMode, + elapsedMs: Number(elapsedMs.toFixed(2)), + frameSize: this.frameSize, + sampleRate: this.sampleRate, + }); + } + } + + /** + * Releases suppressor state and clears queued audio when the worklet is torn down. + */ + private destroy() { + this.selection?.suppressor.destroy(); + this.selection = null; + this.outputBuffer = new Float32Array(0); + this.inputBufferOffset = 0; + } +} + +/** + * Concatenates two Float32 buffers without mutating either source buffer. + */ +function appendFloat32Arrays( + left: Float32Array, + right: Float32Array, +) { + if (left.length === 0) { + return right.slice(); + } + if (right.length === 0) { + return left; + } + + const combined = new Float32Array(left.length + right.length); + combined.set(left); + combined.set(right, left.length); + return combined; +} + +function getNowMs() { + return globalThis.performance?.now() ?? currentTime * 1000; +} + +registerProcessor("noise-suppression-processor", NoiseSuppressionProcessor); From c6c0cb3ee65537608d057da81bb401afe261a6c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Guimar=C3=A3es=20Pinto?= Date: Tue, 21 Jul 2026 23:13:35 -0400 Subject: [PATCH 7/8] fix: satisfy PR hygiene checks --- electron/ipc/register/settings.ts | 15 -- .../recordly-native-cursor-monitor | Bin 96896 -> 96897 bytes .../recordly-screencapturekit-helper | Bin 191872 -> 191873 bytes .../bin/darwin-arm64/recordly-system-cursors | Bin 101144 -> 101145 bytes .../bin/darwin-arm64/recordly-window-list | Bin 116920 -> 116921 bytes .../darwin-x64/recordly-native-cursor-monitor | Bin 71624 -> 71625 bytes .../recordly-screencapturekit-helper | Bin 182368 -> 182369 bytes .../bin/darwin-x64/recordly-system-cursors | Bin 71752 -> 71753 bytes .../bin/darwin-x64/recordly-window-list | Bin 83328 -> 83329 bytes src/components/launch/LaunchWindow.tsx | 6 - src/components/launch/popovers/MicPopover.tsx | 6 - src/hooks/useScreenRecorder.ts | 147 ------------------ src/lib/audio/noiseSuppressedStream.ts | 15 -- src/lib/audio/noiseSuppression.ts | 72 --------- src/lib/audio/noiseSuppressionWorklet.ts | 18 --- 15 files changed, 279 deletions(-) diff --git a/electron/ipc/register/settings.ts b/electron/ipc/register/settings.ts index c6a8f24e2..af7a34eb0 100644 --- a/electron/ipc/register/settings.ts +++ b/electron/ipc/register/settings.ts @@ -31,9 +31,6 @@ const BROWSER_MICROPHONE_PROFILES = new Set([ "raw", ]); -/** - * Reads the browser microphone processing profile requested through the lab env flag. - */ function getBrowserMicrophoneProfileFromEnv() { const requested = process.env[BROWSER_MICROPHONE_PROFILE_ENV]?.trim() || null; const normalized = requested?.toLowerCase() ?? DEFAULT_BROWSER_MICROPHONE_PROFILE; @@ -45,9 +42,6 @@ function getBrowserMicrophoneProfileFromEnv() { }; } -/** - * Loads persisted app settings, falling back to an empty store when the file is absent or invalid. - */ function readAppSettingsStore(): Record { try { const content = readFileSync(APP_SETTINGS_FILE, "utf-8"); @@ -62,23 +56,14 @@ function readAppSettingsStore(): Record { } } -/** - * Persists the complete app settings store to disk. - */ function writeAppSettingsStore(store: Record) { writeFileSync(APP_SETTINGS_FILE, JSON.stringify(store, null, 2), "utf-8"); } -/** - * Checks for an explicitly persisted app setting without treating falsy values as missing. - */ function hasAppSetting(store: Record, key: string): boolean { return Reflect.getOwnPropertyDescriptor(store, key) !== undefined; } -/** - * Registers settings, preferences, shortcuts, countdown, and update IPC handlers. - */ export function registerSettingsHandlers() { ipcMain.handle("app:getVersion", () => { return app.getVersion(); diff --git a/electron/native/bin/darwin-arm64/recordly-native-cursor-monitor b/electron/native/bin/darwin-arm64/recordly-native-cursor-monitor index a3faa6c481b48d997a0136b23c7ed30de795910f..34a4da9e3daefce1b1d21725cafa1b2cf58c6845 100755 GIT binary patch delta 13 UcmZqp%G&sqwP6cmLlq+z04qiXFaQ7m delta 11 QcmZqt%Gv-#TNoRv03h=PB>(^b diff --git a/electron/native/bin/darwin-arm64/recordly-screencapturekit-helper b/electron/native/bin/darwin-arm64/recordly-screencapturekit-helper index a384bd4339788d166bc4b268eb0d19e4bfb03575..e8a29cdf771330d1f4757c9d980c94fd657ec55f 100755 GIT binary patch delta 15 WcmZp;&E0sLyP<_~3sb{eMlJv~w*~wuUW?65RkByaYl3 diff --git a/electron/native/bin/darwin-arm64/recordly-window-list b/electron/native/bin/darwin-arm64/recordly-window-list index 6e89cba7425cd502c45f26095fddc586f752ea93..e4170eadf15dfb238d99dfab2536354d24dea317 100755 GIT binary patch delta 13 Vcmdlnk$vYx_J%EtJ5Dfi0RSor1!4dI delta 11 Tcmdlvk$uNR_J%EtJ5B%qA5#Ta diff --git a/electron/native/bin/darwin-x64/recordly-native-cursor-monitor b/electron/native/bin/darwin-x64/recordly-native-cursor-monitor index 36c1c0fdf6254bf730dd11db32bc548c461129a2..3c0cfa8722ece0d05c649d5cdc2ce752b5afc4be 100755 GIT binary patch delta 13 UcmX@Hp5^3vmWC~iC&U@K04wAL7XSbN delta 11 ScmX@Pp5?@PmWC~iC&U3E!vzcg diff --git a/electron/native/bin/darwin-x64/recordly-screencapturekit-helper b/electron/native/bin/darwin-x64/recordly-screencapturekit-helper index 8f6c86239f4b8a7179ccce73f9fdb9b5fe6f4f18..a42997665960eb89dfd6d8d9ff8f6b8e8aee7fc6 100755 GIT binary patch delta 15 WcmaDbf&1YE?uHh|Eldd~7`Xs9l?CPi delta 13 UcmaDjf&0M(?uHh|Eldd~04vr7+W-In diff --git a/electron/native/bin/darwin-x64/recordly-system-cursors b/electron/native/bin/darwin-x64/recordly-system-cursors index 045792221da67112c03681a725d141f64273ad1e..0dc0ff97452e620b8b8d78c5477a3252fad4e80d 100755 GIT binary patch delta 13 UcmX@Hf#u`|mWC~i9ukaP04e+gng9R* delta 11 ScmX@Pf#t*omWC~i9ufc`)dY_K diff --git a/electron/native/bin/darwin-x64/recordly-window-list b/electron/native/bin/darwin-x64/recordly-window-list index ee9b257858f4859d0a3418c5ab1b623494a4cd9c..affc5b0100ebd97c4e9b8f09c4e8631eaf21939c 100755 GIT binary patch delta 13 UcmZqZW^L?dZP>!t;L6Aa03r1RCjbBd delta 11 QcmZqdW^DkXEsPDW02#Cd8~^|S diff --git a/src/components/launch/LaunchWindow.tsx b/src/components/launch/LaunchWindow.tsx index 3bdb41132..3872468a2 100644 --- a/src/components/launch/LaunchWindow.tsx +++ b/src/components/launch/LaunchWindow.tsx @@ -44,9 +44,6 @@ import { MarqueeText } from "./SourceSelector"; const SHOW_DEV_UPDATE_PREVIEW = import.meta.env.DEV; -/** - * Mounts the launch HUD with shared popover coordination for recording controls. - */ export function LaunchWindow() { return ( @@ -55,9 +52,6 @@ export function LaunchWindow() { ); } -/** - * Renders the interactive launch HUD content once popover coordination is available. - */ function LaunchWindowContent() { const t = useScopedT("launch"); const { openId, requestClose, requestOpen } = useLaunchPopoverCoordinator(); diff --git a/src/components/launch/popovers/MicPopover.tsx b/src/components/launch/popovers/MicPopover.tsx index 3bafcf14e..fe4ed3fef 100644 --- a/src/components/launch/popovers/MicPopover.tsx +++ b/src/components/launch/popovers/MicPopover.tsx @@ -15,9 +15,6 @@ import { DropdownItem, HudPopover, MicDeviceRow } from "./PopoverScaffold"; const POPOVER_ID = "mic"; -/** - * Renders microphone, system audio, and noise suppression controls for the recording HUD. - */ export function MicPopover({ trigger, disabled, @@ -136,9 +133,6 @@ export function MicPopover({ ); } -/** - * Renders one selectable noise suppression mode in the microphone popover. - */ function NoiseSuppressionOption({ mode, selectedMode, diff --git a/src/hooks/useScreenRecorder.ts b/src/hooks/useScreenRecorder.ts index 41492d5a7..071c8cfb5 100644 --- a/src/hooks/useScreenRecorder.ts +++ b/src/hooks/useScreenRecorder.ts @@ -50,9 +50,6 @@ const WEBCAM_SUFFIX = "-webcam"; const MICROPHONE_FALLBACK_ERROR_TOAST_ID = "recording-microphone-fallback-error"; const MICROPHONE_SIDECAR_ERROR_TOAST_ID = "recording-microphone-sidecar-error"; -/** - * Browser microphone constraint presets used to tune capture processing before app-level effects. - */ export type BrowserMicrophoneProfile = | "processed" | "no-agc" @@ -61,9 +58,6 @@ export type BrowserMicrophoneProfile = | "raw"; type BrowserCaptureCursorMode = "always" | "never"; -/** - * Cursor capture behavior for browser fallback recordings and the editor overlay that follows them. - */ export type BrowserCaptureCursorPolicy = { streamCursor: BrowserCaptureCursorMode; hideOsCursorBeforeRecording: boolean; @@ -171,9 +165,6 @@ type UseScreenRecorderReturn = { setCountdownDelay: (delay: number) => void; }; -/** - * Converts unknown thrown values into a user-facing error message. - */ function getErrorMessage(error: unknown) { if (error instanceof Error && error.message) { return error.message; @@ -204,9 +195,6 @@ function getErrorMessage(error: unknown) { return "An unexpected error occurred"; } -/** - * Normalizes persisted microphone processing profile values to a supported browser preset. - */ export function normalizeBrowserMicrophoneProfile(value?: string | null): BrowserMicrophoneProfile { const normalized = value?.trim().toLowerCase(); return normalized && BROWSER_MICROPHONE_PROFILES.has(normalized as BrowserMicrophoneProfile) @@ -214,9 +202,6 @@ export function normalizeBrowserMicrophoneProfile(value?: string | null): Browse : DEFAULT_BROWSER_MICROPHONE_PROFILE; } -/** - * Selects cursor capture behavior for browser recordings based on native capture availability. - */ export function resolveBrowserCaptureCursorPolicy({ nativeWindowsCaptureStartFailed = false, }: { @@ -239,18 +224,12 @@ export function resolveBrowserCaptureCursorPolicy({ }; } -/** - * Returns whether a desktop source can use Recordly's native Windows capture pipeline. - */ export function shouldUseNativeWindowsCaptureForSource( source: Pick | null | undefined, ): boolean { return source?.id?.startsWith("screen:") === true || source?.id?.startsWith("window:") === true; } -/** - * Builds microphone getUserMedia constraints from the selected input device and processing preset. - */ export function createProcessedMicrophoneConstraints( microphoneDeviceId?: string, profile: BrowserMicrophoneProfile = DEFAULT_BROWSER_MICROPHONE_PROFILE, @@ -272,9 +251,6 @@ export function createProcessedMicrophoneConstraints( return { audio, video: false }; } -/** - * Creates MediaRecorder options with explicit audio and video bitrates for browser recording. - */ export function createBrowserRecordingOptions({ audioBitsPerSecond, mimeType, @@ -300,9 +276,6 @@ export function createBrowserRecordingOptions({ return options; } -/** - * Captures stable microphone track settings for fallback sidecar diagnostics. - */ function createMicrophoneTrackSettingsSnapshot( stream: MediaStream, ): MicrophoneTrackSettingsSnapshot | null { @@ -338,9 +311,6 @@ function createMicrophoneTrackSettingsSnapshot( return Object.keys(snapshot).length > 0 ? snapshot : null; } -/** - * Captures the visible audio input device list for microphone fallback diagnostics. - */ async function createAudioInputDeviceSnapshot(): Promise< MicrophoneAudioInputDeviceSnapshot[] | null > { @@ -360,9 +330,6 @@ async function createAudioInputDeviceSnapshot(): Promise< return audioInputs.length > 0 ? audioInputs : null; } -/** - * Coordinates screen, microphone, webcam, countdown, and persistence state for recording. - */ export function useScreenRecorder(): UseScreenRecorderReturn { const { t } = useI18n(); const [recording, setRecording] = useState(false); @@ -425,17 +392,11 @@ export function useScreenRecorder(): UseScreenRecorderReturn { const requestedBrowserMicrophoneProfile = useRef(null); const hideEditorOverlayCursorByDefault = useRef(false); - /** - * Clears finalizing state and reports a recording finalization failure. - */ const notifyRecordingFinalizationFailure = useCallback(async (message: string) => { setFinalizing(false); toast.error(message, { duration: 10000 }); }, []); - /** - * Logs native capture diagnostics for troubleshooting failed native capture paths. - */ const logNativeCaptureDiagnostics = useCallback(async (context: string) => { if (typeof window.electronAPI?.getLastNativeCaptureDiagnostics !== "function") { return; @@ -451,9 +412,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, []); - /** - * Builds a native capture failure message enriched with the latest diagnostics when available. - */ const buildNativeCaptureFailureMessage = useCallback( async (context: string, fallbackMessage: string) => { if (typeof window.electronAPI?.getLastNativeCaptureDiagnostics !== "function") { @@ -488,27 +446,18 @@ export function useScreenRecorder(): UseScreenRecorderReturn { [], ); - /** - * Starts a fresh recording clock and clears accumulated pause time. - */ const resetRecordingClock = useCallback((startedAt: number) => { startTime.current = startedAt; accumulatedPausedDurationMs.current = 0; pauseStartedAtMs.current = null; }, []); - /** - * Marks the current recording as paused at the provided wall-clock boundary. - */ const markRecordingPaused = useCallback((pausedAt: number) => { if (pauseStartedAtMs.current === null) { pauseStartedAtMs.current = pausedAt; } }, []); - /** - * Adds the latest pause interval to the recording clock when recording resumes. - */ const markRecordingResumed = useCallback((resumedAt: number) => { if (pauseStartedAtMs.current === null) { return; @@ -520,9 +469,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { pauseStartedAtMs.current = null; }, []); - /** - * Calculates effective recording duration after subtracting paused intervals. - */ const getRecordingDurationMs = useCallback((endedAt: number) => { return getEffectiveRecordingDurationMs({ startTimeMs: startTime.current, @@ -532,9 +478,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { }); }, []); - /** - * Calculates elapsed audio duration recorded by the microphone fallback recorder. - */ const getMicFallbackRecordedElapsedMs = useCallback((now = performance.now()) => { const startedAt = micFallbackRecorderStartedAt.current; if (startedAt === null) { @@ -553,9 +496,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { ); }, []); - /** - * Clears timing diagnostics captured for fallback microphone sidecars. - */ const resetMicFallbackTimingDiagnostics = useCallback(() => { micFallbackChunkEvents.current = []; micFallbackRecorderStartedAt.current = null; @@ -564,9 +504,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { micFallbackPauseIntervals.current = []; }, []); - /** - * Ensures required macOS recording permissions are granted before capture starts. - */ const preparePermissions = useCallback(async (options: { startup?: boolean } = {}) => { const platform = await window.electronAPI.getPlatform(); if (platform !== "darwin") { @@ -608,23 +545,14 @@ export function useScreenRecorder(): UseScreenRecorderReturn { return false; }, []); - /** - * Chooses the browser MediaRecorder MIME type for the main screen capture. - */ const selectMimeType = useCallback(() => { return selectRecordingMimeType(); }, []); - /** - * Chooses the browser MediaRecorder MIME type for webcam sidecar capture. - */ const selectWebcamMimeType = useCallback(() => { return selectWebcamRecordingMimeType(); }, []); - /** - * Estimates video bitrate from capture dimensions and the target frame rate. - */ const computeBitrate = (width: number, height: number) => { const pixels = width * height; const highFrameRateBoost = @@ -641,9 +569,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { return Math.round(BITRATE_BASE * highFrameRateBoost); }; - /** - * Stops all active media tracks and releases recording-side resources. - */ const cleanupCapturedMedia = useCallback(() => { for (const processedStream of noiseSuppressedMicrophoneStreams.current) { processedStream.destroy(); @@ -694,9 +619,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, [resetMicFallbackTimingDiagnostics]); - /** - * Wraps a raw microphone stream with the selected app-level noise suppression mode. - */ const prepareMicrophoneStream = useCallback( async (rawStream: MediaStream) => { try { @@ -726,9 +648,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { [noiseSuppressionMode, t], ); - /** - * Stores a microphone fallback recorder chunk and records its timing diagnostics. - */ const appendMicFallbackChunk = useCallback( (event: BlobEvent) => { if (event.data.size <= 0) { @@ -760,9 +679,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { [getMicFallbackRecordedElapsedMs], ); - /** - * Refreshes stale browser screen source IDs before starting desktop capture. - */ const resolveBrowserCaptureSource = useCallback(async (source: ProcessedDesktopSource) => { if (!source?.id?.startsWith("screen:")) { return source; @@ -812,9 +728,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { return source; }, []); - /** - * Persists final recording session metadata and switches the UI to the editor. - */ const finalizeRecordingSession = useCallback( async (videoPath: string, webcamPath: string | null) => { const start = performance.now(); @@ -854,9 +767,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { [], ); - /** - * Closes the current fallback microphone pause interval and records its duration. - */ const closeMicFallbackPauseInterval = useCallback((now = performance.now()) => { const pauseStartedAt = micFallbackPauseStartedAt.current; if (pauseStartedAt === null) { @@ -878,9 +788,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { micFallbackPauseStartedAt.current = null; }, []); - /** - * Stops the microphone fallback recorder and resolves the accumulated audio blob. - */ const stopMicFallbackRecorder = useCallback((): Promise => { return new Promise((resolve) => { const recorder = micFallbackRecorder.current; @@ -906,9 +813,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { }); }, [appendMicFallbackChunk, closeMicFallbackPauseInterval]); - /** - * Pauses the microphone fallback recorder and starts pause timing diagnostics. - */ const pauseMicFallbackRecorder = useCallback(() => { const recorder = micFallbackRecorder.current; if (recorder?.state !== "recording") { @@ -930,9 +834,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { }); }, []); - /** - * Resumes the microphone fallback recorder and closes the active pause interval. - */ const resumeMicFallbackRecorder = useCallback(() => { const recorder = micFallbackRecorder.current; if (recorder?.state !== "paused") { @@ -943,9 +844,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { recorder.resume(); }, [closeMicFallbackPauseInterval]); - /** - * Writes the fallback microphone sidecar and its diagnostic metadata next to the recording. - */ const storeMicrophoneSidecar = useCallback( async ( micFallbackBlobPromise: Promise | null | undefined, @@ -1035,9 +933,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { [resetMicFallbackTimingDiagnostics], ); - /** - * Stops webcam sidecar recording and resolves the saved webcam file path. - */ const stopWebcamRecorder = useCallback(async () => { const recorder = webcamRecorder.current; const pending = webcamStopPromise.current; @@ -1064,9 +959,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { return result ?? null; }, []); - /** - * Recovers a native capture output after an interrupted or failed stop request. - */ const recoverNativeRecordingSession = useCallback( async ( micFallbackBlobPromise?: Promise | null, @@ -1224,9 +1116,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, []); - /** - * Stops the active recording path and starts foreground or background finalization. - */ const stopRecording = useRef(() => { setPaused(false); if (nativeScreenRecording.current) { @@ -1411,9 +1300,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { })(); }, []); - /** - * Persists countdown delay changes made from the launch HUD. - */ const setCountdownDelay = useCallback((delay: number) => { setCountdownDelayState(delay); void window.electronAPI.setCountdownDelay(delay); @@ -1438,25 +1324,16 @@ export function useScreenRecorder(): UseScreenRecorderReturn { })(); }, []); - /** - * Persists whether microphone capture is enabled for future recordings. - */ const persistMicrophoneEnabled = useCallback((enabled: boolean) => { setMicrophoneEnabled(enabled); void window.electronAPI.setRecordingPreferences({ microphoneEnabled: enabled }); }, []); - /** - * Persists the selected microphone device for future recordings. - */ const persistMicrophoneDeviceId = useCallback((deviceId: string | undefined) => { setMicrophoneDeviceId(deviceId); void window.electronAPI.setRecordingPreferences({ microphoneDeviceId: deviceId }); }, []); - /** - * Persists the selected microphone noise suppression mode for future recordings. - */ const persistNoiseSuppressionMode = useCallback((mode: NoiseSuppressionMode) => { const normalizedMode = normalizeNoiseSuppressionMode(mode); setNoiseSuppressionModeState(normalizedMode); @@ -1465,9 +1342,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { }); }, []); - /** - * Persists whether system audio capture is enabled for future recordings. - */ const persistSystemAudioEnabled = useCallback((enabled: boolean) => { setSystemAudioEnabled(enabled); void window.electronAPI.setRecordingPreferences({ systemAudioEnabled: enabled }); @@ -1542,9 +1416,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { }; }, [cleanupCapturedMedia, recoverNativeRecordingSession]); - /** - * Starts the selected native or browser recording pipeline. - */ const startRecording = async () => { if (startInFlight.current) { return; @@ -1552,9 +1423,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { let hudSourceSelectionActive = false; - /** - * Tells the HUD window whether a native source picker is currently active. - */ const setHudSourceSelectionActive = (active: boolean) => { if (hudSourceSelectionActive === active) { return; @@ -1834,9 +1702,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { if (wantsAudioCapture) { let screenMediaStream: MediaStream; - /** - * Acquires a Linux portal stream with optional system audio in a single chooser flow. - */ const acquireLinuxPortalStream = (withAudio: boolean) => mediaDevices.getDisplayMedia({ audio: withAudio, @@ -2144,9 +2009,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }; - /** - * Pauses the active native or browser recording and synchronized sidecar recorders. - */ const pauseRecording = useCallback(() => { if (!recording || paused) return; if (nativeScreenRecording.current) { @@ -2193,9 +2055,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, [markRecordingPaused, pauseMicFallbackRecorder, paused, recording]); - /** - * Resumes the active native or browser recording and synchronized sidecar recorders. - */ const resumeRecording = useCallback(() => { if (!recording || !paused) return; if (nativeScreenRecording.current) { @@ -2242,9 +2101,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, [markRecordingResumed, paused, recording, resumeMicFallbackRecorder]); - /** - * Cancels the active recording and discards any partial media outputs. - */ const cancelRecording = useCallback(() => { if (!recording) return; setPaused(false); @@ -2292,9 +2148,6 @@ export function useScreenRecorder(): UseScreenRecorderReturn { } }, [cleanupCapturedMedia, markRecordingResumed, recording]); - /** - * Toggles between starting a new recording and stopping the active one. - */ const toggleRecording = async () => { if (starting || countdownActive || finalizing) { return; diff --git a/src/lib/audio/noiseSuppressedStream.ts b/src/lib/audio/noiseSuppressedStream.ts index d2ba67b2c..1f847b8ea 100644 --- a/src/lib/audio/noiseSuppressedStream.ts +++ b/src/lib/audio/noiseSuppressedStream.ts @@ -10,9 +10,6 @@ const DEFAULT_SAMPLE_RATE = 48000; const FRAME_BUDGET_MS = 12; const LONG_FRAME_LOG_INTERVAL_MS = 5000; -/** - * Processed microphone stream plus lifecycle metadata for the active suppressor. - */ export type NoiseSuppressedMicrophoneStream = { stream: MediaStream; activeMode: NoiseSuppressionMode; @@ -21,9 +18,6 @@ export type NoiseSuppressedMicrophoneStream = { destroy(): void; }; -/** - * Localized warning payload emitted when suppression falls back or becomes unavailable. - */ export type NoiseSuppressionWarning = | { key: "recording.noiseSuppressionUnavailableWarning"; @@ -33,9 +27,6 @@ export type NoiseSuppressionWarning = params: { mode: string }; }; -/** - * Wraps a microphone MediaStream with Web Audio noise suppression when enabled. - */ export async function createNoiseSuppressedMicrophoneStream({ sourceStream, mode, @@ -111,9 +102,6 @@ export async function createNoiseSuppressedMicrophoneStream({ type NoiseSuppressionWorkletReadySelection = Omit; -/** - * Initializes the audio worklet processor and waits for its selected suppressor mode. - */ async function initializeNoiseSuppressionWorklet( processor: AudioWorkletNode, config: { @@ -160,9 +148,6 @@ async function initializeNoiseSuppressionWorklet( }); } -/** - * Converts suppressor initialization warnings into the localized warning shape used by the UI. - */ function reportWarnings( selection: Pick, onWarning?: (warning: NoiseSuppressionWarning) => void, diff --git a/src/lib/audio/noiseSuppression.ts b/src/lib/audio/noiseSuppression.ts index ffc2d0120..59b6bcbf5 100644 --- a/src/lib/audio/noiseSuppression.ts +++ b/src/lib/audio/noiseSuppression.ts @@ -1,32 +1,14 @@ import { loadSpeexModule, SpeexPreprocessor } from "@sapphi-red/speex-preprocess-wasm"; import { Rnnoise } from "@shiguredo/rnnoise-wasm"; -/** - * Available microphone noise suppression engines and the explicit passthrough mode. - */ export type NoiseSuppressionMode = "rnnoise" | "speex" | "disabled"; -/** - * Common lifecycle and frame-processing contract for microphone denoisers. - */ export interface NoiseSuppressor { - /** - * Allocates any native or WASM state needed before processing audio frames. - */ initialize(): Promise; - /** - * Applies suppression to a single audio callback buffer. - */ processAudioFrame(frame: Float32Array): Float32Array; - /** - * Releases resources held by the suppressor. - */ destroy(): void; } -/** - * Result of choosing and initializing a suppressor, including fallback diagnostics. - */ export type NoiseSuppressionSelection = { requestedMode: NoiseSuppressionMode; activeMode: NoiseSuppressionMode; @@ -34,23 +16,14 @@ export type NoiseSuppressionSelection = { warnings: string[]; }; -/** - * Default denoiser used for new and invalid persisted recording preferences. - */ export const DEFAULT_NOISE_SUPPRESSION_MODE: NoiseSuppressionMode = "rnnoise"; -/** - * Supported persisted values for microphone noise suppression. - */ export const NOISE_SUPPRESSION_MODES = new Set([ "rnnoise", "speex", "disabled", ]); -/** - * Converts a persisted or user-provided value into a supported noise suppression mode. - */ export function normalizeNoiseSuppressionMode(value?: string | null): NoiseSuppressionMode { const normalized = value?.trim().toLowerCase(); return normalized && NOISE_SUPPRESSION_MODES.has(normalized as NoiseSuppressionMode) @@ -58,35 +31,20 @@ export function normalizeNoiseSuppressionMode(value?: string | null): NoiseSuppr : DEFAULT_NOISE_SUPPRESSION_MODE; } -/** - * Pass-through suppressor used when microphone noise suppression is explicitly disabled. - */ export class DisabledNoiseSuppressor implements NoiseSuppressor { - /** - * Completes setup for the disabled suppressor. - */ async initialize() { console.info("[NoiseSuppression] Disabled."); } - /** - * Returns the input audio frame unchanged. - */ processAudioFrame(frame: Float32Array) { return frame; } - /** - * Releases the disabled suppressor lifecycle. - */ destroy() { console.info("[NoiseSuppression] Disabled cleanup complete."); } } -/** - * Applies RNNoise denoising to microphone frames while preserving output timing. - */ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { private rnnoise: Awaited> | null = null; private state: ReturnType< @@ -95,9 +53,6 @@ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { private remainder: Float32Array = new Float32Array(0); private queuedOutput: Float32Array = new Float32Array(0); - /** - * Loads the RNNoise WASM module and creates a denoise state. - */ async initialize() { console.info("[NoiseSuppression] Initializing RNNoise."); this.rnnoise = await Rnnoise.load(); @@ -107,9 +62,6 @@ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { }); } - /** - * Processes complete RNNoise frames and buffers partial input between callbacks. - */ processAudioFrame(frame: Float32Array) { if (!this.rnnoise || !this.state) { throw new Error("RNNoise suppressor has not been initialized."); @@ -140,9 +92,6 @@ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { return output; } - /** - * Destroys RNNoise state and clears buffered audio. - */ destroy() { this.state?.destroy(); this.state = null; @@ -153,9 +102,6 @@ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { } } -/** - * Concatenates two Float32 buffers without mutating either source buffer. - */ function appendFloat32Arrays(left: Float32Array, right: Float32Array) { if (left.length === 0) { return right.slice(); @@ -170,9 +116,6 @@ function appendFloat32Arrays(left: Float32Array, right: Float32Array) { return combined; } -/** - * Applies Speex preprocessor denoising to microphone frames. - */ export class SpeexNoiseSuppressor implements NoiseSuppressor { private preprocessor: SpeexPreprocessor | null = null; @@ -181,9 +124,6 @@ export class SpeexNoiseSuppressor implements NoiseSuppressor { private readonly sampleRate: number, ) {} - /** - * Loads the Speex WASM module and configures denoise-only preprocessing. - */ async initialize() { console.info("[NoiseSuppression] Initializing Speex.", { frameSize: this.frameSize, @@ -198,9 +138,6 @@ export class SpeexNoiseSuppressor implements NoiseSuppressor { console.info("[NoiseSuppression] Speex initialized."); } - /** - * Processes full Speex-sized chunks and leaves any incomplete trailing samples untouched. - */ processAudioFrame(frame: Float32Array) { if (!this.preprocessor) { throw new Error("Speex suppressor has not been initialized."); @@ -217,9 +154,6 @@ export class SpeexNoiseSuppressor implements NoiseSuppressor { return frame; } - /** - * Releases the Speex preprocessor instance. - */ destroy() { this.preprocessor?.destroy(); this.preprocessor = null; @@ -227,18 +161,12 @@ export class SpeexNoiseSuppressor implements NoiseSuppressor { } } -/** - * Optional factories used by tests and callers that need custom suppressor implementations. - */ export type NoiseSuppressorFactoryDeps = { createRnnoise?: () => NoiseSuppressor; createSpeex?: () => NoiseSuppressor; createDisabled?: () => NoiseSuppressor; }; -/** - * Initializes the requested suppressor and falls back to compatible alternatives when needed. - */ export async function createNoiseSuppressorWithFallback({ mode, frameSize, diff --git a/src/lib/audio/noiseSuppressionWorklet.ts b/src/lib/audio/noiseSuppressionWorklet.ts index 8c810f5d7..fc734f5a3 100644 --- a/src/lib/audio/noiseSuppressionWorklet.ts +++ b/src/lib/audio/noiseSuppressionWorklet.ts @@ -26,9 +26,6 @@ type NoiseSuppressionWorkletMessage = } | { type: "destroy" }; -/** - * Runs microphone noise suppression off the main thread inside an AudioWorklet. - */ class NoiseSuppressionProcessor extends AudioWorkletProcessor { private droppedFrames = 0; private frameBudgetMs = 12; @@ -53,9 +50,6 @@ class NoiseSuppressionProcessor extends AudioWorkletProcessor { }; } - /** - * Initializes the selected suppressor after receiving configuration from the main audio graph. - */ private async initialize({ mode, frameSize, @@ -92,9 +86,6 @@ class NoiseSuppressionProcessor extends AudioWorkletProcessor { } } - /** - * Streams audio through the suppressor while preserving AudioWorklet output timing. - */ process(inputs: Float32Array[][], outputs: Float32Array[][]) { const input = inputs[0]?.[0]; const output = outputs[0]?.[0]; @@ -138,9 +129,6 @@ class NoiseSuppressionProcessor extends AudioWorkletProcessor { return true; } - /** - * Processes a complete internal frame and queues it for the next output callback. - */ private processBufferedFrame() { if (!this.selection) { return; @@ -181,9 +169,6 @@ class NoiseSuppressionProcessor extends AudioWorkletProcessor { } } - /** - * Releases suppressor state and clears queued audio when the worklet is torn down. - */ private destroy() { this.selection?.suppressor.destroy(); this.selection = null; @@ -192,9 +177,6 @@ class NoiseSuppressionProcessor extends AudioWorkletProcessor { } } -/** - * Concatenates two Float32 buffers without mutating either source buffer. - */ function appendFloat32Arrays( left: Float32Array, right: Float32Array, From bfaacb015ae09c9f55cb11ca96f3d339f7622f13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Guimar=C3=A3es=20Pinto?= Date: Tue, 21 Jul 2026 23:28:00 -0400 Subject: [PATCH 8/8] Handle noise suppression setup failures --- src/lib/audio/noiseSuppressedStream.test.ts | 134 ++++++++++++++++++++ src/lib/audio/noiseSuppressedStream.ts | 124 ++++++++++++++---- src/lib/audio/noiseSuppression.ts | 4 +- src/lib/audio/noiseSuppressionWorklet.ts | 7 +- 4 files changed, 239 insertions(+), 30 deletions(-) create mode 100644 src/lib/audio/noiseSuppressedStream.test.ts diff --git a/src/lib/audio/noiseSuppressedStream.test.ts b/src/lib/audio/noiseSuppressedStream.test.ts new file mode 100644 index 000000000..c48ef2aa4 --- /dev/null +++ b/src/lib/audio/noiseSuppressedStream.test.ts @@ -0,0 +1,134 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { createNoiseSuppressedMicrophoneStream } from "./noiseSuppressedStream"; + +vi.mock("./noiseSuppressionWorklet.ts?worker&url", () => ({ + default: "mock-noise-suppression-worklet-url", +})); + +type FakeMediaStreamTrack = MediaStreamTrack & { + stop: ReturnType; +}; + +type FakeMediaStream = MediaStream & { + getTracks: ReturnType FakeMediaStreamTrack[]>>; +}; + +type FakeAudioNode = { + connect: ReturnType; + disconnect: ReturnType; +}; + +const createdContexts: FakeAudioContext[] = []; +const createdProcessors: FakeAudioWorkletNode[] = []; +let addModule = vi.fn(); + +class FakeAudioContext { + readonly audioWorklet = { + addModule: (...args: unknown[]) => addModule(...args), + }; + readonly close = vi.fn().mockResolvedValue(undefined); + readonly sampleRate = 48000; + readonly sourceNode = createFakeAudioNode(); + readonly destinationNode = { + ...createFakeAudioNode(), + stream: createFakeMediaStream().stream, + }; + + constructor() { + createdContexts.push(this); + } + + createMediaStreamSource() { + return this.sourceNode; + } + + createMediaStreamDestination() { + return this.destinationNode; + } +} + +class FakeAudioWorkletNode { + readonly connect = vi.fn(); + readonly disconnect = vi.fn(); + readonly port = { + onmessage: null as ((event: MessageEvent) => void) | null, + postMessage: vi.fn(), + }; + + constructor() { + createdProcessors.push(this); + } +} + +function createFakeAudioNode(): FakeAudioNode { + return { + connect: vi.fn(), + disconnect: vi.fn(), + }; +} + +function createFakeMediaStream(trackCount = 1) { + const tracks = Array.from({ length: trackCount }, () => ({ + stop: vi.fn(), + })) as FakeMediaStreamTrack[]; + const stream = { + getTracks: vi.fn(() => tracks), + } as FakeMediaStream; + + return { stream, tracks }; +} + +beforeEach(() => { + addModule = vi.fn().mockResolvedValue(undefined); + createdContexts.length = 0; + createdProcessors.length = 0; + vi.stubGlobal("AudioContext", FakeAudioContext); + vi.stubGlobal("AudioWorkletNode", FakeAudioWorkletNode); +}); + +afterEach(() => { + vi.useRealTimers(); + vi.unstubAllGlobals(); +}); + +describe("createNoiseSuppressedMicrophoneStream", () => { + it("stops source tracks and closes the AudioContext when loading the worklet fails", async () => { + const { stream, tracks } = createFakeMediaStream(2); + addModule.mockRejectedValue(new Error("worklet blocked")); + + await expect( + createNoiseSuppressedMicrophoneStream({ + sourceStream: stream, + mode: "rnnoise", + }), + ).rejects.toThrow("worklet blocked"); + + expect(tracks[0].stop).toHaveBeenCalledTimes(1); + expect(tracks[1].stop).toHaveBeenCalledTimes(1); + expect(createdContexts[0].sourceNode.disconnect).toHaveBeenCalledTimes(1); + expect(createdContexts[0].close).toHaveBeenCalledTimes(1); + }); + + it("times out a nonresponsive worklet and runs setup cleanup", async () => { + vi.useFakeTimers(); + const { stream, tracks } = createFakeMediaStream(); + + const setup = createNoiseSuppressedMicrophoneStream({ + sourceStream: stream, + mode: "rnnoise", + }); + const rejection = expect(setup).rejects.toThrow( + "Noise suppression worklet initialization timed out.", + ); + await vi.advanceTimersByTimeAsync(5000); + + await rejection; + expect(createdProcessors[0].port.postMessage).toHaveBeenCalledWith( + expect.objectContaining({ type: "init" }), + ); + expect(createdProcessors[0].port.postMessage).toHaveBeenCalledWith({ type: "destroy" }); + expect(tracks[0].stop).toHaveBeenCalledTimes(1); + expect(createdContexts[0].sourceNode.disconnect).toHaveBeenCalledTimes(1); + expect(createdContexts[0].close).toHaveBeenCalledTimes(1); + }); +}); diff --git a/src/lib/audio/noiseSuppressedStream.ts b/src/lib/audio/noiseSuppressedStream.ts index 1f847b8ea..6f454b394 100644 --- a/src/lib/audio/noiseSuppressedStream.ts +++ b/src/lib/audio/noiseSuppressedStream.ts @@ -9,6 +9,7 @@ const PROCESSOR_BUFFER_SIZE = 1024; const DEFAULT_SAMPLE_RATE = 48000; const FRAME_BUDGET_MS = 12; const LONG_FRAME_LOG_INTERVAL_MS = 5000; +const WORKLET_READY_TIMEOUT_MS = 5000; export type NoiseSuppressedMicrophoneStream = { stream: MediaStream; @@ -55,24 +56,43 @@ export async function createNoiseSuppressedMicrophoneStream({ const source = context.createMediaStreamSource(sourceStream); const destination = context.createMediaStreamDestination(); const sampleRate = context.sampleRate || DEFAULT_SAMPLE_RATE; - await context.audioWorklet.addModule(noiseSuppressionWorkletUrl); - const processor = new AudioWorkletNode(context, "noise-suppression-processor", { - numberOfInputs: 1, - numberOfOutputs: 1, - outputChannelCount: [1], - }); - const selection = await initializeNoiseSuppressionWorklet(processor, { - mode: requestedMode, - frameSize: PROCESSOR_BUFFER_SIZE, - sampleRate, - frameBudgetMs: FRAME_BUDGET_MS, - longFrameLogIntervalMs: LONG_FRAME_LOG_INTERVAL_MS, - }); + let processor: AudioWorkletNode | null = null; + let selection: NoiseSuppressionWorkletReadySelection; + + try { + await context.audioWorklet.addModule(noiseSuppressionWorkletUrl); + processor = new AudioWorkletNode(context, "noise-suppression-processor", { + numberOfInputs: 1, + numberOfOutputs: 1, + outputChannelCount: [1], + }); + selection = await initializeNoiseSuppressionWorklet(processor, { + mode: requestedMode, + frameSize: PROCESSOR_BUFFER_SIZE, + sampleRate, + frameBudgetMs: FRAME_BUDGET_MS, + longFrameLogIntervalMs: LONG_FRAME_LOG_INTERVAL_MS, + }); + source.connect(processor); + processor.connect(destination); + } catch (error) { + cleanupFailedNoiseSuppressionSetup({ + context, + destinationStream: destination.stream, + processor, + source, + sourceStream, + }); + throw error; + } + + if (!processor) { + throw new Error("Noise suppression worklet processor was not created."); + } + const activeProcessor = processor; reportWarnings(selection, onWarning); - source.connect(processor); - processor.connect(destination); console.info("[NoiseSuppression] Microphone stream processing active.", { requestedMode, activeMode: selection.activeMode, @@ -86,8 +106,8 @@ export async function createNoiseSuppressedMicrophoneStream({ requestedMode, warnings: selection.warnings, destroy: () => { - processor.port.postMessage({ type: "destroy" }); - processor.disconnect(); + activeProcessor.port.postMessage({ type: "destroy" }); + activeProcessor.disconnect(); source.disconnect(); sourceStream.getTracks().forEach((track) => track.stop()); destination.stream.getTracks().forEach((track) => track.stop()); @@ -113,18 +133,43 @@ async function initializeNoiseSuppressionWorklet( }, ): Promise { return new Promise((resolve, reject) => { + let settled = false; + const readyTimeout = setTimeout(() => { + settled = true; + reject(new Error("Noise suppression worklet initialization timed out.")); + }, WORKLET_READY_TIMEOUT_MS); + + const settle = ( + callback: () => NoiseSuppressionWorkletReadySelection, + complete: (selection: NoiseSuppressionWorkletReadySelection) => void, + ) => { + if (settled) { + return; + } + settled = true; + clearTimeout(readyTimeout); + complete(callback()); + }; + processor.port.onmessage = (event) => { const message = event.data; if (message.type === "ready") { - resolve({ - requestedMode: message.requestedMode, - activeMode: message.activeMode, - warnings: message.warnings, - }); + settle( + () => ({ + requestedMode: message.requestedMode, + activeMode: message.activeMode, + warnings: message.warnings, + }), + resolve, + ); return; } if (message.type === "error") { - reject(new Error(message.error)); + if (!settled) { + settled = true; + clearTimeout(readyTimeout); + reject(new Error(message.error)); + } return; } if (message.type === "processing-error") { @@ -148,6 +193,39 @@ async function initializeNoiseSuppressionWorklet( }); } +function cleanupFailedNoiseSuppressionSetup({ + context, + destinationStream, + processor, + source, + sourceStream, +}: { + context: AudioContext; + destinationStream: MediaStream; + processor: AudioWorkletNode | null; + source: MediaStreamAudioSourceNode; + sourceStream: MediaStream; +}) { + try { + processor?.port.postMessage({ type: "destroy" }); + } catch { + // Best effort: preserve the original setup error. + } + try { + processor?.disconnect(); + } catch { + // Best effort: preserve the original setup error. + } + try { + source.disconnect(); + } catch { + // Best effort: preserve the original setup error. + } + sourceStream.getTracks().forEach((track) => track.stop()); + destinationStream.getTracks().forEach((track) => track.stop()); + context.close().catch(() => undefined); +} + function reportWarnings( selection: Pick, onWarning?: (warning: NoiseSuppressionWarning) => void, diff --git a/src/lib/audio/noiseSuppression.ts b/src/lib/audio/noiseSuppression.ts index 59b6bcbf5..be69e0d52 100644 --- a/src/lib/audio/noiseSuppression.ts +++ b/src/lib/audio/noiseSuppression.ts @@ -50,8 +50,8 @@ export class RnnoiseNoiseSuppressor implements NoiseSuppressor { private state: ReturnType< Awaited>["createDenoiseState"] > | null = null; - private remainder: Float32Array = new Float32Array(0); - private queuedOutput: Float32Array = new Float32Array(0); + private remainder: Float32Array = new Float32Array(0); + private queuedOutput: Float32Array = new Float32Array(0); async initialize() { console.info("[NoiseSuppression] Initializing RNNoise."); diff --git a/src/lib/audio/noiseSuppressionWorklet.ts b/src/lib/audio/noiseSuppressionWorklet.ts index fc734f5a3..ea5e765a1 100644 --- a/src/lib/audio/noiseSuppressionWorklet.ts +++ b/src/lib/audio/noiseSuppressionWorklet.ts @@ -34,7 +34,7 @@ class NoiseSuppressionProcessor extends AudioWorkletProcessor { private inputBufferOffset = 0; private lastLongFrameLogAt = 0; private longFrameLogIntervalMs = 5000; - private outputBuffer: Float32Array = new Float32Array(0); + private outputBuffer: Float32Array = new Float32Array(0); private sampleRate = 48000; private selection: NoiseSuppressionSelection | null = null; private scratchFrame = new Float32Array(1024); @@ -177,10 +177,7 @@ class NoiseSuppressionProcessor extends AudioWorkletProcessor { } } -function appendFloat32Arrays( - left: Float32Array, - right: Float32Array, -) { +function appendFloat32Arrays(left: Float32Array, right: Float32Array) { if (left.length === 0) { return right.slice(); }