mirror of
https://github.com/smartfrigde/armcord.git
synced 2024-08-14 23:56:58 +00:00
Add disable autogain
This commit is contained in:
parent
dd79ad624c
commit
1f369dae11
7 changed files with 114 additions and 1 deletions
|
@ -47,6 +47,8 @@
|
|||
"settings-prfmMode-desc": "Performance mode is an experimental function that may either increase responsiveness and performance of\n ArmCord or... decrease it. Please try every option and see which fits you the best.",
|
||||
"settings-prfmMode-performance": "Performance",
|
||||
"settings-prfmMode-battery": "Battery",
|
||||
"settings-disableAutogain": "Disable autogain",
|
||||
"settings-disableAutogain-desc": "Disables autogain.",
|
||||
"settings-trayIcon": "Tray icon",
|
||||
"settings-trayIcon-desc": "Set the icon which will appear in tray menu.",
|
||||
"settings-trayIcon-dynamic": "Dynamic",
|
||||
|
|
94
src/content/js/disableAutogain.js
Normal file
94
src/content/js/disableAutogain.js
Normal file
|
@ -0,0 +1,94 @@
|
|||
// MIT License
|
||||
|
||||
// Copyright (c) 2021 Joseph Watts
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
function setLegacyChromeConstraint(constraint, name, value) {
|
||||
if (constraint.mandatory && name in constraint.mandatory) {
|
||||
constraint.mandatory[name] = value;
|
||||
return;
|
||||
}
|
||||
if (constraint.optional) {
|
||||
const element = constraint.optional.find((opt) => name in opt);
|
||||
if (element) {
|
||||
element[name] = value;
|
||||
return;
|
||||
}
|
||||
}
|
||||
// `mandatory` options throw errors for unknown keys, so avoid that by
|
||||
// setting it under optional.
|
||||
if (!constraint.optional) {
|
||||
constraint.optional = [];
|
||||
}
|
||||
constraint.optional.push({[name]: value});
|
||||
}
|
||||
function setConstraint(constraint, name, value) {
|
||||
if (constraint.advanced) {
|
||||
const element = constraint.advanced.find((opt) => name in opt);
|
||||
if (element) {
|
||||
element[name] = value;
|
||||
return;
|
||||
}
|
||||
}
|
||||
constraint[name] = value;
|
||||
}
|
||||
function disableAutogain(constraints) {
|
||||
console.log("Automatically unsetting gain!", constraints);
|
||||
if (constraints && constraints.audio) {
|
||||
if (typeof constraints.audio !== "object") {
|
||||
constraints.audio = {};
|
||||
}
|
||||
if (constraints.audio.optional || constraints.audio.mandatory) {
|
||||
setLegacyChromeConstraint(constraints.audio, "googAutoGainControl", false);
|
||||
setLegacyChromeConstraint(constraints.audio, "googAutoGainControl2", false);
|
||||
} else {
|
||||
setConstraint(constraints.audio, "autoGainControl", false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function patchFunction(object, name, createNewFunction) {
|
||||
if (name in object) {
|
||||
var original = object[name];
|
||||
object[name] = createNewFunction(original);
|
||||
}
|
||||
}
|
||||
|
||||
patchFunction(navigator.mediaDevices, "getUserMedia", function (original) {
|
||||
return function getUserMedia(constraints) {
|
||||
disableAutogain(constraints);
|
||||
return original.call(this, constraints);
|
||||
};
|
||||
});
|
||||
function patchDeprecatedGetUserMedia(original) {
|
||||
return function getUserMedia(constraints, success, error) {
|
||||
disableAutogain(constraints);
|
||||
return original.call(this, constraints, success, error);
|
||||
};
|
||||
}
|
||||
patchFunction(navigator, "getUserMedia", patchDeprecatedGetUserMedia);
|
||||
patchFunction(navigator, "mozGetUserMedia", patchDeprecatedGetUserMedia);
|
||||
patchFunction(navigator, "webkitGetUserMedia", patchDeprecatedGetUserMedia);
|
||||
patchFunction(MediaStreamTrack.prototype, "applyConstraints", function (original) {
|
||||
return function applyConstraints(constraints) {
|
||||
disableAutogain(constraints);
|
||||
return original.call(this, constraints);
|
||||
};
|
||||
});
|
||||
console.log("Disable Autogain by Joey Watts!", navigator.mediaDevices.getUserMedia);
|
|
@ -156,6 +156,7 @@
|
|||
automaticPatches: false,
|
||||
performanceMode: "none",
|
||||
alternativePaste: false,
|
||||
disableAutogain: false,
|
||||
startMinimized: false,
|
||||
trayIcon: "default",
|
||||
mods: options.mod,
|
||||
|
@ -171,6 +172,7 @@
|
|||
minimizeToTray: true,
|
||||
automaticPatches: false,
|
||||
mobileMode: false,
|
||||
disableAutogain: false,
|
||||
mods: "none",
|
||||
startMinimized: false,
|
||||
alternativePaste: false,
|
||||
|
|
|
@ -121,6 +121,9 @@ export function registerIpc() {
|
|||
ipcMain.on("trayIcon", async (event, arg) => {
|
||||
event.returnValue = await getConfig("trayIcon");
|
||||
});
|
||||
ipcMain.on("disableAutogain", async (event, arg) => {
|
||||
event.returnValue = await getConfig("disableAutogain");
|
||||
});
|
||||
ipcMain.on("titlebar", (event, arg) => {
|
||||
event.returnValue = customTitlebar;
|
||||
});
|
||||
|
|
|
@ -57,7 +57,9 @@ if (window.location.href.indexOf("splash.html") > -1) {
|
|||
});
|
||||
})();
|
||||
`);
|
||||
|
||||
if (ipcRenderer.sendSync("disableAutogain")) {
|
||||
addScript(fs.readFileSync(path.join(__dirname, "../", "/content/js/disableAutogain.js"), "utf8"));
|
||||
}
|
||||
addScript(fs.readFileSync(path.join(__dirname, "../", "/content/js/rpc.js"), "utf8"));
|
||||
const cssPath = path.join(__dirname, "../", "/content/css/discord.css");
|
||||
addStyle(fs.readFileSync(cssPath, "utf8"));
|
||||
|
|
|
@ -96,6 +96,14 @@
|
|||
</div>
|
||||
<br />
|
||||
|
||||
<div class="switch acAutogain">
|
||||
<label class="header" data-string="settings-disableAutogain"></label>
|
||||
<input id="disableAutogain" class="tgl tgl-light left" data-setting="disableAutogain" type="checkbox" />
|
||||
<label class="tgl-btn left" for="disableAutogain"></label>
|
||||
<p class="description" data-string="settings-disableAutogain-desc"></p>
|
||||
</div>
|
||||
<br />
|
||||
|
||||
<div class="switch acChannel">
|
||||
<select name="channel" data-setting="channel" class="left dropdown">
|
||||
<option value="stable" selected>Stable</option>
|
||||
|
|
|
@ -50,6 +50,7 @@ export function setup() {
|
|||
skipSplash: false,
|
||||
inviteWebsocket: true,
|
||||
startMinimized: false,
|
||||
disableAutogain: false,
|
||||
mobileMode: false,
|
||||
trayIcon: "default",
|
||||
doneSetup: false
|
||||
|
@ -247,6 +248,7 @@ export interface Settings {
|
|||
performanceMode: string;
|
||||
startMinimized: boolean;
|
||||
inviteWebsocket: boolean;
|
||||
disableAutogain: boolean;
|
||||
trayIcon: string;
|
||||
doneSetup: boolean;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue