From b17fef93ba3873ed67074e89c3b100a6c72243a9 Mon Sep 17 00:00:00 2001 From: Vendicated Date: Fri, 16 May 2025 03:37:32 +0200 Subject: [PATCH] make Discord's auto gain control toggle actually work --- src/renderer/common.ts | 9 ++++ src/renderer/components/ScreenSharePicker.tsx | 5 +- src/renderer/patches/fixAutoGainToggle.ts | 51 +++++++++++++++++++ src/renderer/patches/index.ts | 1 + 4 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 src/renderer/common.ts create mode 100644 src/renderer/patches/fixAutoGainToggle.ts diff --git a/src/renderer/common.ts b/src/renderer/common.ts new file mode 100644 index 0000000..bd61bde --- /dev/null +++ b/src/renderer/common.ts @@ -0,0 +1,9 @@ +/* + * Vesktop, a desktop app aiming to give you a snappier Discord Experience + * Copyright (c) 2025 Vendicated and Vesktop contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { findStoreLazy } from "@vencord/types/webpack"; + +export const MediaEngineStore = findStoreLazy("MediaEngineStore"); diff --git a/src/renderer/components/ScreenSharePicker.tsx b/src/renderer/components/ScreenSharePicker.tsx index dbecfc6..009b78c 100644 --- a/src/renderer/components/ScreenSharePicker.tsx +++ b/src/renderer/components/ScreenSharePicker.tsx @@ -7,7 +7,7 @@ import "./screenSharePicker.css"; import { closeModal, Logger, Modals, ModalSize, openModal, useAwaiter } from "@vencord/types/utils"; -import { findStoreLazy, onceReady } from "@vencord/types/webpack"; +import { onceReady } from "@vencord/types/webpack"; import { Button, Card, @@ -21,6 +21,7 @@ import { } from "@vencord/types/webpack/common"; import { Node } from "@vencord/venmic"; import type { Dispatch, SetStateAction } from "react"; +import { MediaEngineStore } from "renderer/common"; import { addPatch } from "renderer/patches/shared"; import { State, useSettings, useVesktopState } from "renderer/settings"; import { classNameFactory, isLinux, isWindows } from "renderer/utils"; @@ -30,8 +31,6 @@ const StreamFps = ["15", "30", "60"] as const; const cl = classNameFactory("vcd-screen-picker-"); -const MediaEngineStore = findStoreLazy("MediaEngineStore"); - export type StreamResolution = (typeof StreamResolutions)[number]; export type StreamFps = (typeof StreamFps)[number]; diff --git a/src/renderer/patches/fixAutoGainToggle.ts b/src/renderer/patches/fixAutoGainToggle.ts new file mode 100644 index 0000000..e23c737 --- /dev/null +++ b/src/renderer/patches/fixAutoGainToggle.ts @@ -0,0 +1,51 @@ +/* + * Vesktop, a desktop app aiming to give you a snappier Discord Experience + * Copyright (c) 2025 Vendicated and Vesktop contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import { Logger } from "@vencord/types/utils"; +import { MediaEngineStore } from "renderer/common"; + +const logger = new Logger("FixAutoGain"); + +function fixTrackConstraints(constraint: MediaTrackConstraints) { + const target = constraint.advanced?.find(opt => Object.hasOwn(opt, "autoGainControl")) ?? constraint; + + target.autoGainControl = MediaEngineStore.getAutomaticGainControl(); +} + +function fixStreamConstraints(constraints: MediaStreamConstraints | undefined) { + if (!constraints?.audio) return; + + if (typeof constraints.audio !== "object") { + constraints.audio = {}; + } + + fixTrackConstraints(constraints.audio); +} + +const originalGetUserMedia = navigator.mediaDevices.getUserMedia; +navigator.mediaDevices.getUserMedia = function (constraints) { + try { + fixStreamConstraints(constraints); + logger.debug("Fixed getUserMedia constraints", constraints); + } catch (e) { + logger.error("Failed to fix getUserMedia constraints", e); + } + + return originalGetUserMedia.call(this, constraints); +}; + +const originalApplyConstraints = MediaStreamTrack.prototype.applyConstraints; +MediaStreamTrack.prototype.applyConstraints = function (constraints) { + if (constraints) { + try { + fixTrackConstraints(constraints); + logger.debug("Fixed applyConstraints constraints", constraints); + } catch (e) { + logger.error("Failed to fix applyConstraints constraints", e); + } + } + return originalApplyConstraints.call(this, constraints); +}; diff --git a/src/renderer/patches/index.ts b/src/renderer/patches/index.ts index 0bb3aeb..fc3e414 100644 --- a/src/renderer/patches/index.ts +++ b/src/renderer/patches/index.ts @@ -16,3 +16,4 @@ import "./windowsTitleBar"; import "./streamerMode"; import "./windowMethods"; import "./hideDownloadAppsButton"; +import "./fixAutoGainToggle";