mirror of
https://github.com/smartfrigde/armcord.git
synced 2024-08-14 23:56:58 +00:00
fix; wayland audio share
This commit is contained in:
parent
e1e472bde3
commit
4c1aeef220
9 changed files with 7 additions and 121 deletions
|
@ -13,9 +13,6 @@
|
|||
.acMobileMode {
|
||||
height: 11em !important;
|
||||
}
|
||||
.acAltPaste {
|
||||
height: 11em !important;
|
||||
}
|
||||
.acChannel {
|
||||
height: 21em !important;
|
||||
}
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
navigator.mediaDevices.getDisplayMedia = getDisplayMedia;
|
||||
// ==UserScript==
|
||||
// @name Screenshare with Audio
|
||||
// @namespace https://github.com/edisionnano
|
||||
// @version 0.4
|
||||
// @updateURL https://openuserjs.org/meta/samantas5855/Screenshare_with_Audio.meta.js
|
||||
// @description Screenshare with Audio on Discord
|
||||
// @author Guest271314 and Samantas5855
|
||||
// @match https://*.discord.com/*
|
||||
// @icon https://www.google.com/s2/favicons?domain=discord.com
|
||||
// @grant none
|
||||
// @license MIT
|
||||
// ==/UserScript==
|
||||
|
||||
/* jshint esversion: 8 */
|
||||
|
||||
navigator.mediaDevices.chromiumGetDisplayMedia = navigator.mediaDevices.getDisplayMedia;
|
||||
|
||||
const getAudioDevice = async (nameOfAudioDevice) => {
|
||||
await navigator.mediaDevices.getUserMedia({
|
||||
audio: true
|
||||
});
|
||||
await new Promise((r) => setTimeout(r, 1000));
|
||||
let devices = await navigator.mediaDevices.enumerateDevices();
|
||||
let audioDevice = devices.find(({label}) => label === nameOfAudioDevice);
|
||||
return audioDevice;
|
||||
};
|
||||
|
||||
const getDisplayMedia = async () => {
|
||||
var id;
|
||||
try {
|
||||
let myDiscordAudioSink = await getAudioDevice("screenshareAudio");
|
||||
id = myDiscordAudioSink.deviceId;
|
||||
} catch (error) {
|
||||
id = "default";
|
||||
}
|
||||
let captureSystemAudioStream = await navigator.mediaDevices.getUserMedia({
|
||||
audio: {
|
||||
// We add our audio constraints here, to get a list of supported constraints use navigator.mediaDevices.getSupportedConstraints();
|
||||
// We must capture a microphone, we use default since its the only deviceId that is the same for every Chromium user
|
||||
deviceId: {
|
||||
exact: id
|
||||
},
|
||||
// We want auto gain control, noise cancellation and noise suppression disabled so that our stream won't sound bad
|
||||
autoGainControl: false,
|
||||
echoCancellation: false,
|
||||
noiseSuppression: false
|
||||
// By default Chromium sets channel count for audio devices to 1, we want it to be stereo in case we find a way for Discord to accept stereo screenshare too
|
||||
//channelCount: 2,
|
||||
// You can set more audio constraints here, bellow are some examples
|
||||
//latency: 0,
|
||||
//sampleRate: 48000,
|
||||
//sampleSize: 16,
|
||||
//volume: 1.0
|
||||
}
|
||||
});
|
||||
let [track] = captureSystemAudioStream.getAudioTracks();
|
||||
const gdm = await navigator.mediaDevices.chromiumGetDisplayMedia({
|
||||
video: true,
|
||||
audio: true
|
||||
});
|
||||
gdm.addTrack(track);
|
||||
return gdm;
|
||||
};
|
||||
navigator.mediaDevices.getDisplayMedia = getDisplayMedia;
|
27
src/menu.ts
27
src/menu.ts
|
@ -12,33 +12,6 @@ function paste(contents: any): void {
|
|||
contents.paste();
|
||||
}
|
||||
export async function setMenu(): Promise<void> {
|
||||
if ((await getConfig("alternativePaste")) == true) {
|
||||
mainWindow.on("focus", function () {
|
||||
console.log("[Window state manager] Focus");
|
||||
globalShortcut.register("CmdOrCtrl+V", function () {
|
||||
if (mainWindow.isFocused()) {
|
||||
paste(mainWindow.webContents);
|
||||
}
|
||||
});
|
||||
});
|
||||
mainWindow.on("show", function () {
|
||||
console.log("[Window state manager] Show");
|
||||
mainWindow.focus();
|
||||
globalShortcut.register("CmdOrCtrl+V", function () {
|
||||
if (mainWindow.isFocused()) {
|
||||
paste(mainWindow.webContents);
|
||||
}
|
||||
});
|
||||
});
|
||||
mainWindow.on("blur", function () {
|
||||
console.log("[Window state manager] Defocus");
|
||||
globalShortcut.unregister("CmdOrCtrl+V");
|
||||
});
|
||||
mainWindow.on("hide", function () {
|
||||
console.log("[Window state manager] Hide");
|
||||
globalShortcut.unregister("CmdOrCtrl+V");
|
||||
});
|
||||
}
|
||||
let template: Electron.MenuItemConstructorOptions[] = [
|
||||
{
|
||||
label: "ArmCord",
|
||||
|
|
|
@ -6,13 +6,6 @@ let capturerWindow: BrowserWindow;
|
|||
function registerCustomHandler(): void {
|
||||
session.defaultSession.setDisplayMediaRequestHandler(async (request, callback) => {
|
||||
console.log(request);
|
||||
// if (process.platform == "linux") {
|
||||
// let isAudio = isAudioSupported();
|
||||
// if (isAudio) {
|
||||
// console.log("audio supported");
|
||||
// getSinks();
|
||||
// }
|
||||
// }
|
||||
const sources = await desktopCapturer.getSources({
|
||||
types: ["screen", "window"]
|
||||
});
|
||||
|
@ -20,7 +13,7 @@ function registerCustomHandler(): void {
|
|||
if (process.platform === "linux" && process.env.XDG_SESSION_TYPE?.toLowerCase() === "wayland") {
|
||||
console.log("WebRTC Capturer detected, skipping window creation."); //assume webrtc capturer is used
|
||||
console.log({video: {id: sources[0].id, name: sources[0].name}});
|
||||
callback({video: {id: sources[0].id, name: sources[0].name}});
|
||||
callback({video: sources[0], audio: "loopbackWithMute"});
|
||||
} else {
|
||||
capturerWindow = new BrowserWindow({
|
||||
width: 800,
|
||||
|
@ -40,8 +33,9 @@ function registerCustomHandler(): void {
|
|||
//console.log(sources[id]);
|
||||
//console.log(id);
|
||||
capturerWindow.close();
|
||||
let result = {id, name, width: 9999, height: 9999};
|
||||
if (process.platform === "linux") {
|
||||
let result = {id, name};
|
||||
if (process.platform === "linux" || process.platform === "win32") {
|
||||
console.log("audio screenshare");
|
||||
callback({video: result, audio: "loopbackWithMute"});
|
||||
} else {
|
||||
callback({video: result});
|
||||
|
|
|
@ -100,14 +100,6 @@
|
|||
</div>
|
||||
<br />
|
||||
|
||||
<div class="switch acAltPaste">
|
||||
<label class="header" data-string="settings-altPaste"></label>
|
||||
<input id="alternativePaste" class="tgl tgl-light left" data-setting="alternativePaste" type="checkbox" />
|
||||
<label class="tgl-btn left" for="alternativePaste"></label>
|
||||
<p class="description" data-string="settings-altPaste-desc"></p>
|
||||
</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" />
|
||||
|
|
|
@ -143,7 +143,6 @@
|
|||
useLegacyCapturer: false,
|
||||
tray: /true/i.test(document.getElementById("tray").value),
|
||||
startMinimized: false,
|
||||
alternativePaste: false,
|
||||
performanceMode: "none",
|
||||
trayIcon: "default",
|
||||
inviteWebsocket: true,
|
||||
|
|
|
@ -58,7 +58,6 @@ export function setup(): void {
|
|||
armcordCSP: true,
|
||||
minimizeToTray: true,
|
||||
keybinds: [],
|
||||
alternativePaste: false,
|
||||
multiInstance: false,
|
||||
mods: "none",
|
||||
spellcheck: true,
|
||||
|
@ -139,11 +138,11 @@ export async function injectElectronFlags(): Promise<void> {
|
|||
switch (await getConfig("performanceMode")) {
|
||||
case "performance":
|
||||
console.log("Performance mode enabled");
|
||||
app.commandLine.appendSwitch(presets.performance);
|
||||
app.commandLine.appendArgument(presets.performance);
|
||||
break;
|
||||
case "battery":
|
||||
console.log("Battery mode enabled");
|
||||
app.commandLine.appendSwitch(presets.battery);
|
||||
app.commandLine.appendArgument(presets.battery);
|
||||
break;
|
||||
default:
|
||||
console.log("No performance modes set");
|
||||
|
@ -270,7 +269,6 @@ export interface Settings {
|
|||
channel: string;
|
||||
armcordCSP: boolean;
|
||||
minimizeToTray: boolean;
|
||||
alternativePaste: boolean;
|
||||
multiInstance: boolean;
|
||||
spellcheck: boolean;
|
||||
mods: string;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue