┌─────────────────────────────────────────┐
│ Blazor WASM (前端) │
│ - 只负责采集麦克风音频 │
│ - 通过 WebSocket 实时传输 │
│ - 无本地处理,轻量级 │
└──────────────┬──────────────────────────┘
│ WebSocket
│ (音频流)
↓
┌─────────────────────────────────────────┐
│ Audio3A.WebApi (后端 ASP.NET Core) │
│ - 接收音频流 │
│ - 应用 Audio3A.Core (AEC/AGC/ANS) │
│ - 房间管理 (RoomManagement) │
└──────────────┬──────────────────────────┘
│
↓
┌─────────────────────────────────────────┐
│ Audio3A.RoomManagement │
│ - 参与者管理 │
│ - 音频混音 (AudioMixer) │
│ - 录制和存储 │
└─────────────────────────────────────────┘
只做一件事:采集音频
- 请求麦克风权限
- 采集音频数据
- 通过 WebSocket 发送到后端
- 显示 UI 和音量指示
不做的事:
- ❌ 不做 3A 处理
- ❌ 不做录制
- ❌ 不做混音
- ❌ 不保存文件
核心处理层
- 接收 WebSocket 音频流
- 应用 Audio3A.Core 处理(AEC/AGC/ANS)
- 将处理后的音频分发到房间
- 房间和参与者管理
音频混音和录制
- 多路音频混音
- 录制房间音频
- 存储和下载
- 参与者状态管理
麦克风 → 浏览器采集 → WebSocket → 后端接收 → Audio3A处理 → 房间混音 → 录制/存储
↓
分发到其他参与者(WebSocket)
- 前端轻量:只负责采集,降低浏览器负担
- 集中处理:所有 3A 处理在服务器端,算法统一
- 易于调试:音频处理逻辑集中在后端
- 录制完整:服务器端录制,不会因为用户关闭浏览器而中断
- 资源共享:多人通话时,混音在服务器端完成
- Blazor WASM 简化(移除本地3A处理)
- AudioCallService 简化为只采集音频
- JavaScript 音频采集代码重写(只采集,移除录制)
- WebSocket 音频传输(前端发送 → 后端接收)
- 后端 WebSocket 端点实现
- 后端 Audio3A.Core 处理集成
- 房间录制和混音功能
- 简化 audioCall.js - 只采集音频,通过回调传递
- 在 Call.razor 中实现 WebSocket 客户端
- 在 WebApi 中添加 WebSocket 音频接收端点
- 在 RoomManagement 中集成 Audio3A.Core 处理
- 实现房间录制和混音功能