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