63 lines
2.2 KiB
JavaScript
63 lines
2.2 KiB
JavaScript
|
// ==UserScript==
|
||
|
// @name Screenshare with Audio
|
||
|
// @namespace https://github.com/edisionnano
|
||
|
// @version 0.4
|
||
|
// @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,
|
||
|
});
|
||
|
let devices = await navigator.mediaDevices.enumerateDevices();
|
||
|
let audioDevice = devices.find(({ label }) => label === nameOfAudioDevice);
|
||
|
return audioDevice;
|
||
|
};
|
||
|
|
||
|
const getDisplayMedia = async (...args) => {
|
||
|
var id;
|
||
|
try {
|
||
|
let myDiscordAudioSink = await getAudioDevice(
|
||
|
"discord-screenaudio-virtmic"
|
||
|
);
|
||
|
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(...args);
|
||
|
gdm.addTrack(track);
|
||
|
return gdm;
|
||
|
};
|
||
|
navigator.mediaDevices.getDisplayMedia = getDisplayMedia;
|