diff --git a/electron/services/voiceTranscribeService.ts b/electron/services/voiceTranscribeService.ts index cc75828..107cbc5 100644 --- a/electron/services/voiceTranscribeService.ts +++ b/electron/services/voiceTranscribeService.ts @@ -273,8 +273,20 @@ export class VoiceTranscribeService { }) worker.on('error', (err: Error) => resolve({ success: false, error: String(err) })) - worker.on('exit', (code: number) => { - if (code !== 0) resolve({ success: false, error: `Worker exited with code ${code}` }) + worker.on('exit', (code: number | null, signal: string | null) => { + if (code === null || signal === 'SIGSEGV') { + + console.error(`[VoiceTranscribe] Worker 异常崩溃,信号: ${signal}。可能是由于底层 C++ 运行库在当前系统上发生段错误。`); + resolve({ + success: false, + error: 'SEGFAULT_ERROR' + }); + return; + } + + if (code !== 0) { + resolve({ success: false, error: `Worker exited with code ${code}` }); + } }) } catch (error) { diff --git a/src/pages/ChatPage.tsx b/src/pages/ChatPage.tsx index 9a49bdc..91ffe81 100644 --- a/src/pages/ChatPage.tsx +++ b/src/pages/ChatPage.tsx @@ -7345,6 +7345,12 @@ function MessageBubble({ const [voiceWaveform, setVoiceWaveform] = useState([]) const voiceAutoDecryptTriggered = useRef(false) + + const [systemAlert, setSystemAlert] = useState<{ + title: string; + message: React.ReactNode; + } | null>(null) + // 转账消息双方名称 const [transferPayerName, setTransferPayerName] = useState(undefined) const [transferReceiverName, setTransferReceiverName] = useState(undefined) @@ -8024,9 +8030,9 @@ function MessageBubble({ } const result = await window.electronAPI.chat.getVoiceTranscript( - session.username, - String(message.localId), - message.createTime + session.username, + String(message.localId), + message.createTime ) if (result.success) { @@ -8034,6 +8040,21 @@ function MessageBubble({ voiceTranscriptCache.set(voiceTranscriptCacheKey, transcriptText) setVoiceTranscript(transcriptText) } else { + if (result.error === 'SEGFAULT_ERROR') { + console.warn('[ChatPage] 捕获到语音引擎底层段错误'); + + setSystemAlert({ + title: '引擎崩溃提示', + message: ( + <> + 语音识别引擎发生底层崩溃 (Segmentation Fault)。

+ 如果您使用的是 Linux 等自定义程度较高的系统,请检查 sherpa-onnx 的相关系统动态链接库 (如 glibc 等) 是否兼容。 + + ) + }); + + } + setVoiceTranscriptError(true) voiceTranscriptRequestedRef.current = false } @@ -9388,6 +9409,31 @@ function MessageBubble({ {isSelected && } )} + {systemAlert && createPortal( +
setSystemAlert(null)} style={{ zIndex: 99999 }}> +
e.stopPropagation()} style={{ maxWidth: '400px' }}> +
+ +
+
+

{systemAlert.title}

+

+ {systemAlert.message} +

+
+
+ +
+
+
, + document.body + )} )