fix microphone permission in build

This commit is contained in:
Siddharth
2026-03-08 14:07:42 -07:00
parent 991727d1c5
commit 7833dee014
3 changed files with 37 additions and 2 deletions
+4 -1
View File
@@ -28,6 +28,7 @@
],
"mac": {
"hardenedRuntime": false,
"target": [
{
"target": "dmg",
@@ -38,7 +39,9 @@
"artifactName": "${productName}-Mac-${arch}-${version}-Installer.${ext}",
"extendInfo": {
"NSAudioCaptureUsageDescription": "OpenScreen needs audio capture permission to record system audio.",
"NSCameraUseContinuityCameraDeviceType": true
"NSMicrophoneUsageDescription": "OpenScreen needs microphone access to record voice audio.",
"NSCameraUseContinuityCameraDeviceType": true,
"com.apple.security.device.audio-input": true
}
},
"linux": {
+30 -1
View File
@@ -1,7 +1,17 @@
import fs from "node:fs/promises";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { app, BrowserWindow, dialog, ipcMain, Menu, nativeImage, Tray } from "electron";
import {
app,
BrowserWindow,
dialog,
ipcMain,
Menu,
nativeImage,
session,
systemPreferences,
Tray,
} from "electron";
import { registerIpcHandlers } from "./ipc/handlers";
import { createEditorWindow, createHudOverlayWindow, createSourceSelectorWindow } from "./windows";
@@ -291,6 +301,25 @@ app.on("activate", () => {
// Register all IPC handlers when app is ready
app.whenReady().then(async () => {
// Allow microphone/media permission checks
session.defaultSession.setPermissionCheckHandler((_webContents, permission) => {
const allowed = ["media", "audioCapture", "microphone"];
return allowed.includes(permission);
});
session.defaultSession.setPermissionRequestHandler((_webContents, permission, callback) => {
const allowed = ["media", "audioCapture", "microphone"];
callback(allowed.includes(permission));
});
// Request microphone permission from macOS
if (process.platform === "darwin") {
const micStatus = systemPreferences.getMediaAccessStatus("microphone");
if (micStatus !== "granted") {
await systemPreferences.askForMediaAccess("microphone");
}
}
// Listen for HUD overlay quit event (macOS only)
ipcMain.on("hud-overlay-close", () => {
app.quit();
+3
View File
@@ -39,6 +39,9 @@ export function useAudioLevelMeter(options: AudioLevelMeterOptions) {
streamRef.current = stream;
const audioContext = new AudioContext();
if (audioContext.state === "suspended") {
await audioContext.resume();
}
audioContextRef.current = audioContext;
const analyser = audioContext.createAnalyser();