From 2e21a54baeeda2e255682c4f9e363c23e0a51ca9 Mon Sep 17 00:00:00 2001 From: Kaitlyn <87152313+kaitlynkittyy@users.noreply.github.com> Date: Tue, 26 Sep 2023 20:04:32 -0400 Subject: [PATCH] WOAH SCREENAUDIO WORKS --- src/main/screenShare.ts | 5 +-- src/main/screenShareAudio.ts | 40 ------------------------ src/renderer/patches/index.ts | 1 + src/renderer/patches/screenShareAudio.ts | 39 +++++++++++++++++++++++ 4 files changed, 41 insertions(+), 44 deletions(-) delete mode 100644 src/main/screenShareAudio.ts create mode 100644 src/renderer/patches/screenShareAudio.ts diff --git a/src/main/screenShare.ts b/src/main/screenShare.ts index aebedfb..8cfe5b5 100644 --- a/src/main/screenShare.ts +++ b/src/main/screenShare.ts @@ -4,7 +4,6 @@ * Copyright (c) 2023 Vendicated and Vencord contributors */ -import { getAudioFromVirtmic } from "./screenShareAudio"; import { desktopCapturer, session, Streams } from "electron"; import type { StreamPick } from "renderer/components/ScreenSharePicker"; import { IpcEvents } from "shared/IpcEvents"; @@ -30,8 +29,7 @@ export function registerScreenShareHandler() { width: 176, height: 99 } - }).catch(() => null); - if (sources === null) return callback({}); + }); const isWayland = process.platform === "linux" && @@ -45,7 +43,6 @@ export function registerScreenShareHandler() { if (isWayland) { const video = data[0]; - getAudioFromVirtmic(); callback(video ? { video } : {}); return; } diff --git a/src/main/screenShareAudio.ts b/src/main/screenShareAudio.ts deleted file mode 100644 index ad27c3b..0000000 --- a/src/main/screenShareAudio.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { createVirtmic } from "./createVirtmic"; -export function getAudioFromVirtmic() { - const getAudioDevice = async (deviceName: string|undefined) => { - await new Promise(r => setTimeout(r, 1000)); - let devices = await navigator.mediaDevices.enumerateDevices(); - let audioDevice = devices.find(({ - label - }) => label === deviceName); - - return audioDevice; - }; - - const getDisplayMedia = async () => { - var id: string|undefined; - try { - let myDiscordAudioSink = await getAudioDevice('virtmic'); - id = myDiscordAudioSink?.deviceId; - } - catch (error) { - id = 'default'; - } - - const constraints = { - deviceId: { - exact: id - }, - autoGainControl: false, - echoCancellation: false, - noiseSuppression: false, - channelCount: 2 - }; - - await navigator.mediaDevices.getUserMedia({ - audio: true - }).then((MediaStream) => { - const audioTrack = MediaStream.getAudioTracks()[0]; - let captureSystemAudioStream = audioTrack.applyConstraints(constraints); - }); - }; -}; \ No newline at end of file diff --git a/src/renderer/patches/index.ts b/src/renderer/patches/index.ts index e33c00f..f371161 100644 --- a/src/renderer/patches/index.ts +++ b/src/renderer/patches/index.ts @@ -8,3 +8,4 @@ import "./spellCheck"; import "./platformClass"; import "./windowsTitleBar"; +import "./screenShareAudio"; \ No newline at end of file diff --git a/src/renderer/patches/screenShareAudio.ts b/src/renderer/patches/screenShareAudio.ts new file mode 100644 index 0000000..f5d5905 --- /dev/null +++ b/src/renderer/patches/screenShareAudio.ts @@ -0,0 +1,39 @@ +const original = navigator.mediaDevices.getDisplayMedia; +async function getVirtmic() { + const getAudioDevice = async (deviceName: string|undefined) => {; + let devices = await navigator.mediaDevices.enumerateDevices(); + let audioDevice = devices.find(({ + label + }) => label === deviceName); + console.log(audioDevice); + return audioDevice; + } + + var id: string|undefined; + try { + let myDiscordAudioSink = await getAudioDevice('virtmic'); + id = myDiscordAudioSink?.deviceId; + console.log(id, "connected"); + } + catch (error) { + id = 'default'; + console.log("virtmic failed to connect"); + } +return id; +}; +navigator.mediaDevices.getDisplayMedia = async function() { + const id = await getVirtmic(); + const stream = await original.apply(this); + + const audio = await navigator.mediaDevices.getUserMedia({ + audio: { + deviceId: { + exact: id + }, + autoGainControl: false, + echoCancellation: false, + noiseSuppression: false + } }); + audio.getAudioTracks().forEach(t => stream.addTrack(t)); + return stream; +} \ No newline at end of file