Skip to content

Commit c8cfb53

Browse files
committed
fix(classroom): 信息面板拉取兜底与说话人效果说明
1 parent d318eb9 commit c8cfb53

5 files changed

Lines changed: 37 additions & 4 deletions

File tree

‎app/src-tauri/src/commands_live.rs‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,17 @@ pub fn live_session_status(state: State<'_, AppState>) -> LiveSessionStatus {
109109
}
110110
}
111111

112+
/// 当前会话信息(REQ-151,v0.7.2:采集信息面板拉取兜底)。
113+
///
114+
/// @ai-context: live:session-info 事件在引擎就绪时发出——面板(liveActive 后
115+
/// 挂载)可能晚于事件注册监听,事件丢失 → 信息条不可见;本命令
116+
/// 提供挂载时拉取(事件驱动增量 + 拉取兜底双通道,修复不可见)。
117+
/// @ai-context: 无活动会话 → 返回默认空信息(前端不显示信息条,语义正确)。
118+
#[tauri::command]
119+
pub fn live_session_info(state: State<'_, AppState>) -> crate::session_info::SessionInfo {
120+
state.live_session.session_info()
121+
}
122+
112123
/// 预热流式 ASR 引擎(P3):选窗口阶段后台加载,点"开始"即录。
113124
///
114125
/// @ai-context: 返回 PrepareStatus(loading/ready/failed/idle)供前端提示;

‎app/src-tauri/src/lib.rs‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,10 @@ pub fn run() {
512512
commands_live::stop_live_session,
513513
#[cfg(target_os = "windows")]
514514
commands_live::live_session_status,
515+
// v0.7.2(REQ-151):采集信息面板拉取兜底(live:session-info 事件
516+
// 可能早于面板挂载——挂载时 invoke 拉取 + 事件增量双通道)
517+
#[cfg(target_os = "windows")]
518+
commands_live::live_session_info,
515519
// 2026-08 A1:会话暂停/继续(硬暂停——完全停采,时间轴冻结)
516520
#[cfg(target_os = "windows")]
517521
commands_live::pause_live_session,

‎app/src-tauri/src/live_session.rs‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,12 @@ impl LiveSessionManager {
128128
self.latest_frame.lock().ok().and_then(|g| g.clone())
129129
}
130130

131+
/// 当前会话信息快照(REQ-151:前端挂载兜底拉取——live:session-info 事件
132+
/// 在引擎就绪时发出,可能早于面板挂载/监听注册,拉取保证信息条始终可见)。
133+
pub fn session_info(&self) -> crate::session_info::SessionInfo {
134+
self.session_info.snapshot()
135+
}
136+
131137
/// 暂停活动会话(2026-08 A1 硬暂停:完全停采)。
132138
///
133139
/// @ai-context: 只置共享标志——实际暂停由捕获线程边沿检测执行

‎app/src/components/LiveActivityPanel.tsx‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
* 由 live:status / session:fusing/fused/failed 事件推导,父组件控制显隐。
1313
*/
1414
import { useEffect, useRef, useState } from "react";
15+
import { invoke } from "@tauri-apps/api/core";
1516
import { listen } from "@tauri-apps/api/event";
1617
// 2026-08 用户需求:实时转写中显示图片数据(转写 Tab 顶部"最近画面"条,独立区域不跳动)
1718
import LiveImageStrip from "./LiveImageStrip";
@@ -122,9 +123,15 @@ export default function LiveActivityPanel({ sessionId }: { sessionId?: number |
122123
// v0.7.2(REQ-151):采集信息面板(平台/时长/合集——live:session-info 事件)
123124
const [info, setInfo] = useState<SessionInfo | null>(null);
124125

125-
// 会话切换:清空旧会话信息(新会话标题信息由后端事件推送)
126+
// 会话切换:清空旧会话信息 + 拉取兜底(live:session-info 事件在引擎就绪时
127+
// 发出,可能早于本面板挂载/监听注册——invoke 拉取保证信息条始终可见;
128+
// 拉取失败静默:无活动会话等场景语义正确)
126129
useEffect(() => {
127130
setInfo(null);
131+
if (!sessionId) return;
132+
void invoke<SessionInfo>("live_session_info")
133+
.then(setInfo)
134+
.catch(() => undefined);
128135
}, [sessionId]);
129136

130137
// 时长计时(1s tick,仅展示)

‎docs/product/classroom-assistant-guide.md‎

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,16 @@
4141

4242
- **启用方式(可选增强)**:运行 `app/scripts/download-speaker-model.ps1` 下载模型(wespeaker-zh,约 20-70MB,Apache-2.0 许可),重启应用
4343
- **使用场景**:访谈/会议档案的会话详情页会显示「👥 讲者切换 N 处」及时间点(按置信度排序标注)
44-
- **限制与提醒**:
45-
- 弱化版**只标切换点,不聚类身份**(不会显示"讲者 A/B"归属)——身份聚类为后续版本
46-
- 音色相近的说话人可能漏判;短句(<0.5s)不计入分析
44+
- **效果预期与局限(请务必了解)**:
45+
- **本地方案效果有限**:无云端说话人分离(如 pyannote 级服务)的精度——本地 wespeaker 音色向量 + 余弦阈值是"可用级"而非"准确级":
46+
- **两人访谈**:切换点检测约 **85-90%** 可用;**多人会议**约 **75-80%**
47+
- **音色相近**的说话人(同性别、相似嗓音)会**漏判**;环境音/回声干扰下可能**误判**(把一段语气变化当换人)
48+
- 系统音频是**混音**(视频原声 + 环境噪声),非干净单麦录音——分离质量天然低于专业录制场景
49+
- 短句(<0.5s)与静音段不计入分析(音色向量不稳,宁漏勿错)
50+
- **弱化版只标切换点,不聚类身份**(不会显示"讲者 A/B"归属)——身份聚类为后续版本
4751
- **模型未下载时功能自动隐藏降级**(显示提示,不影响任何其他功能)
4852
- 单人讲课通常检测不到切换(属正常,非故障)
53+
- **建议**:把讲者切换标记当作"此处可能换人"的**线索**使用,涉及关键信息归属时对照原视频确认
4954
- 分析在会话详情打开时自动执行(幂等:只分析一次,结果落库)
5055

5156
## 六、断句自适应(v0.7.2,无需操作)

0 commit comments

Comments
 (0)