diff --git a/sundynix-desktop/build/darwin/Info.dev.plist b/sundynix-desktop/build/darwin/Info.dev.plist index 1e4a765..0822f7e 100644 --- a/sundynix-desktop/build/darwin/Info.dev.plist +++ b/sundynix-desktop/build/darwin/Info.dev.plist @@ -27,6 +27,8 @@ NSAllowsLocalNetworking + NSMicrophoneUsageDescription + JARVIS 语音助手需要麦克风来听你说话。 NSHighResolutionCapable true NSHumanReadableCopyright diff --git a/sundynix-desktop/build/darwin/Info.plist b/sundynix-desktop/build/darwin/Info.plist index df3c8d9..53ad724 100644 --- a/sundynix-desktop/build/darwin/Info.plist +++ b/sundynix-desktop/build/darwin/Info.plist @@ -22,6 +22,8 @@ 0.1.1 LSMinimumSystemVersion 12.0.0 + NSMicrophoneUsageDescription + JARVIS 语音助手需要麦克风来听你说话。 NSHighResolutionCapable true NSHumanReadableCopyright diff --git a/sundynix-desktop/frontend/src/lib/voice.ts b/sundynix-desktop/frontend/src/lib/voice.ts index 0e0d54d..cc4b4df 100644 --- a/sundynix-desktop/frontend/src/lib/voice.ts +++ b/sundynix-desktop/frontend/src/lib/voice.ts @@ -196,6 +196,11 @@ export class VoiceClient { private async startMic(): Promise { if (this.micNode) return; + // WKWebView(Wails 原生壳)等非安全上下文里 navigator.mediaDevices 可能未暴露—— + // 直接调用会抛 "undefined is not an object" 崩掉。先探测,给出可读提示而非崩溃。 + if (!navigator.mediaDevices?.getUserMedia) { + throw new Error("此窗口暂不支持麦克风(原生壳需授权/安全上下文)。用浏览器打开 localhost:5173 可直接说话。"); + } const stream = await navigator.mediaDevices.getUserMedia({ audio: { channelCount: 1, echoCancellation: true, noiseSuppression: true }, });