From bac269411a4597fab8c1361d30447e0c855103a3 Mon Sep 17 00:00:00 2001 From: kaitlynkitty <87152313+kaitlynkittyy@users.noreply.github.com> Date: Wed, 27 Sep 2023 19:56:39 -0400 Subject: [PATCH] add virtmic patch (#127) --- src/renderer/patches/index.ts | 1 + src/renderer/patches/screenShareAudio.ts | 41 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 src/renderer/patches/screenShareAudio.ts 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..eadc49a --- /dev/null +++ b/src/renderer/patches/screenShareAudio.ts @@ -0,0 +1,41 @@ +import { isLinux } from "../utils"; +if (isLinux) { + 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); + return audioDevice; + } + + var id: string|undefined; + try { + let vesktopAudioSink = await getAudioDevice('vesktop-virtmic'); + id = vesktopAudioSink?.deviceId; + } + catch (error) { + id = 'error'; + } + return id; + }; + navigator.mediaDevices.getDisplayMedia = async function() { + const id = await getVirtmic(); + const stream = await original.apply(this); + if (id !== 'error'){ + 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