added platform checks and error handling when virtmic is not present

This commit is contained in:
Kaitlyn 2023-09-26 23:10:36 -04:00
parent 19c4ea2524
commit ba83bf6ff7
2 changed files with 45 additions and 35 deletions

View file

@ -1,36 +1,45 @@
const original = navigator.mediaDevices.getDisplayMedia; import { isLinux } from "../utils";
async function getVirtmic() { if (isLinux) {
const getAudioDevice = async (deviceName: string|undefined) => {; const original = navigator.mediaDevices.getDisplayMedia;
let devices = await navigator.mediaDevices.enumerateDevices(); async function getVirtmic() {
let audioDevice = devices.find(({ const getAudioDevice = async (deviceName: string|undefined) => {;
label let devices = await navigator.mediaDevices.enumerateDevices();
}) => label === deviceName); let audioDevice = devices.find(({
return audioDevice; label
} }) => label === deviceName);
return audioDevice;
}
var id: string|undefined; var id: string|undefined;
try { try {
let myDiscordAudioSink = await getAudioDevice('virtmic'); let myDiscordAudioSink = await getAudioDevice('virtmic');
id = myDiscordAudioSink?.deviceId; id = myDiscordAudioSink?.deviceId;
} }
catch (error) { catch (error) {
id = 'default'; id = 'error';
} }
return id; 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));
} else {
const audio = await navigator.mediaDevices.getUserMedia({ audio: false });
};
return stream;
};
}; };
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;
}

View file

@ -17,3 +17,4 @@ const { platform } = navigator;
export const isWindows = platform.startsWith("Win"); export const isWindows = platform.startsWith("Win");
export const isMac = platform.startsWith("Mac"); export const isMac = platform.startsWith("Mac");
export const isLinux = platform.startsWith("Linux");