make Discord's auto gain control toggle actually work

This commit is contained in:
Vendicated
2025-05-16 03:37:32 +02:00
parent fc16fc5404
commit b17fef93ba
4 changed files with 63 additions and 3 deletions
+51
View File
@@ -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);
};
+1
View File
@@ -16,3 +16,4 @@ import "./windowsTitleBar";
import "./streamerMode";
import "./windowMethods";
import "./hideDownloadAppsButton";
import "./fixAutoGainToggle";